MyBatis 中#{} 和 ${}符号异同
相同点:
都能取到变量的值。
不同点:
#可以实现预编译,会先把#{变量}编译成?,在执行时再取值,可以防止sql注入。
$是直接进行字符串替换。
各自特点:
#{} 占位符,是经过预编译的,编译好 SQL 语句再取值,
#方式能够防止 sql 注入 #{}
#{}:select * from t_user where uid=#{uid}
${} 拼接符,会传入参数字符串,取值以后再去编译 SQL 语句,
$方式无法防止 Sql 注入 ${}
${}:select * from t_user where uid= '1'
注意:MyBatis 排序时使用 order by 动态参数时需要注意
实例:
在Maven项目下,利用Mybatis时,如果向数据库中的数据进行增删改查,对应的sql语句可以使用如图两种方式(进行mybatis全局配置后)
当用#时,控制台会显示为如图
显示的value为(?,?)
在使用${}时,显示为如图
你的sql语句为:
其中你的${}要用单引号包着
控制台显示为
其中的 value为('zhangsan','root’)
前面为你的account的value,后面的root为数据库的密码