最代码广告位
yangna123的gravatar头像
yangna1232019-06-03 14:05:19

菜鸟问题:Mybatis中#{}和#{}有什么区别?最好举例说明下

问题描述

select * from table1 where column = #{param}

select * from table1 where column = ${param}

有什么区别?最近g刚学Mybatis遇到的。

所有回答列表(7)
kai1008的gravatar头像
kai1008 LV92019年6月4日

第一种:select * from table1 where column = ?

第二种:select * from table1 where column = ‘你’

java小不点的gravatar头像
java小不点 LV102019年6月4日

#{}和${}都是用来动态传递参数,区别在于比如说动态传入表名时

select * from #{user}

则相当于

select  * from 'user'

select * from ${user}

相当于

select  from user

简单来说传入String类型的数据时用#{},当传表名或者列名时用${}

 

has gone的gravatar头像
has gone LV52019年6月4日

#{}是占位符,相当于原来的?

如果是对象类型,解析要符合ognl表达式

可以进行JavaType与jdbcType的自动转换

可以防止sql注入

${}是原封不动的字符串拼接

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

拼接结果:select * from user where username like '%王%'

如果是对象类型,解析要符合ognl表达式

不能进行JavaType与jdbcType的自动转换

不能防止sql注入。

除了模糊查询建议都使用#{}。

最代码人间蒸发的gravatar头像
最代码人间蒸发 LV202019年6月5日

楼上正解!!!

matintalorr的gravatar头像
matintalorr LV82019年6月6日

1.优先使用#{paramName,jdbcType=VARCHAR} 写法,除了可以防止sql注入以外,它还能在参数里含有单引号的时候自动转义,

而${paramName}由于是类似于拼接sql的写法,不具备此功能。

2.注意,使用 #{paramName,jdbcType=VARCHAR} 写法的时候,模糊查询的写法为:'%'||#{paramName,jdbcType=VARCHAR}||'%'

TomMother的gravatar头像
TomMother LV62019年6月13日

  #{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,变成如下的 sql 语句:

select * from user where name = ?;

而 ${} 则只是简单的字符串替换,在动态解析阶段,该 sql 语句会被解析成

select * from user where name = 'zhangsan';
liyunfei456的gravatar头像
liyunfei456 LV22019年6月26日

1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id ='1'.

 2 $是将传入的数据直接显示生成sql语句,eg:select id,name,age from student where id =${id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.

 3 使用#可以很大程度上防止sql注入。(语句的拼接)

 4 但是如果使用在order by 中就需要使用 $.

 5 在大多数情况下还是经常使用#,但在不同情况下必须使用$. 

相关问答
    最近浏览
    暂无贡献等级
    庭前的花开了 LV44月16日
    月亮
    王海铭 LV94月9日
    月亮月亮星星
    xialong150 LV53月19日
    月亮星星
    几人共钓寒江雪 LV22月22日
    星星星星
    13072368302 LV82019年12月25日
    月亮月亮
    liu281337084 LV22019年12月24日
    星星星星
    云着殇 LV72019年12月23日
    月亮星星星星星星
    小灰灰520 LV52019年12月19日
    月亮星星
    DoubleL LV12019年11月11日
    星星
    顶部客服微信二维码底部
    >扫描二维码关注最代码为好友扫描二维码关注最代码为好友