为什么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相关推荐

  1. Mybatis 输出映射

    mybatis的输出映射支持两种形式,一种形式为resultType,一种形式为resultMap. >resultType 之前所做操作返回值类型映射都是使用resultType形式完成的,不 ...

  2. mybatis学习笔记(7)-输出映射

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...

  3. SSM之Mybatis框架初步

    1. SSH:Spring 中间层(容器框架,整合框架) Struct(控制层,Servlet) Hibernate(DAO,持久层框架) Structs2  Hibernate 两个重量级框架,入门 ...

  4. MyBatis Review——输入输出映射

    一,输入映射 mybatis的输入映射通过parameterType指定,可以为简单类型,包装类型,hashmap类型. 1,简单类型 <select id="findUserByNa ...

  5. MyBatis之输入与输出(resultType、resultMap)映射

    2019独角兽企业重金招聘Python工程师标准>>> 在MyBatis中,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方 ...

  6. MyBatis之输入(parameterType)与输出(resultType、resultMap)映射

    MyBatis之输入(parameterType)与输出(resultType.resultMap)映射 2017/9/30 在MyBatis中,我们通过parameterType完成输入映射(指将值 ...

  7. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  8. MyBatis框架学习:<select>节点中的resultType和resultMap属性

    1.为什么要进行resultType或resultMap注解配置 当需要实现的数据访问是查询类型的,在<select>节点中必须配置resultType或resultMap中的某1个属性( ...

  9. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

最新文章

  1. 激光雷达(LiDAR)点云数据知多少?
  2. STM32最小系统电路
  3. ubuntu18安装nginx没有生成各类目录文件问题解决
  4. Oracle Study--Oracle RAC CacheFusion(MindMap)
  5. 【测评】想买投影仪,预算又不多,该怎么选?——三款高性价比投影仪PK测评
  6. C语言代码规范(五)函数参数个数
  7. java通信项目_Java项目中的多线程通信如何利用Socket实现
  8. python笔记小白入门_Python 笔记:全网最详细最小白的Class类和实例详解
  9. AQS-sync同步队列 [自定义同步器框架]
  10. Web页面执行shell命令
  11. 有效值/峰-峰值/幅值/瞬时值
  12. Vue开发环境搭建 VsCode
  13. 360无线网卡驱动服务器,360无线网卡驱动
  14. 中国大陆芯片设计企业名单
  15. vue使用talkIngData统计
  16. Vue传递数组对象报property path is neither an array nor a List nor a Map
  17. 如何利用Python爬虫爬取小说网站并保存到txt文件
  18. Vue安装element ui踩坑
  19. C++设计模式——中介者模式(高屋建瓴)
  20. 让我们一起打起FPGA工程师就业保卫战

热门文章

  1. 当代大学生的变态生活
  2. Biztalk 2006 adapter的开发比2004容易的多
  3. echarts常用方法,legend状态支持两张图片切换(四)
  4. raid0、1、5、10创建
  5. 承德大数据产业发展态势良好
  6. Image Filters for IOS
  7. 驰骋工作流引擎是如何实现自动更新的?
  8. Sql Injection脚本注入终极利用方法
  9. 中国科大潘建伟团队量子网络研究获重要进展
  10. 中国一线城市住宅地价同比增幅连续8个季度收窄