mybatis中的#和$
#{}
和${}
两种占位符都是去实现动态sql的一种方式,通过这种方式可以把参数传递到xml
里面,在执行操作之前,mybatis会对这两个占位符进行动态的解析。
#
占位符等同于jdbc里面一个?
占位符,它相当于向preparaeStatement里面的预处理语句设置参数,而这个sql语句是预编译的。sql语句中有占位符的话如果出现特殊字符会自动进行转义,所以
#
占位符可以防止sql注入
1 | String sql = "update student set age=? where id=?"; |
而
$
占位符相当于直接把参数拼接到了原始sql语句里面,mybatis不会对他进行任何的特殊处理
1 | select id, name from ${table} where id=${id}; |
所以
$
和#
的区别是,$
是动态参数,#
是占位符,动态参数无法防止sql注入,所以尽可能的去使用#
占位符。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.