一. 前言
很多小伙伴不太清楚Mybatis传参时使用$和#的区别,今天就来为大家解答一下
二. $和#的区别
sql映射文件:
<!--
public List<Emp> selectEmpByEmpNameLike(String empName,Integer startSize,Integer pageSize,List<Integer> ids);
-->
<select id="selectEmpByEmpNameLike" resultType="com.wanbangee.entities.Emp">
select * from emp where emp_name like #{param1} and emp_id = #{3[2]} limit ${param2},${param3}
</select>
打印的sql语句:
select * from emp where emp_name like ? and emp_id = ? limit 0,5
通过上面运行结果发现:
#:使用占位符的形式传递参数
$ : 直接通过字符串拼接的形式传递参数
所以得出结论:
#:使用预处理【预编译】的处理,不存在sql注入的安全问题
$:存在sql注入的安全问题
那么什么时候使用#,什么使用使用$
呢?参数为查询条件的时候使用#,而分开分表的时候使用$,什么是分库分表呢?
Order_202001,order_202002,order_202003…有一个业务,要求按照用户输入的月份查询对应月份的订单信息,参数值为202001
Select * from order_#{year_month} ×
Select * from order_${year_month} √