在mybatis如何進行一對1、一對多的多表查詢呢?這裏用一個簡單的例子說明。java
1、一對一mybatis
一、associationapp
association一般用來映射一對一的關係,例如,有個類user,對應的實體類以下:(getter,setter方法省略)spa
private String id;//主鍵 private String userName;//用戶姓名
有個類Article,對應的實體類以下:code
private String id;//主鍵 private String articleTitle;//文章標題 private String articleContent;//文章內容
若是我想查詢一個用戶的時候,也查到他寫的一篇文章,能夠怎樣寫呢?在類user加入一個屬性articlexml
private String id;//主鍵 private String userName;//用戶姓名
private Article article;//新增的文章屬性
二、mapper.xml 我在user類的mapper.xml這樣配置blog
<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這樣寫:ci
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語句:get
<select id="selectArticleByUserId" parameterType="java.lang.String" resultMap="ArticleResultMap" > select * from tb_article where userId=#{userId} </select>
2、一對多,collection,理解了一對一,一對多容易理解。it
實體類增長對應屬性
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類型。
3、若是我還想經過Article表另外一張表,好比文章中有個fk_id,也能夠像上面這樣重複配置,把fk_id當作與另外一張表關聯的參數,那時就能夠經過用戶查到文章,查到文章關聯的另外一張表了。