在oracle中动态拼接order by报无效索引列

概述

有这样一个需求,在某个模块中,有多个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中就报错,并且你很疑惑,就是#{}和${}的问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值