在一对多的关系中, 主表的数据回对应关联表中的多条数据。 因此, 查询时就会查询出多条结果, 所以, 向类似的情况我们会使用 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。
因为我们内部
