快速学习-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);  	}  }