Mybatis-05

Mybatis

  在学习完mybatis的配置属性后,我们接下来了解一个最重要最强大的元素:ResultMap,它可以将查询到的复杂数据映射到一个结果集上,这极大的方便了sql语句的书写。

基本的resultMap

    <resultMap id="用来绑定的id,自定义" type="这个是pojo类">
        <id column="主键的字段名,自取" property="映射到pojo类中的主键属性" jdbcType="字段类型"/>
        <result column="表的字段名,自取" property="映射到pojo类的一个属性" jdbcType="字段类型"/>
        <!-- 一个复杂类型的关联;许多结果将包装成这种类型,用于一对一关系 -->
        <association property="pojo的一个对象属性" javaType="pojo类">
            <id column="关联主键的字段名,自取" property="关联pojo对象的主键属性" jdbcType="字段类型"/>
            <result column="表的字段名,自取" property="关联pojo对象的属性" jdbcType="字段类型"/>
        </association>
        <!-- 一个复杂类型的集合,只能用ofType来定义类型,用于一对多关系 -->
        <collection property="pojo类中的集合属性" ofType="集合中的对象">
            <id column="关联主键的字段名,自取" property="关联pojo对象的主键属性" jdbcType="字段类型"/>
            <result column="表的字段名,自取" property="关联pojo对象的属性" jdbcType="字段类型"/>
        </collection>
    </resultMap>

当我们面临一个pojo类中,有多个同名不同参数的方法时,可以使用到一个叫constructor的属性。

Constructor

官方解释:

  通过修改对象属性的方式,可以满足大多数的数据传输对象(Data Transfer Object, DTO)以及绝大部分领域模型的要求。但有些情况下你想使用不可变类。 一般来说,很少改变或基本不变的包含引用或数据的表,很适合使用不可变类。 构造方法注入允许你在初始化时为类设置属性的值,而不用暴露出公有方法。MyBatis 也支持私有属性和私有 JavaBean 属性来完成注入,但有一些人更青睐于通过构造方法进行注入。 constructor 元素就是为此而生的。

一个ResulMap对应一个constructor,查看源码,发现两个子元素定义

 再深入查看,发现两个的属性一模一样,唯一不同的是,idArg配置,会被标记为唯一标识符。

 

 

为了区别arg元素的顺序,官方给了如下的方法解决:

  当你在处理一个带有多个形参的构造方法时,很容易搞乱 arg 元素的顺序。 从版本 3.4.3 开始,可以在指定参数名称的前提下,以任意顺序编写 arg 元素。 为了通过名称来引用构造方法参数,你可以添加 @Param 注解,或者使用 '-parameters' 编译选项并启用 useActualParamName 选项(默认开启)来编译项目。

ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

原文地址:https://www.cnblogs.com/Charles-H/p/Mybatis-05.html