mybatis映射系列教程6:集合映射

328人浏览 / 0人评论

一个博客(Blog)只有一个作者(Author),但一个博客有很多文章(Post)。 在博客类中,这可以用下面的写法来表示:

private List posts;

映射结果集合到一个 List 中,可以使用集合元素。和关联映射一样,我们可以使用嵌套 Select 查询,或基于连接的嵌套结果映射集合。

1、集合的嵌套 Select 查询

首先,让我们看看如何使用嵌套 Select 查询来为博客加载文章。


  



  SELECT * FROM BLOG WHERE ID = #{id}



  SELECT * FROM POST WHERE BLOG_ID = #{id}

此时出现一个新的 "ofType" 属性。这个属性非常重要,它用来将 JavaBean(或字段)属性的类型和集合存储的类型区分开来。所以你可以按照下面这样来阅读映射:

读作: posts 是一个存储 Post 的 ArrayList 集合

在一般情况下,MyBatis 可以推断 javaType 属性,因此并不需要填写。所以很多时候你可以简略成:

2、集合的嵌套结果映射

首先,让我们看看对应的 SQL 语句:


  select
  B.id as blog_id,
  B.title as blog_title,
  B.author_id as blog_author_id,
  P.id as post_id,
  P.subject as post_subject,
  P.body as post_body,
  from Blog B
  left outer join Post P on B.id = P.blog_id
  where B.id = #{id}

我们再次连接了博客表和文章表,并且为每一列都赋予了一个有意义的别名,以便映射保持简单。要映射博客里面的文章集合,就这么简单:


  
  
  
    
    
    
  

如果你喜欢更详略的、可重用的结果映射,你可以使用下面的等价形式:


  
  
  



  
  
  
备注:Mybatis中 collection 和 association 的区别?
public class Blog
{
    private Author author;
    private List posts;
}

当映射author属性时用association标签,这是一对一的关系;当映射posts时用collection标签,这是一对多的关系

全部评论

晴天下起了小雨
2017-10-01 18:00
很喜欢,果断关注了
wjmyly7336064
2017-10-01 18:00
相当实用,赞美了
橘大佬
2017-10-01 18:00
就是有些细节再到位点就好了…