mybatis中#{}和${}符号的区别
Posted macht
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis中#{}和${}符号的区别相关的知识,希望对你有一定的参考价值。
{}??使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入,并且在使用#{}时形成的sql语句,已经带有引号,例,select? * from table where id=#{id} 在调用这个sql时我们可以通过后台看到打印出的sql为:select * from table where id=‘2‘ 假如传的id值为2.也就是说在组成sql语句的时候把参数默认为字符串。
({}?使用){}时的sql不会当做字符串处理,如上边的语句:select * from table where id=${id} 在调用这个语句时控制台打印的为:select * from table where id=2 and name=3 ,假设传的参数id值为(2 and name=3),这样就会带来sql注入。
这里也不是说({}一无是处,比如在MyBatis动态排序时使用order by +){动态参数},使用${}而不是#{}。
以上是关于mybatis中#{}和${}符号的区别的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis探究-----接口类映射XML文件中符号$和#的区别