MyBatis中 #{} 和 ${} 的区别和用法

MyBatis中 #{} 和 ${} 的区别和用法


在使用MyBatis框架的时候,编写Mapper.xml映射文件时写sql语句的时候经常需要使用到变量,而变量的接收方式有以下两种:

  1. 使用 #{} 表示占位,和参数名无关,识别参数的类型
  2. 使用 ${} 表示拼接,和参数类型无关

#{}的用法

Dao接口方法中有两个参数.在Mapper.xml文件中如何使用#{}传参?

  1. 默认方式一:以从0开始的递增数字作为键,第一个参数是0,第2个参数就是1,以此类推

    select * from user where id = #{0} and name = #{1}
    
  2. 默认方式二:以”param” + i 作为键,i是从1递增的数字,第一个参数键就是param1,第2个就是param2,以此类推

    select * from user where id = #{param1} and name = #{param1}
    
  3. 在接口方法的形参前面加上注解@Param(“id”)和@Param(“name”),就可以使用如下形式

    select * from user where id = #{id} and name = #{name}
    

${}的用法

: {}底层其实使用的是OGNL表达式。在处理参数时,与#{}有很大差别

1. 当只有一个参数时:

MyBatis底层会把这个参数 以键为’value’的形式存入Map中,因此取值的时候,必须${value},或者通过@Param注解

2 . 当有多个参数时

此时必须以 param1 {param2}方式或者@Param注解方式来获取参数

注意事项 :

1、${}在取值时,并不会进行预编译,而是直接拼接SQL语句,这样无法防止SQL注入问题

2、 {}”

总结:#和$的区别与联系

区别:

1) #是占位符,会对SQL进行预编译,相当于?; $是做SQL拼接,有SQL注入的隐患

2) #不需要关注数据类型,Mybatis自动实现类型转换。 $必须自己判断数据类型

联系:

两者都支持通过@Param注解 指定参数名称,来获取参数值。推荐这种方式!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值