#{}与${}的区别

#{}与${}的区别

#{}
  是预编译的方式,相当于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注入的现象
传什么就拼什么

 

posted @ 2020-08-24 14:22  龙陌  阅读(1665)  评论(0编辑  收藏  举报