最近在项目遇到一个问题,就是查询数据排序不成功,有点小坑
ORDER BY #{pagination.sorting}
这是项目中排序的动态参数
看日志没看出啥毛病,但是查询出来数据并没按照按照我们的排序来
事实上这里预处理会出问题,为什么呢?
当使用#符号时,MyBatis编译SQL时会将动态参数变为字符串再进行拼接
比如我们是id倒序,上面的SQL就会变成 ORDER BY "id DESC",id DESC变成了需要排序的字段名,但id才是我们需要排序的字段名,所以才导致数据排序不成功。
那我们才怎么办呢,很简单使用$符号即可
ORDER BY ${pagination.sorting}
当使用$符号时,MyBatis编译SQL时会将动态参数进行直接拼接,风险是容易被SQL注入,非必要则少用