MyBatis学习之关联(集合)映射:嵌套查询/结果

这篇博客深入探讨了MyBatis中的关联映射(association)和集合映射(collection),包括嵌套查询和嵌套结果的使用。通过示例解释了resultMap元素及属性,展示了如何处理一对一和一对多的关系。总结了association和collection的区别,以及嵌套查询和嵌套结果在性能和延迟加载上的差异。
摘要由CSDN通过智能技术生成

 

Table of Contents

01 结果映射(resultMap):集合(关联)映射

    1.1 代码示例

    1.2 resultMap元素及属性说明

 

02 关联映射(association)

    2.1 关联的嵌套 Select 查询

    2.2 关联的嵌套结果

 

03 集合映射(collection)

    3.1 集合的嵌套 Select 查询

    3.2 集合的嵌套结果映射

 

04 总结

    Mybatis中 collection 和 association 的区别?

    关于嵌套查询、嵌套结果的区别:

   关于关于嵌套查询才有延迟加载(懒加载)


01 结果映射(resultMap):集合(关联)映射

1.1 代码示例

<!-- 结果映射 -->
<resultMap id="detailedBlogResultMap" type="Blog">
  <id property="id" column="blig_id"/>
  <result property="title" column="blog_title"/>
  <!-- 关联映射:用嵌套结果实现 -->
  <association property="author" javaType="Author">
    <id property="id" column="author_id"/>
    <result property="username" column="author_username"/>
  </association>
  <!-- 关联映射:用嵌套查询实现 -->
  <association property="author" javaType="Author" select="" colunm="">
     这里并没有<id /> 和<result /> 标签,嵌套结果才需要
  </association>
  
  <!-- 集合映射:用嵌套结果实现 -->
  <collection property="posts" ofType="Post">
    <id property="id" column="post_id"/>
    <result property="subject" column="post_subject"/>
  </collection>
  <!-- 集合映射:用嵌套查询实现 -->
  <collection property="posts" ofType="Post" select="" colunm="">
    这里并没有<id /> 和<result /> 标签,嵌套结果才需要
  </collection>
  </collection>
</resultMap>

1.2 resultMap元素及属性说明

<resultMap 属性有 id=" 唯一标识"  type="类的完全限定名, 或者一个类型别名"  >

包含标签有:

id 和 result 元素都将一个列的值映射到一个简单数据类型(String, int, double, Date 等)的属性或字段。

<id property="" column=""/>           //主键属性/字段的映射,property是实体类的属性,column是数据库的列名

<result property="" column=""/>     //普通属性/字段的映射,property是实体类的属性,column是数据库的列名

<!-- 关联映射:用嵌套结果实现 -->

<association property=""  javaType="">

    <id property="id" column="author_id"/>

    <result property="username" column="author_username"/>

</association>

<!-- 关联映射:用嵌套查询实现 -->

<association property=""  javaType=""  select=""  colunm=""  fetchType="">

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis 中,一对多关联查询结果映射通常会采用两种方式: 1. 嵌套结果映射:使用嵌套结果映射可以将一对多关联查询的结果集映射成对象的嵌套结构。例如,假设我们有一个 User 对象和一个 Order 对象,一个用户可以拥有多个订单,我们可以通过如下方式进行嵌套结果映射: ``` <resultMap id="userResultMap" type="User"> <id column="id" property="id"/> <result column="name" property="name"/> <collection property="orders" ofType="Order"> <id column="order_id" property="id"/> <result column="order_name" property="name"/> <result column="order_amount" property="amount"/> </collection> </resultMap> ``` 上述代码中,我们定义了一个名为 userResultMap 的 resultMap,包含了 User 对象的 id 和 name,以及一个 Order 对象的集合 orders,其中 Order 对象包含 id、name 和 amount 属性。在 SQL 查询中,我们需要使用 LEFT JOIN 等方式将 User 和 Order 表进行关联查询,并通过 DISTINCT 或 GROUP BY 等方式去重。 2. 延迟加载:使用延迟加载可以避免在一对多关联查询时一次性加载所有的关联对象,从而提高查询性能。MyBatis 提供了两种延迟加载方式,分别是按需加载和分步加载。按需加载是指在需要使用关联对象时再进行加载,而分步加载是指在多次查询中逐步加载关联对象。两种方式都需要在配置文件中进行相应的配置。 总之,MyBatis中一对多关联查询结果映射采用嵌套结果映射或延迟加载的方式,具体采用哪种方式取决于业务需求和性能要求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值