【Java】MyBatis中#号和$号的区别是什么?

2023-12-13 05:40:41

MyBatis 提供的#号和$号,都是实现动态 SQL的一种方式,通过这两种方式把参数传递到XML之后,在执行操作之前,MyBatis 会对这两种占位符进行动态解析。

//使用#解析前
select * from user order by #{age} desc;
//使用#解析后
select * from user order by ? desc;

#号等同于JDBC 里面的?号(占位符)。它当于在 PreparedStatement 预处理语句中设置参数,而 PreparedStatement 中的SQL语是预编译的,如果在设置的参数中包含特殊字符,则会自动进行转义。所以#号占位符可以防止 SQL 注入

//使用$解析前
select * from user order by ${age} desc;
//使用$解析后
select * from user order by age desc;

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

文章来源:https://blog.csdn.net/weixin_63144583/article/details/134948838
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。