MyBatis里面提供了#号和$号两种占位符,都是去实现动态SQL的一种方式;通过这两种方式:可以把参数传递到XML里面,那么传递以后呢,在执行操作之前MyBatis会对这两个占位符进行动态解析;

#号占位符呢,等同于JDBC里面一个?号占位符,它相当于向PreparedStatement的里面预处理语句设置参数,而PreparedStatement里面的SQL语句它是预编译的,那么SQL语句中呢使用了占位符,规定的SQL语句的一个结构,并且在设置参数的时候,如果有特殊字符会自动进行转义,所以#号占位符可以防止SQL注入;

$号占位符呢,在传递参数的时候,相当于直接把参数拼接到了原始SQL里面,MyBatis不会对它进行特殊处理;

$号和#号最大的区别在于:前者是动态参数,后者是占位符,动态参数无法防止SQL注入,所以在实际应用中尽可能的使用#号占位符,另外,$符号的动态参数,可以适合应用在一些动态SQL的场景里面,比如说:动态传递表名或者动态设置排序字段等等;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐