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

问题产生

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

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

初步想法

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

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

代码如下:

image.png

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

解决

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

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%