mybatis中#和$符号的区别
#{}
- 使用
#{}
意味着使用的预编译的语句,即在使用jdbc时的preparedStatement时,sql语句中的参数会用?作占位符,可以防止sql注入。 - 使用
#{}
时形成的sql语句,组成sql语句的时候把参数默认为字符串,带有引号,例:
select * from student where id=#{id}
调用这个语句时可以通过后台看到打印出的sql为:
select * from student where id='2'
${}
-
使用
${}
时的sql不会当做字符串处理,原样输出:
select * from student where id=${id}
在调用这个语句时控制台打印的为:
select * from student where id=2
-
在需要原样输出时使用
${}
,如:
select * from ${tableName} order by ${id}
则后台语句为:select * from student order by id
使用#{}
则成:select * from 'student' order by 'id'
是不对的
注:
在使用以下的配置时,必须使用#{}
<select id="selectMessageByIdI" parameterType="int" resultType="Message">
select * from message where id=#{id};
</select>
在parameterType是int时,sql语句中必须是#{}