问题产生
上周做报表的时候,有一个动态排序的需求:
根据”create_time”或者”update_time”对数据进行升序或者降序。
初步想法
当时第一反应是,和前端约定传过来两个参数,一个作为排序字段,一个作为升降序,然后在xml文件中用#{}取到。
于是约定好sortingType 传create_Time或者create_time,不传默认create_time,sortingRule传ASC,DESC不传默认ASC。
代码如下:
以为只要前端传的没问题,就不会出问题,但是在测试中发现并没有进行排序,前端传过来值了。说明是后端问题。
解决
其实解决办法比较简单,这属于mybatis本身的问题,为了防止sql注入,使用#{}取值时会根据具体的数据类型 将其解析,所以会将字符串解析成 “”,这在order by 语句后肯定是不行的,于是使用${}就解决了这个问题,当然,得在代码里控制传入的值不能是别的字符,这样就在解决问题的基础之上也解决了sql注入问题。
本文转载自: 掘金