一.防止sql注入
例子1:select id from user
where username = #{username,jdbcType=VARCHAR}
例子2:select id from user
where username = ${username,jdbcType=VARCHAR}
mybatis中的#和$的区别
#{} | 相当于JDBC中的PreparedStatement |
---|---|
${} | 是输出变量的值 |
- #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如果传入的值是111,那么解析成sql时的值为where username=“111”
- $将传入的数据直接显示生成在sql中。如果传入的值是111,那么解析成sql时的值为where username=111
结论:简单说,#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
二.MyBatis中的 JdbcType对应mysql中的值
可以参考http://blog.csdn.net/loongshawn/article/details/50496460