【Mybatis框架】输出映射-resultType与resultMap
为什么80%的码农都做不了架构师?>>>
输出映射
接下来说说有关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测试代码
//用户信息综合查询总数@Testpublic 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
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());
}
小结
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。
转载于:https://my.oschina.net/hxsg/blog/507997
【Mybatis框架】输出映射-resultType与resultMap相关推荐
- Mybatis 输出映射
mybatis的输出映射支持两种形式,一种形式为resultType,一种形式为resultMap. >resultType 之前所做操作返回值类型映射都是使用resultType形式完成的,不 ...
- mybatis学习笔记(7)-输出映射
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...
- SSM之Mybatis框架初步
1. SSH:Spring 中间层(容器框架,整合框架) Struct(控制层,Servlet) Hibernate(DAO,持久层框架) Structs2 Hibernate 两个重量级框架,入门 ...
- MyBatis Review——输入输出映射
一,输入映射 mybatis的输入映射通过parameterType指定,可以为简单类型,包装类型,hashmap类型. 1,简单类型 <select id="findUserByNa ...
- MyBatis之输入与输出(resultType、resultMap)映射
2019独角兽企业重金招聘Python工程师标准>>> 在MyBatis中,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方 ...
- MyBatis之输入(parameterType)与输出(resultType、resultMap)映射
MyBatis之输入(parameterType)与输出(resultType.resultMap)映射 2017/9/30 在MyBatis中,我们通过parameterType完成输入映射(指将值 ...
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...
- MyBatis框架学习:<select>节点中的resultType和resultMap属性
1.为什么要进行resultType或resultMap注解配置 当需要实现的数据访问是查询类型的,在<select>节点中必须配置resultType或resultMap中的某1个属性( ...
- (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...
最新文章
- 激光雷达(LiDAR)点云数据知多少?
- STM32最小系统电路
- ubuntu18安装nginx没有生成各类目录文件问题解决
- Oracle Study--Oracle RAC CacheFusion(MindMap)
- 【测评】想买投影仪,预算又不多,该怎么选?——三款高性价比投影仪PK测评
- C语言代码规范(五)函数参数个数
- java通信项目_Java项目中的多线程通信如何利用Socket实现
- python笔记小白入门_Python 笔记:全网最详细最小白的Class类和实例详解
- AQS-sync同步队列 [自定义同步器框架]
- Web页面执行shell命令
- 有效值/峰-峰值/幅值/瞬时值
- Vue开发环境搭建 VsCode
- 360无线网卡驱动服务器,360无线网卡驱动
- 中国大陆芯片设计企业名单
- vue使用talkIngData统计
- Vue传递数组对象报property path is neither an array nor a List nor a Map
- 如何利用Python爬虫爬取小说网站并保存到txt文件
- Vue安装element ui踩坑
- C++设计模式——中介者模式(高屋建瓴)
- 让我们一起打起FPGA工程师就业保卫战