Mybatis 动态排序遇到的坑
2019-10-09 本文已影响0人
就叫basi
今天,我接到需求,要求是点击时间column,该列实现desc或者asc排序。
我这一想xml中加个动态order by不完了嘛😏😏😏
于是动手:
<if test="order != null and order != '' and orderMethod != null and orderMethod != ''">
order by #{order} #{orderMethod}
</if>
重启服务,点击排序,发现顺序还是原来的鬼样子,我就debug啊,发现该传的参数都传过去了啊,
控制台对应的sql是这样的
屏幕快照 2019-10-09 下午12.57.19.png
发现问题原来是#{}是会自动对传入的String类型数据加一个双引号,我使用的order by #{order},大概解析成order by "createTime" "DESC",这样的话,sql就有问题了,
还有一种sql方式, ${} ,这种方式是sql拼接,会有sql注入的问题(只能手动处理过滤一下输入的内容)
<if test="order != null and order != '' and orderMethod != null and orderMethod != ''">
order by ${order} ${orderMethod}
</if>
重启服务,点击排序,顺序改变,对应控制台的sql是这样的
屏幕快照 2019-10-09 下午12.59.45.png
此外还有一个like 语句后也需要用${}
vans.png