Mybatis总结(4)参数传递

主要内容:

  1. 在接口中只有一个参数和多个参数时,配置映射文件时应该怎么取值?
  2. @Param有什么用?
  3. 后端怎么封装在前端传过来的数据?有哪些场景?

一.单个参数时

可以接受基本类型,对象类型,集合类型的值。这种情况MyBatis可直接使用这个参数名,不需要经过任何处理。

二.多个参数时

1.规则

任意多个参数,都会被MyBatis重新包装成一个Map传入。Map的key是param1,param2,arg1, arg0…,值就是参数的值。
在dao层接口参数上可以加@Param,它的主要作用就是为参数起别名:
@Param(“empSn”) Long empSn
当加了参数之后MyBatis就会将这些参数封装进map中,key就是我们自己指定的名字
在XXXmap.xml中拼接sql时,就可以#{empSn}来取值了,当然不加也可以,前提是接口中只有一个参数,这时候#{}中可以随意写,但从见名知意的角度来看不要这么做;
但是当你的参数不止一个时随便写就找不到对应的参数了,此时你的的参数要么都加了@Param,要么一些加了,在后面这种情况下,加了的就可以使用新别名或者param1到paramN,没加的就只能用param1到paramN了

2.如果参数很多
2.1 多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入POJO

#{属性名}这样就可以取出POJO中的属性值了

2.2 如果不是业务逻辑的数据模型,可以传入map(不经常使用)

#{属性名}这样就是取的是传入的map中的属性名对应的属性值即key/value
Mybatis总结(7)select查询结果封装为map

2.3 如果不是业务逻辑的数据模型,可以传入To(经常使用)

自己编写一个To(trasfer object),比如分页场景:
List selectPageByQuery(BaseQuery baseQuery);
或者前端页面请求携带的参数需要被拆分来,分别填充到不同的crud方法中去执行:

public class EnteringDTO {
    //可以是对象也可以是普通类型,看你前端json怎么传喽
    private Tenant tenant;
    private Employee employee;
    private Long mealId;
}

三.传入的是Collection

会做特殊处理将传入的集合类型发封装在map中,所以不能直接通过属性[索引]来取值
比如批量删除中的场景:

    <delete id="batchDelete">
        DELETE FROM t_customer WHERE id IN
        <foreach collection="list" item="i" open="(" close=")" separator=",">
            #{i.id}
        </foreach>
    </delete>
void batchDelete(List<T> list);

或者:

    <insert id="saveRoleAndPermission">
        INSERT INTO t_role_permission(permission_sn,role_sn) VALUES
        <foreach collection="permissions" item="permission" separator=",">
            (#{permission.sn},#{roleSn})
        </foreach>
    </insert>
void saveRoleAndPermission(@Param("permissions") List<Permission> permissions, @Param("roleSn") Long roleSn);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值