Mybatis(二) Mybatis中#{}和${}的区别详解

场景:假设数据库有两个数据一模一样的表。历史表,当前表

查询表中的信息,有时候从历史表中去查询数据,有时候需要去新的表去查询数据。

希望使用1个方法来完成操作。即根据不同的表名查询数据。

使用${}可以查询到数据

使用#{}不可以查询到数据

${}与#{}区别:

  • ${} 是字符串拼接,通过${}可以将传入的内容拼接在sql中且不进行jdbc类型转换。
  • #{} 是占位符,相当于PreparedStatement使用占位符去替换参数,自动进行java类型和jdbc类型转换,可以防止sql注入。
  • 所以${}字符串拼接可以拼接表名执行sql语句,但 #{}占位符只能站位参数,而不是站位表名,所以不可以执行sql语句。

#{},${} 都可以接收一个简单类型、多个简单类型、实体类型。

1)一个简单类型

  • 如果parameterType传输一个简单类型,#{}括号中可以是value或任意名称,因为 #{} 只是表示占位,与参数的名字无关,如       果只有一个参数,会自动对应。
  • 如果parameterType传输单个简单类型值,${}括号中只能是value。 如果想换成任意名称,可以在方法上添加@Param。 

2)多个简单类型

  • 单个简单类型参数时,#{}与参数名无关
  • 多个简单参数时,#{} ,${}与参数名都有关,写法一致。

解决办法,多个参数都添加@Param,参数名称必须一致。

3)实体类型,#{} 内填对应的实体属性名即可,而${} 还是需要@Param接收。

 

 

 

转自:Mybatis(二) Mybatis中#{}和${}的区别详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值