mybatis 一對一與一對多collection和association的使用


在mybatis如何進行一對一、一對多的多表查詢呢?這里用一個簡單的例子說明。

一、一對一

1、association

    association通常用來映射一對一的關系,例如,有個類user,對應的實體類如下:(getter,setter方法省略)

    private String id;//主鍵
    private String userName;//用戶姓名

 

有個類Article,對應的實體類如下:

    private String id;//主鍵
    private String articleTitle;//文章標題
    private String articleContent;//文章內容
  

如果我想查詢一個用戶的時候,也查到他寫的一篇文章,可以怎樣寫呢?在類user加入一個屬性article

   private String id;//主鍵
   private String userName;//用戶姓名
private Article article;//新增的文章屬性
 

2、mapper.xml 我在user類的mapper.xml這樣配置

    

復制代碼
<resultMap id="userResultMap" type="test.mybatis.entity.User">
  <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
  <result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
//這里把user的id傳過去 <association property="article" column="id" select="test.mybatis.dao.articleMapper.selectArticleByUserId" />//test.mybatis.dao.articleMapper為命名空間 </resultMap>
復制代碼

同時,我的article對應的xml這樣寫:

復制代碼
1 <resultMap id="articleResultMap" type="test.mybatis.entity.Article">
2   <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
3   <result column="articleTitle" property="articleTitle" jdbcType="VARCHAR" javaType="java.lang.String"/>
4  <result column="articleContent" property="articleContent" jdbcType="VARCHAR" javaType="java.lang.String"/>
5  </resultMap>
(當然,這里還有查詢user表的語句,省略)

 

復制代碼

同時,在article對應的xml有這樣的select語句:

<select id="selectArticleByUserId"
parameterType="java.lang.String"
resultMap="ArticleResultMap" >
select * from
tb_article where userId=#{userId} </select>

二、一對多,collection,理解了一對一,一對多容易理解。

實體類增加對應屬性

  private String id;//主鍵
   private String userName;//用戶姓名
   private List<Article> articleList;

userMapper.xml這樣配置

復制代碼
<resultMap id="userResultMap" type="test.mybatis.entity.User">
  <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
  <result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
//這里把user的id傳過去
   <collection property="articleList" column="id"                       
            select="test.mybatis.dao.articleMapper.selectArticleListByUserId" />
 </resultMap>
以下省略,類同,Mybatis會把結果封裝成List類型。
復制代碼

三、如果我還想通過Article表另一張表,比如文章中有個fk_id,也可以像上面這樣重復配置,把fk_id當做與另一張表關聯的參數,那時就可以通過用戶查到文章,查到文章關聯的另一張表了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM