mybatis-高级结果映射之一对多(你知道一对多的结果是如何合并的吗)

 在一对多的关系中, 主表的数据回对应关联表中的多条数据。 因此, 查询时就会查询出多条结果, 所以, 向类似的情况我们会使用 List 来进行存储关联表中获取到的信息。

1 数据准备

创建以下的名为 mybatis 的数据库, 并在其下创建4个表。

数据库结构

在此就不贴出来建表的 SQL 语句了 , 感兴趣的可以去我的 Github:mybatis-mapping 中获取。

1.2 实体类, 接口和XML

使用 mybatis-代码生成器 生成相应的实体类, 接口和XML。

代码结构

以上为生成的项目结构。

2 一对多映射

2.1 collection集合映射

2.1.1 创建结果实体类

我们需要创建一个 BlogPostBO,

public class BlogPostBO extends Blog {      private List<Post> posts;      public List<Post> getPosts() {         return posts;     }      public void setPosts(List<Post> posts) {         this.posts = posts;     } }

该类继承于 Blog 类, 并多了一个链表成员变量 posts, 我们后续获取到的发布的文章都在此链表中。

2.1.2 创建结果集

刚开始时, 是这样子创建的。

<resultMap id="BlogPostBO"  type="com.homejim.mybatis.entity.BlogPostBO" extends="BaseResultMap">     <collection property="posts" columnPrefix="post_" ofType="com.homejim.mybatis.entity.Post">         <id column="id" jdbcType="INTEGER" property="id" />         <result column="blog_id" jdbcType="INTEGER" property="blogId" />         <result column="draft" jdbcType="INTEGER" property="draft" />         <result column="content" jdbcType="LONGVARCHAR" property="content" />     </collection> </resultMap>

此处注意一个问题, 在 collection 中, 我们用的是 ofType 来表示 List 中的 Pojo 的属性。而不是 type

因为我们内部 

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信