快速學習-Mybatis 的輸出結果封裝

第4章 Mybatis 的輸出結果封裝

4.1 resultType 配置結果類型

resultType 屬性可以指定結果集的類型,它支援基本類型和實體類類型。我們在前面的 CRUD 案例中已經對此屬性進行過應用了。

需要注意的是,它和 parameterType 一樣,如果註冊過類型別名的,可以直接使用別名。沒有註冊過的必須使用全限定類名。例如:我們的實體類此時必須是全限定類名(今天最後一個章節會講解如何配置實體類的別名)

同時,當是實體類名稱是,還有一個要求,實體類中的屬性名稱必須和查詢語句中的列名保持一致,否則無法 實現封裝。

4.1.1 基本類型示例

4.1.1.1 Dao 介面

/**  * 查詢總記錄條數  * @return  */  int findTotal();

4.1.1.2 映射配置

<!-- 查詢總記錄條數 -->  <select id="findTotal" resultType="int">  	select count(*) from user;  </select>

4.1.2 實體類類型示例

4.1.2.1 Dao 介面

/**  * 查詢所有用戶  * @return  */  List<User> findAll();

4.1.2.2 映射配置

<!-- 配置查詢所有操作 -->  <select id="findAll" resultType="com.itheima.domain.User">  	select * from user  </select>

4.1.3 特殊情況示例

4.1.3.1 修改實體類

public class User implements Serializable {        private Integer id;      private String username;      private String address;      private String sex;      private Date birthday;        public Integer getId() {          return id;      }        public void setId(Integer id) {          this.id = id;      }        public String getUsername() {          return username;      }        public void setUsername(String username) {          this.username = username;      }        public String getAddress() {          return address;      }        public void setAddress(String address) {          this.address = address;      }        public String getSex() {          return sex;      }        public void setSex(String sex) {          this.sex = sex;      }        public Date getBirthday() {          return birthday;      }        public void setBirthday(Date birthday) {          this.birthday = birthday;      }        @Override      public String toString() {          return "User{" +                  "id=" + id +                  ", username='" + username + ''' +                  ", address='" + address + ''' +                  ", sex='" + sex + ''' +                  ", birthday=" + birthday +                  '}';      }  }

4.1.3.2 Dao 介面

/**  * 查詢所有用戶  * @return  */  List<User> findAll();

4.1.3.3 映射配置

<!-- 配置查詢所有操作 -->  <select id="findAll" resultType="com.itheima.domain.User">  	select * from user  </select>

4.1.3.4 測試查詢結果

@Test public void testFindAll() {  	List < User > users = userDao.findAll();  	for (User user: users) {  		System.out.println(user);  	}  }

4.1.3.5 修改映射配置

4.2 resultMap 結果類型

resultMap 標籤可以建立查詢的列名和實體類的屬性名稱不一致時建立對應關係。從而實現封裝。

在 select 標籤中使用 resultMap 屬性指定引用即可。同時 resultMap 可以實現將查詢結果映射為複雜類型的 pojo,比如在查詢結果映射對象中包括 pojo 和 list 實現一對一查詢和一對多查詢。

4.2.1 定義resultMap

<!-- 建立 User 實體和資料庫表的對應關係  ```type 屬性:指定實體類的全限定類名  id 屬性:給定一個唯一標識,是給查詢 select 標籤引用用的。  -->  <resultMap type="com.itheima.domain.User" id="userMap">      <id column="id" property="userId"/>      <result column="username" property="userName"/>      <result column="sex" property="userSex"/>      <result column="address" property="userAddress"/>      <result column="birthday" property="userBirthday"/>  </resultMap>  id 標籤:用於指定主鍵欄位  result 標籤:用於指定非主鍵欄位  column 屬性:用於指定資料庫列名  property 屬性:用於指定實體類屬性名稱

4.2.2 映射配置

<!-- 配置查詢所有操作 -->  <select id="findAll" resultMap="userMap">  	select * from user  </select>

4.2.3 測試結果

@Test public void testFindAll() {  	List < User > users = userDao.findAll();  	for (User user: users) {  		System.out.println(user);  	}  }