一、resultMap
resultMap 元素是 MyBatis 中最重要最強大的元素. 該配置節點下如下子節點配置
- id – 一個 ID 結果;標記結果作為 ID 可以幫助提高整體效能
- constructor - 類在實例化時,用來注入結果到構造方法中id – 一個 ID 結果;標記結果作為 ID 可以幫助提高整體效能
- idArg - ID 參數;標記結果作為 ID 可以幫助提高整體效能
- arg - 注入到構造方法的一個普通結果
- result – 注入到字段或 JavaBean 屬性的普通結果
- association – 一個復雜的類型關聯;許多結果將包成這種類型
- 嵌入結果映射 – 結果映射自身的關聯,或者參考一個
- collection – 復雜類型的集
- 嵌入結果映射 – 結果映射自身的集,或者參考一個
- discriminator – 使用結果值來決定使用哪個結果映射
- case – 基於某些值的結果映射
- 嵌入結果映射 – 這種情形結果也映射它本身,因此可以包含很多相 同的元素,或者它可以參照一個外部的結果映射。
- case – 基於某些值的結果映射
resultMap配置節點具有如下配置屬性:
id配置節點具有如下配置屬性:
剩余詳細配置屬性可參看文檔:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#
二、通過mapper配置實現一對多關聯查詢
1.首先我們建兩張表,一張user表,一張campany表。(主要看 username 和 campany_name字段)
2.創建實體類表:
user:(字段應該和數據庫字段一一對應,因為要實現一對多的聯合查詢,所以我們在user實體類中多加了Campany實體類,表示一個人呆過的公司記錄,每個字段都要有set和get方法)
campany:
3.創建dao接口類:(此處我們只做查詢,所以只定義一個方法接口)
1 public interface UserDao { 2 public List<UserEntity> getUserInfo(int id); 3 }
4.創建dao接口對應的mapper.xml(namespace="dao.daoInterface.UserDao" 意為該mapper是UserDao的實現類,然后每個select,insert,update,delete標簽節點的id都對應一個dao接口的方法,所以select的id應該和UserDao內要實現的方法一樣)
1 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 2 <mapper namespace="dao.daoInterface.UserDao"> 3 <resultMap id="UserMap" type="domain.UserEntity"> 4 <id property="id" column="uid" /> 5 <result property="username" column="username" /> 6 <result property="password" column="password"/> 7 <result property="address" column="address"/> 8 <result property="createTime" column="createTime"/> 9 <result property="updateTime" column="updateTime"/> 10 <collection property="campanyEntity" resultMap="dao.daoInterface.CampanyDao.CampanyMap" /> 11 </resultMap> 12 13 <!-- 可以將sql語句獨立出來,然后引用 --> 14 <sql id="selectMap"> 15 u.username, u.address ,c.campany_name 16 </sql> 17 18 <!-- 根據id查詢用戶 --> 19 <select id="getUserInfo" parameterType="int" resultMap="UserMap"> 20 SELECT <include refid="selectMap"/> 21 FROM user u left join campany c 22 ON u.username = c.username 23 WHERE id = #{id} 24 ORDER BY id ASC 25 </select> 26 27 28 </mapper>
CampanyMapper.xml (這里面直接定義了一個map,該map可以被其他mapper文件引用,如上配置:<collection property="campanyEntity" resultMap="dao.daoInterface.CampanyDao.CampanyMap" />就引用了這個mapper的resultMap,引用規則位,該mapper的實現的接口包名dao.daoInterface.CampanyDao + resultMap的id名稱)
1 <mapper namespace="dao.daoInterface.CampanyDao"> 2 <resultMap id="CampanyMap" type="domain.CampanyEntity"> 3 <id property="pid" column="pid"/> 4 <result property="username" column="username"/> 5 <result property="campanyName" column="campany_name"/> 6 <result property="money" column="money"/> 7 </resultMap> 8 9 </mapper>
6.測試方法:
1 List<UserEntity> uList = userService.getUserInfo(1); 2 if(uList.size() > 0){ 3 for(int i=0;i<uList.size();i++){ 4 System.out.println(uList.get(i).getUsername()+"\t"+uList.get(i).getCampanyEntity().getCampanyName()); 5 } 6 }
7.運行結果
這樣,就實現了mapper配置實現一對多關聯查詢