映射文件的参数处理

映射文件的参数处理

这里的参数处理指定是对入参的处理, Mybatis中就是对入参的处理和对结果集的处理

单个参数:

对于单个参数 : mybatis不会做特殊处理

做法: 使用#{参数名} 方式取出参数值

  • 注意: 此时是参数名, 而不是属性名(如果参数是一个对象的时候我们#{}中才是属性名), 此时由于只有一个参数, 所以我们的#{参数名}中的参数名其实是可以随便取的, 因为此时我们只有一个参数, 所以我们的mybatis中肯定会将这一个参数填充到我们的#{}占位符的位置来
注意: 这里指的单个参数指的是参数不是自定义的javaBean类型, 而是此时的参数是String, int等

多个参数:

对于多个参数: mybatis会做特殊处理, 多个参数会被封装成一个map, 如以下形式:

key : param1 … paramN

value : 传入的参数值

注意: 我们通过参数的索引可以获取到对应的value, 索引0就可以替代param1, 索引1可以替代param2, 一次类推
  • map属于java中的类型, 而java中的索引从0开始, 所以对于多个参数我们要使用#{paramN}或者#{N}的方式来获取多个参数中对应参数的值
    • N代表的就是第几个参数
针对多个参数的情况, 我们如果不想使用#{N} 或 #{paramN}的方式来获取多个参数的值, 那么我们可以有如下四种方式来解决:
  1. 命名参数: 顾名思义就是给参数命名, 明确指定封装多个参数时的map中的key

    • 操作: 在Mapper接口中的方法的形参位置使用@Param(“key1”)注解为对应形参封装的时候自定义key的值
      • 注意: 使用了命名参数之后, 我们的key的值就是我们@Param中定的"key1"的值
  2. POJO : 如果多个参数正好是我们业务逻辑的数据模型, 我们就可以直接将多个参数封装到一个对应的数据模型(JavaBean)中, 然后我们将这个JavaBean传入到形参列表中即可

    • 操作 : 传入了一个JavaBean之后我们就可以使用#{属性名}的方式来取出传入的POJO的属性值
  3. Map : 如果多个参数不是业务模型中的数据, 没有对应的POJO, 那么为了方便, 我们也可以是将要传入的多个参数自己封装为一个Map, 那么我们自己封装的时候我们就可以指定键值

    • 操作: 我们传入一个map对象之后, 那么我们取值的时候就要通过#{key}的方式获取
  4. To : 如果多个参数不是业务模型中的数据, 但是经常使用, 推荐编写一个TO(Transfer Object : 数据传输对象)

    • 也就是专门编写一个对象用来传输这多个参数, 我们将这样的对象称之为 : TO
      • 比如分页操作中我们常常要传入两个参数, int index(每页的起始位置)和 int size(每页的大小), 那么我们就可以专门编写一个对象, Page {int index; int size} 用来作为TO

参数处理特殊情况之理解加深:

public Employee getEmp(@Param("id") Integer id, String lastName);
  • 取值 : id => #{id} / #{param1} , lastName => #{param2}
    • 注意: 当我们使用@Param注解指定了一个属性的key值之后, 那么就不可以使用索引来获取属性值了, 也就是不能使用#{N}的方式来获取数据值了
public Employee getEmp(Integer id, @Param("e") Employee emp);
  • 取值: id => #{param1} , lastName => {param2.lastName} / #{e.lastName}
public Employee getEmpById(List<Integer> ids);
  • 取值 : 取出第一个id的值 => #{college[0]} / #{list[0]}

  • 特别注意: 如果是Collection(单列集合), 也就是list和set类型, 或者是数组类型的时候, 即使传入的是单个参数, 但是也会做特殊处理, 我们会将Collection中的值或者是数组中的值封装到map中
    • 那么它们的键分别是什么?
      1. 对于List集合的key为 : 小写的collection / list
      2. 对于Set集合的key为 : 小写的collection / set
      3. 对于数组的key为: 小写的array
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值