一、背景
根据和前端约定字段,自定义排序字段
SELECT * FROM user ORDER BY #{field}
<if test="asc == false">
DESC
</if>
LIMIT #{pageStart}, #{pageSize}
根据传入属性field字段排序
一直查询结果是根据id正序
mybatis打印出来sql:
==> Preparing: SELECT * FROM user ORDER BY ? DESC LIMIT ?, ?
==> Parameters: id(String), 0(Integer), 10(Integer)
自己把sql拼接好去navicat上执行结果正常
二、发现问题
#防止注入会把字段加上"id",执行排序就忽略了
三、解决办法
使用$注入,但会有SQL注入问题,自己做判断,根据情况定课避免;
获取去掉这个自定义属性排序,排序字段写死;
或者使用mybatis-plus封装的QueryWrapper;
数据多且复杂可聚合到es