Mybatis对象关系映射 one2one,one2many,many2many

MyBatis中的高级映射一般要借助select元素中的resultMap属性进行实现,通过此属性配置实现一对一,一对多等关系映射的实现

一对一映射:association
一对多映射:collection
解释:服务层调用一次mapper的接口,完成多个表的数据封装在一个值对象中。这个值对象一般包括直接调用的mapper接口对应的表字段属性,其他表字段的对象,其他表字段的集合等等。

服务层直接调用findOrderById,mybatis帮助我们实现了findOrderShipping和findOrderItems的自动查询封装

    <select id="findOrderById" resultMap="orderRM">
   		select * from `order` where orderid = #{orderid}
   </select>

    <resultMap type="entity.Order" id="orderRM" autoMapping="true">
        <id column="orderid" property="orderid"/>
        <association property="shipping" javaType="entity.Shipping" column="orderid" select="findOrderShipping"/>
        <collection property="orderitems" ofType="entity.Orderitem"
                    column="orderid" select="findOrderItems"></collection>
    </resultMap>


    <select id="findOrderShipping" resultType="entity.Shipping">
   		select * from shipping where orderid = #{orderid}
   </select>

    <select id="findOrderItems" resultType="entity.Orderitem">
   		select * from orderitem where orderid =#{orderid}
   </select>

结果映射(resultMap)
constructor - 用于在实例化类时,注入结果到构造方法中
idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能
arg - 将被注入到构造方法的一个普通结果
id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
result – 注入到字段或 JavaBean 属性的普通结果
association – 一个复杂类型的关联;许多结果将包装成这种类型
嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用
collection – 一个复杂类型的集合
嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用
discriminator – 使用结果值来决定使用哪个 resultMap
case – 基于某些值的结果映射
嵌套结果映射 – case 也是一个结果映射,因此具有相同的结构和元素;或者引用其它的结果映射

ResultMap 的属性列表
属性 描述
id 当前命名空间中的一个唯一标识,用于标识一个结果映射。
type 类的完全限定名, 或者一个类型别名(关于内置的类型别名,可以参考上面的表格)。
autoMapping 如果设置这个属性,MyBatis 将会为本结果映射开启或者关闭自动映射。 这个属性会覆盖全局的属性 autoMappingBehavior。默认值:未设置(unset)。

学习参考:
https://www.cnblogs.com/binaway/p/9171587.html
https://blog.csdn.net/qq_22172133/article/details/81290718
https://www.cnblogs.com/zhaopengcheng/p/7094880.html

原文地址:https://www.cnblogs.com/InternetJava/p/12543184.html