Mybatis的传参处理与结果集处理

一、传参处理

在Mybatis的使用过程中,Java接口方法中的参数如何与sql语句所需要传入的参数一一对应起来是一件非常重要的事情,接下来我们来看看Java各类参数在mybatis中的处理。
1.单个简单类型参数(Java内置类型,基本类型等)

mybatis不会做特殊处理,
取值方式:#{参数名/任意名}:取出参数值。

2.多个简单类型

二、多个参数:mybatis会做特殊处理:多个参数会被封装成 一个map,
这个封装起来的map的key为param1...paramN,或者参数的索引(形参名)也可以。

推荐:使用注解(@param(“索引1”)参数1,@param(“索引2”)参数2)
3.实体类(pojo)

mybatis内置类型处理器,所以想要取得实体类中的属性直接通过#{属性名}即可

4.实体类与普通参数混合

假设有方法 query(User user ,Integer id);
则对两个参数使用注解
 query(@param("索引1")User user ,@param("索引2")Integer id)
 想要调用对象中的属性则使用:#{索引1.属性名}
 普通类型则直接#{索引2}
 

5.Map类型

map类型需要进行取值则通过#{key}取值

6.List、Set或者数组类型
(1)List、数组单独使用

如果是Collection(List、Set)类型或者是数组,也会特殊处理。也是把传入的list或者数组封装在map中。
key:Collection(collection),如果是List还可以使用这个key(list)
数组(array)
public Employee getEmpById(List<Integer> ids);
取值:取出第一个id的值: #{list[0]}

(2)结合foreach使用

Select * from user where id in
<foreach collection="array" item="user" open="(" separator="," close=")">
            #{user}
</foreach> 

二、结果集处理

1.返回简单类型
直接通过ResultType指明返回类型即可
2.返回类型为集合类型(List、Set)

注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 
resultType 和 resultMap 之间只能同时使用一个。

在这里插入图片描述
3.返回类型为Map

1)返回单行数据时
每个字段对应着map中的一个key,查询的结果为value,注意将resultType设为java.util.HashMap
(2)返回多行数据时
需要使用MapperKey注解指明返回的map的key值,对应的Object应时能够包括单行所有查询记录类型
(Java类或者集合)
@MapKey("id")
Map<Integer, Employee> getAllEmp();

4.返回类型为pojo
此时mybatis的类型处理器会帮你自动映射与字段名相同的属性名进行赋值,如果两者存在差别可以在查询语句中使用别名进行处理。

5.需要使用resultMap的情形
mybatis包含类型处理器,所以很多类型能够帮我们进行自动映射,但是当结果集中有类型嵌套时我们就需要自定义结果集了
(1)返回结果为Java对象,对象成员属性中含有另一个对象。
需要使用association标签 指明JavaType,而且此时类型推断不会起作用(即使是同名变量也需要手动指明)

    <resultMap id="userRoleMap" type="User">
        <id property="id" column="id"></id>
        <result property="userName" column="userName"></result>
        <result property="userPassword" column="userPassword"></result>
        <result property="address" column="address"></result>
        <association property="role" javaType="com.openlab.pojo.Role" >
            <id property="id" column="r_id"></id>
            <result property="roleCode" column="roleCode"></result>
            <result property="roleName" column="roleName"></result>
        </association>
    </resultMap>

(2)返回结果集为Java对象,并且成员属性含有集合类型
需要使用到collection标签,并且需要指明集合中保存的类型。

    <resultMap id="userAddressMap" type="User">
        <id property="id" column="id"></id>
        <result property="userName" column="userName"></result>
        <result property="phone" column="phone"></result>

        <collection property="addresses" ofType="com.openlab.pojo.Address" resultMap="addressMap">
        </collection>
    </resultMap>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值