概述
有这样一个需求,在某个模块中,有多个tab需要按不同的字段进行排序,这样的话,前端就可以给你一个1,2,3,4的标识,你通过这个标识,来拼接需要排序的字段名,而后在mybatis中动态拼接这个字段名就可以了,但是需要注意一个问题,拼接的时候,不能用#{}拼接,必须得用${}拼接,否则会报报无效索引列错误,有人说会有SQL注入的风险,我想了一下,如果是你的拼接是在后端完成的,不是用前端的数据进行拼的SQL那么也就不存在SQL注入风险了。
demo
java代码
public Result findData(Opetest test){
String orderByCloumn = null;
if(test.getMark()==1){
orderByCloumn = "name";
}
if(test.getMark()==2){
orderByCloumn = "age";
}
List<Ope> opeResult = OpeMapper.findData(orderByCloumn );
return Result(opeResult);
}
mapper接口
List<Ope> findData(String orderByCloumn);
xml文件
<select id="findData" resultType="com.Ope">
SELECT
name,
age
ORDER BY ${orderByCloumn }
</select>
记得了要用${}来拼ORDER BY进行动态的排序,否则会报无效索引列
有点坑的是,你在navicat中在索引列加单引号和双引号都可以出得来结果,但是,一到mybatis中就报错,并且你很疑惑,就是#{}和${}的问题了
2008

被折叠的 条评论
为什么被折叠?



