MyBatis中#{}和${}的三个区别

区别1:

#{} 相当于JDBC SQL语句中的占位符 “?”(PreparedStatement)
${} 相当于JDBC SQL语句中的连接符号 “+” (Statement)

所以,${} 存在SQL注入问题

区别2:

#{} 进行输入映射的时候,会对参数进行类型解析(如果是String类型,会自动加上引号)
${} 进行输入映射的时候,将参数原样输出到SQL语句中
所以在like条件查询中要小心
例如:
当查询条件中的name=”昆山花臂男”时
使用#{}

select * from user where username like '%#{name}%'  

会得到如下的sql:

select * from user where username like '%'昆山花臂男'%'

这个sql会执行报错。
而使用${}时

select * from user where username like '%${name}%'  

会得到如下的sql:

select * from user where username like '%昆山花臂男%' 

该sql可以正常执行。

区别3:

#{} 如果进行简单类型(String,Date、8种基本类型的包装类)的输入映射时,#{}中参数名称可以任意
#{} 如果进行简单类型(String,Date、8种基本类型的包装类)的输入映射时,${}中参数名称必须是value

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章