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>
在学编程的小菜鸡~

浙公网安备 33010602011771号