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
上一篇下一篇

猜你喜欢

热点阅读