#{}与${}的区别


#{}与${}的区别

#{}
  是预编译的方式,相当于jdbc的占位符PrepareStatement,

  一个#{}就是一个占位符

  mybatis在为#{}设置值时,会加引号


${} 模糊查询时不用
  直接拼接的方式,不对数值做预编译
  mybatis在为${}设置值时,不加引号
  存在sql注入的现象
只有在不支持占位符的时候才使用,比如需要列名的地方,同时获取传来的数据时要做校验

 

例如:

查询排序的处理
需要列名的地方,在原生jdbc开发中,不可以预编译
因为预编译会给值加上引号,需要列名的是直接进行拼接的

public List<Message> selectOrderBy(String column);
<include refid="BaseSql"/> order by #{column} desc 错误,没排序

<include refid="BaseSql"/> order by ${column} desc
mybatis对原生sql不支持占位的地方,接收参数的话,用${}
${}是一个拼接sql的方式,存在SQL注入的现象
传什么就拼什么

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM