今天在做项目的时候遇到一个动态排序的功能,需求为:可点击多个列后面的箭头,动态升降序。
一.解决思路
前端动态传入字段名与排序方式(desc、asc)
二.解决方式
1.代码如下:
ORDER BY #{sort}||' '||#{sortType}
执行后发现排序未生效
2.代码如下:
ORDER BY ${sort} ${sortType}
排序生效。
三.原因
首先说一下 # 与 $ 的区别:
1.#可以防止sql注入。
2.#才用预编译形式,先用?占位,最后才设置值。
3. $中间的变量就是直接替换成值的 , #会根据变量的类型来进行替换。
比如为sort字段设置值name
采用#为 'name'
采用$为 name
所以前面的问题就可以理解了。
4.$方式一般用于传入数据库对象,例如传入表名。
5.一般能用#的就别用$。
6.order by后面要使用 $。