Mybatis中#与$的区别
Mybatis中的#{}用于传递查询的参数,用于从dao层传递一个string参数过来(也可以是其他参数),select * from 表名 order by age=#{age}
Mybatis会把这个参数转换成一个字符串。select * from 表名 order by age="age" 相当于jdbc中的预编译,安全。
而${}一般用于order by的后面,Mybatis不会对这个参数进行任何的处理,直接生成了sql语句。例:传入一个年龄age的参数,select * from 表名 order by ${age}
Mybatis生成的语句为 select * from 表名 order by age Mybatis不会对$传递的参数做任何处理,相当于jdbc中的另外一种编译方式。
注意:
1.MyBatis排序时使用order by 动态参数时,用${}而不是#{},因为传入的有些值可能是非字符串类型
代码如下:
<if test="orderByClause != null" >
order by ${orderByClause}
</if>
2.MyBatis进行全局模糊条件查询的时候尽量也用${},因为用#{}传入的非字符串会被转化成字符串类型
<if test="assessmentContentCode != null and assessmentContentCode != ''">
and Assessment_content_code like '%${assessmentContentCode}%'
</if>
一般我们使用#{},不使用${},原因:
会引起sql注入,${}会直接参与sql编译。会影响sql语句的预编译。