实际开发中mybatis的动态排序问题

问题产生

上周做报表的时候,有一个动态排序的需求:

根据"create_time"或者"update_time"对数据进行升序或者降序。

初步想法

当时第一反应是,和前端约定传过来两个参数,一个作为排序字段,一个作为升降序,然后在xml文件中用#{}取到。

于是约定好sortingType 传create_Time或者create_time,不传默认create_time,sortingRule传ASC,DESC不传默认ASC。

代码如下:

image.png

以为只要前端传的没问题,就不会出问题,但是在测试中发现并没有进行排序,前端传过来值了。说明是后端问题。

解决

其实解决办法比较简单,这属于mybatis本身的问题,为了防止sql注入,使用#{}取值时会将其解析成带有""的值,这在order by 语句后肯定是不行的,于是使用${}就解决了这个问题,当然,得在代码里控制传入的值不能是别的字符,这样就在解决问题的基础之上也解决了sql注入问题。

猜你喜欢

转载自juejin.im/post/7035804582521339917