一、resultType 配置结果类型
1.概述
resultType
属性可以指定结果集的类型,它支持基本类型和实体类类型。
需要注意的是,它和
parameterType
一样,如果注册过类型别名的,可以直接使用别名。没有注册过的必须
使用全限定类名。例如:我们的实体类此时必须是全限定类名,
同时,当是实体类名称时,还有一个要求,
实体类中的属性名称必须和查询语句中的列名保持一致
,否则无法
实现封装。
2.基本类型示例、实体类类型示例前面有
3.特殊情况示例(实体类属性和表的列名不一致)
a.修改实体类
private String userName;//列名是username
b.测试查询结果
@Test
public void testFindAll() {
List<User> users = userDao.findAll();
for(User user : users) {
System.out.println(user);
} }
为什么名称会有值呢?
因为:
mysql
在
windows
系统中不区分大小写!
c.修改映射配置
<select id="findAll" resultType="cn.oesoft.mybatis01.domain.User">
select id as userId,username as userName,birthday as userBirthday,
sex as userSex,address as userAddress from user
</select>
思考:
如果我们的查询很多,都使用别名的话写起来岂不是很麻烦,有没有别的解决办法呢?
请看下一小节。
二、resultMap 结果类型
resultMap
标签可以建立查询的列名和实体类的属性名称不一致时建立对应关系。从而实现封装。
在
select
标签中使用
resultMap
属性指定引用即可。同时
resultMap
可以实现将查询结果映射为复杂类
型的
pojo
,比如在查询结果映射对象中包括
pojo
和
list
实现一对一查询和一对多查询。
1.定义 resultMap
<!-- 建立 User 实体和数据库表的对应关系
type 属性:指定实体类的全限定类名
id 属性:给定一个唯一标识,是给查询 select 标签引用用的。
-->
<!--列名和属性名一致时,不需要建立对应关系,为了告知有id标签,才写上-->
<resultMap type="cn.oesoft.mybatis01.domain.User" id="userMap">
<id column="id" property="id"/>
<result column="username" property="userName"/>
</resultMap>
id
标签:用于指定主键字段
result
标签:用于指定非主键字段
column
属性:用于指定数据库列名
property
属性:用于指定实体类属性名称
2.映射配置
<!-- 配置查询所有操作 -->
<select id="findAll" resultMap="userMap">
select *
from user
</select>