zoukankan      html  css  js  c++  java
  • 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-分步查询&延迟加载

        

  • 相关阅读:
    Mybatis实现数据的增删改查(CRUD)
    Spring MVC基础入门
    Swap in C C++ C# Java
    java和c#使用hessian通信
    基于Netty4的HttpServer和HttpClient的简单实现
    RabbitMQ的几种典型使用场景
    java多线程编程
    singleton pattern的推荐实现
    python多线程编程
    基于GMap.Net的地图解决方案
  • 原文地址:https://www.cnblogs.com/niujifei/p/15236160.html
Copyright © 2011-2022 走看看