【Mybatis框架】输出映射-resultType与resultMap

简介:
输出映射
接下来说说有关Mapper.xml配置文件中查询标签中关于返回值类型resultType与resultMap的一些内容

1.resultType
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。
只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。

1.1输出简单类型
1.1.1需求
用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页。

1.1.2mapper.xml
<mapper namespace="cn.edu.hpu.mybatis.mapper.UserMapper">
	
	<!-- 用户信息综合查询 
	#{UserCustom.sex}取出包装对象中性别值
	${UserCustom.username}取得pojo包装对象中用户名称
	-->
	<select id="findUserList" parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo" 
								resultType="cn.edu.hpu.mybatis.PO.UserCustom">
		select * from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'
	</select>
	
	<!-- 用户信息综合查询总数 -->
	<select id="findUserCount" parameterType="cn.edu.hpu.mybatis.PO.UserQueryVo" resultType="int">
		select count(*) from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'
	</select>
	......
</mapper>

1.1.3mapper.java
//用户管理的Dao接口
public interface UserMapper {
	
	//用户信息综合查询
	public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;
	
	//用户信息综合查询总数
	public int findUserCount(UserQueryVo userQueryVo) throws Exception;
	......
}

1.1.4测试代码
//用户信息综合查询总数
	@Test
	public void testFindUserCount() throws Exception{
		
		SqlSession sqlSession=sqlSessionFactory.openSession();
		
		//创建UserMapper代理对象
		UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
		
		//创建包装对象,设置查询条件
		UserQueryVo userQueryVo=new UserQueryVo();
		UserCustom userCustom=new UserCustom();
		userCustom.setSex("男");
		userCustom.setUsername("张三");
		userQueryVo.setUserCustom(userCustom);
		
		//调用userMapper的方法
		int count=userMapper.findUserCount(userQueryVo);
		
		System.out.println("总数为:"+count);
	}

测试结果:
总数为:2

输出日志:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 7832149.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.Connection@778255]
DEBUG [main] - ==>  Preparing: select count(*) from user where user.sex=? and user.username like '%张三%' 
DEBUG [main] - ==> Parameters: 男(String)
DEBUG [main] - <==      Total: 1

1.1.5小结
查询出来的结果集只有一行且一列,可以使用简单类型进行输出映射。(输出简单类型的要求)

1.2输出pojo对象和pojo列表

不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。
在mapper.java指定的方法返回值类型不一样:
(1)输出单个pojo对象,方法返回值是单个对象类型
 
(2)输出pojo对象list,方法返回值是List<Pojo>

生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用 ).

(3)输出hashmap
输出pojo对象可以改用hashmap输出类型,将输出的字段名称作为map的key,value为字段值。如果是集合,那就是list里面套了HashMap。

2.resultMap
mybatis中使用resultMap完成高级输出结果映射。

2.1resultMap使用方法
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

下面来进行实验,实验需求
2.2将下边的sql使用User完成映射
SELECT id id_,username username_ FROM USER WHERE id=#{value}

User类中属性名和上边查询列名不一致。

resultMap使用方法:(一下属性均定义在Mapper.xml映射文件中)
(1)定义resultMap

<!-- 定义resultType
将select id id_,username _username from user和User类中的属性做一个映射关系
	
type:resultMap最终所映射的Java对象类型,可以使用别名
id:对resultMap的唯一标识 
-->
<resultMap type="user" id="userResultMap">
	<!-- id表示查询结果集中唯一标识 
	column:查询出的列名
	property:type所指定的POJO中的属性名
	最终reslutMap对column和property做一个映射关系(对应关系)
	-->
	<id column="_id" property="id"/>
	<!-- 对普通列的映射定义 -->
	<result column="_username" property="username"/>
</resultMap>

(2)使用resultMap作为statement的输出映射类型
<!-- 使用resultMap进行输出映射 
	resultMap:指定定义的resultMap的id,如果这个resultMap在其它的mapper文件,前面需要加namespace
	-->
<select id="findUserByResultMap" parameterType="int" resultMap="userResultMap">
	select id _id,username _username from user where id=#{value}
</select>

(3)mapper接口类中添加相应方法

//用户管理的Dao接口
public interface UserMapper {
	
	public User findUserByResultMap(int id) throws Exception;
	......
}

测试:
@Test
public void testFindUserByResultMap() throws Exception{
		
	SqlSession sqlSession=sqlSessionFactory.openSession();
		
	//创建UserMapper代理对象
	UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
		
	//调用userMapper的方法
	User user=userMapper.findUserByResultMap(1);
		
	System.out.println(user.getUsername());
}

测试结果:
张三

输出日志:

EBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1465214.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.Connection@165b7e]
DEBUG [main] - ==>  Preparing: select id _id,username _username from user where id=? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1


小结
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

转载请注明出处:http://blog.csdn.net/acmman/article/details/46509375

相关文章
|
16天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
33 1
持久层框架MyBatisPlus
|
17天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
30天前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
30 0
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
SQL Java 数据库连接
【Java 第十三篇章】MyBatis 框架介绍
MyBatis 原名 iBATIS,2001 年由 Clinton Begin 创建,以其简易灵活著称。2010 年更名以重塑品牌形象。MyBatis 通过 SQL 映射文件将 SQL 语句与 Java 代码分离,支持编写原生 SQL 并与方法映射。具备对象关系映射功能,简化数据库记录处理。支持动态 SQL 构建,灵活应对不同查询条件。内置缓存机制,提升查询效率。相比全功能 ORM,MyBatis 提供更高 SQL 控制度和更好的维护性,并易于与 Spring 等框架集成,广泛应用于 Java 数据访问层。
40 0
|
3月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
341 0
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。