MyBatis(四)映射文件 之 resultMap 自定义映射

一、resultMap 自定义映射

  1、resultMap 是什么

    resultMap 是自定义的映射关系,可实现高级结果集映射。

    注意:resultMap 不能与 resultType 同时使用。

  2、子标签说明

constructor - 类在实例化时, 用来注入结果到构造方法中
    – idArg - ID 参数; 标记结果作为 ID 可以帮助提高整体效能
    – arg - 注入到构造方法的一个普通结果


id : 一个 ID 结果; 标记结果作为 ID 可以帮助提高整体效能


result – 注入到字段或 JavaBean 属性的普通结果


association – 一个复杂的类型关联;许多结果将包成这种类型
    – 嵌入结果映射 – 结果映射自身的关联,或者参考一个


collection – 复杂类型的集
    – 嵌入结果映射 – 结果映射自身的集,或者参考一个


discriminator – 使用结果值来决定使用哪个结果映射
    – case – 基于某些值的结果映射


嵌入结果映射 – 这种情形结果也映射它本身,因此可以包含很多相同的元素,或者它可以参照一个外部的结果映射。

  

  3、id & result

    id 和 result 映射一个单独列的值到简单数据类型(字符串,整型,双精度浮点数,日期等)的属性或字段。

    id:用于设置主键的映射关系;

    result:用于设置非主键的映射关系;

    常用属性:

property:映射到列结果的字段或属性。例如:"username" 或 "address.street.number"
column:数据表的列名,通常和 resultSet.getString(columnName) 的返回值一致
JavaType:一个 Java 类的完全限定名,或一个类型别名,如果映射到一个 JavaBean,MyBatis 通常可以断定类型(类型推断机制)
JdbcType:JDBC 类型是仅仅需要插入、更新和删除操作可能为空的列进行处理
typeHandler:类型处理器。使用这个属性,可以覆盖默认的类型处理器。这个属性值是类的完全限定名或者是一个类型处理器的实现。或者是类型别名。

    代码示例:

    <!--
        resultMap:自定义结果集映射规则
        自定义某个 JavaBean的封装规则
        type:自定义规则的java类型
        id:唯一id方便引用
    -->
    <resultMap id="MySimpleEmp" type="com.njf.mybatis.bean.Employee">
        <!--
            指定主键列的封装规则
             id 定义主键会底层优化:
             column:指定哪一列
             properties:指定对应的 javaBean 属性
         -->
        <id column="id" property="id"/>
        <!--    定义普通列封装规则    -->
        <result column="last_name" property="lastName"/>
        <!--  其他不指定的列会自动封装,我们只要写 resultMap就把全部的映射规则都写上  -->
        <result column="email" property="email" />
        <result column="gender" property="gender"/>

    </resultMap>
    <!--
        public Employee getEmpById(Integer id);
    -->
    <select id="getEmpById" resultMap="MySimpleEmp">
        select * from tbl_employee
        where id = #{id}
    </select>

二、association

  association:复杂对象映射,POJO中的属性可能会是一个对象

  1、使用联合查询、并以级联属性的方法封装对象

    

  2、使用association标签定义对象的封装规则(嵌套结果集)

    

  3、association -分段查询

    

     select:调用目标的方法查询当前属性的值

    column:将指定列的值传入目标方法

  4、association-分段查询&延迟加载

    开启延迟加载和属性按需加载

    

     旧版本的 MyBatis 需要额外的支持包:

    asm-3.3.1.jar

    cglib-2.2.2.jar

三、collection

  1、Collection-集合类型&嵌套结果集

    

    

  2、Collection-分步查询&延迟加载

    

原文地址:https://www.cnblogs.com/niujifei/p/15236160.html