1,mybatis 中 $ # 区别
mybatis 动态传参的两种方式
#{ }在动态解析的时候,会将#{ } 解析为一个预编译阶段的一个标记符号?,在预处理阶段才会替换
${ }在动态解析的时候,会将${ } 直接就会惊醒变量替换
优先使用 #{}。因为 ${} 会导致 sql 注入的问题。
select * from ${tableName} where name = #{name}
表名如果是:user; delete user; --
动态解析的sql 就会变成:
select * from user; delete user; -- where name = ?;
这样sql 就注入进去了,但是表明只能用${ }
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
$将传入的数据直接显示生成在sql中
$方式一般用于传入数据库对象,例如传入表名