MyBatis动态 order by 排序不生效解决方法

使用Mybatis在做一个项目时,发现需要动态的去做一个排序功能,于是乎有了下面XXXMapper.xml代码

<if test="order!=null and !order.isEmpty()">
      order by #{order} desc
</if>

传参的时候:

List<XXX> findXXX("price");//传递需要倒序的列名

 

但是经过很久苦苦尝试,发现貌似这样写排序不生效的

最后经过测试和实验发现了 原因和解决方案:

 

#{order} 在Mybatis中 会将其变成 select * from Student order by ? desc 占位符,在运行时才变成 'order' ,避免受到SQL注入攻击 所以排序失败

${order} 则直接 select * from Student order by 字段 desc 排序成功,但这种方法有SQL注入风险

<if test="order!=null and !order.isEmpty()">
      order by ${order} desc
</if>

 

posted @ 2021-03-10 17:06  青栀i  阅读(1827)  评论(0)    收藏  举报