Mybatis 中 ${}和 #{} 的区别
${} :
- ${} 则只是简单的字符串替换
- 动态解析sql 表现为 select * from user where user_name = "lilei"
${}使用应该注意的问题:
危险操作如下 select * from ${tableName} where user_name = #{name}
如果此时 传进来的参数 tableName = "user ; delete user; -- " 动态解析之后如下:
select * from user ; delete user -- where user_name = ?
-- 之后的语句会被注释掉 ,原本的sql语句则变成了 查询所有的用户信息 + 删除用户表对数据库造成重大损伤
#{}:
- #{}在预处理时,会把参数部分用一个占位符 ? 表示
- 表现为 select * form user where user_name = ?