MyBatis中#{}和${}的作用与区别

在mybatis中#和$的主要区别是:#传入的参数在SQL中显示为字符串,#方式能够很大程度防止SQL注入;$传入的参数在SQL中直接显示为传入的值,$方式无法防止SQL注入。


1、传入的参数在SQL中显示不同

#{} 将传入的参数(数据)在SQL中显示为字符串,会对自动传入的数据加一个双引号。
「对自动传入的数据加一个双引号」

例:使用以下SQL语句

SELECT id,name FROM student WHERE id =#{id};

//当我们传递的参数id为 "1" 时,上述 SQL 的解析为:

SELECT id,name FROM student WHERE id ="1";

${} 将传入的参数(数据)直接显示生成在SQL中

例:使用以下SQL语句

SELECT id,name FROM student WHERE id =${id};

//当我们传递的参数id为 "1" 时,上述 sql 的解析为:

SELECT id,name FROM student WHERE id =1;

2、#{}可以防止SQL注入的风险(语句的拼接);但${}无法防止SQL注入。

3、${}方式一般用于传入数据库对象,例如:表名用参数传递进SQL。

4、大多数情况下还是经常使用#{},一般能用#{}的就别用${};但有些情况下必须使用${},例:MyBatis排序时使用ORDER BY动态参数时需要注意,得用${}而不是#{}。

5、#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中。


MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${};两者都是动态的向sql语句中传入需要的参数。

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值