前言

MyBatis是基于“数据库结构不可控”的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBatis为我们提供这种理想与现实间转换的手段了,而resultMap就是结果集映射的配置标签了。 
在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程。

从SQL查询结果到领域模型实体 

  1. 通过JDBC查询得到ResultSet对象
  2. 遍历ResultSet对象并将每行数据暂存到HashMap实例中,以结果集的字段名或字段别名为键,以字段值为值
  3. 根据ResultMap标签的type属性通过反射实例化领域模型
  4. 根据ResultMap标签的type属性和id、result等标签信息将HashMap中的键值对,填充到领域模型实例中并返回

1、属性说明

  • id属性 ,resultMap标签的标识。
  • type属性 ,返回值的全限定类名,或类型别名。
  • autoMapping属性 ,值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在resultMap内明确注明映射关系才会调用对应的setter方法。

2、基本作用:建立SQL查询结果字段与实体属性的映射关系 
示例1:通过setter构造领域模型

public class EStudent{private long id;private String name;private int age;// getter,setter方法/*** 必须提供一个无参数的构造函数*/public EStudent(){}
}

<resultMap/>的配置

id、result语句属性配置细节:

属性 描述
property 需要映射到JavaBean 的属性名称。
column 数据表的列名或者标签别名。
javaType 一个完整的类名,或者是一个类型别名。如果你匹配的是一个JavaBean,那MyBatis 通常会自行检测到。然后,如果你是要映射到一个HashMap,那你需要指定javaType 要达到的目的。
jdbcType 数据表支持的类型列表。这个属性只在insert,update 或delete 的时候针对允许空的列有用。JDBC 需要这项,但MyBatis 不需要。如果你是直接针对JDBC 编码,且有允许空的列,而你要指定这项。
typeHandler 使用这个属性可以覆写类型处理器。这项值可以是一个完整的类名,也可以是一个类型别名。
子元素说明:id元素 ,用于设置主键字段与领域模型属性的映射关系
result元素 ,用于设置普通字段与领域模型属性的映射关系<resultMap id="getStudentRM" type="EStudnet"><id property="id" column="ID"/><result property="studentName" column="Name"/>  <result property="studentAge" column="Age"/>
</resultMap>// columne 要与下面select中的字段一致
// property 中的值就是我们要起的别名<select id="getStudent" resultMap="getStudentRM">SELECT ID, Name, AgeFROM TStudent
</select>

示例2:通过构造函数构造领域模型

<select id="getStudent" resultMap="getStudentRM">SELECT ID, Name, AgeFROM TStudent
</select>
<resultMap id="getStudentRM" type="EStudnet"><constructor><idArg column="ID" javaType="_long"/><arg column="Name" javaType="String"/><arg column="Age" javaType="_int"/></constructor>
</resultMap>

子元素说明:

  • constructor元素 ,指定使用指定参数列表的构造函数来实例化领域模型。注意:其子元素顺序必须与参数列表顺序对应
  • idArg子元素 ,标记该入参为主键
  • arg子元素 ,标记该入参为普通字段(主键使用该子元素设置也是可以的)

ResultMap的使用相关推荐

  1. mybatis ResultMap

    ResultMap 解决属性名和字段的名称不一致的问题. 查询为null的问题 创建java实体类: public class User {private int id; //idprivate St ...

  2. mybatis 使用resultMap实现数据库的操作

    resultType:直接表示返回类型 resultMap:对外部resultMap的引用 二者不能同时使用 创建一个实体类Role和User public class Role {private I ...

  3. MyBatis源码:原来 resultMap 解析完是这样

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:阿进的写字台 www.cnblogs.com/homejim ...

  4. Mybatis:resultMap的万字使用总结

    结果映射(resultMap) resultMap 元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你 ...

  5. mybatis中的resultMap与resultType、parameterMap与 parameterType的区别

    Map:映射:Type:Java类型 resultMap 与 resultType.parameterMap 与  parameterType的区别在面试的时候被问到的几率非常高,项目中出现了一个小b ...

  6. resultType 与resultMap 的区别

    2019独角兽企业重金招聘Python工程师标准>>> resultType: 使用resultType进行输出映射,只有查出来的列名与pojo中的属性名一致,才能映射成功 resu ...

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

    为什么80%的码农都做不了架构师?>>>    输出映射 接下来说说有关Mapper.xml配置文件中查询标签中关于返回值类型resultType与resultMap的一些内容 1. ...

  8. MyBatis之ResultMap标签

    ResultMap标签基本作用:建立SQL查询结果字段与实体属性的映射关系信息 在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程. 1. 通过JDB ...

  9. resultmap为list_MyBatis源码:原来 resultMap 解析完是这样

    (给ImportNew加星标,提高Java技能) 作者:阿进的写字台 www.cnblogs.com/homejim/p/9853703.html 目录 1 两个基础类 1.1 列映射类ResultM ...

  10. 04. Mybatis的resultMap基本应用

    resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果集中取出数据的 JDBC 代码的那个东西,而且在一些情形下允许你做一些 JDBC 不支持的事情.事实 ...

最新文章

  1. 贝塞尔结合CAShapeLayer绘制路线,CABasicAnimation实现的小动画
  2. 戴尔怎样把计算机放在桌面,戴尔台式机桌面图标不见了怎么办
  3. KMP经典算法与变形的应用(字符串parttern匹配问题)
  4. 160个Crackme016
  5. 【企业管理】2020年3-4 月 每日花语
  6. datagridview 设置选中行_Excel实用两大技巧,删除重复行,神奇选择性粘贴
  7. iOS Base64转码(使用ios7系统自带编码库 和 GMTBase64 两种方式)
  8. java 学生信息的增删改查_学生信息的增删改查(java)
  9. iOS显示性能优化过程讲解
  10. Maven笔记——依赖管理
  11. Flink Kafka consumer的消费策略配置
  12. 【免费下载】2021年7月热门报告盘点(附热门报告列表及下载链接)
  13. 3万字“十看支付”:开启支付之门
  14. 微信小程序开发教程+工具插件
  15. 三极管当做开关的导通方式
  16. 卡内基梅隆大学计算机世界排名,卡内基梅隆大学世界排名多少?
  17. (附源码)Node.js图书管理小程序 毕业设计 250858
  18. MAC 扩展屏,颜色描述文件
  19. linux之getcwd函数解析,如何在Linux 中使用getcwd()函数
  20. WIN10系统盘安装提示MBR分区问题解决步骤

热门文章

  1. 祝大家新年快乐,虎年大吉
  2. 21个终身受用的顶级思维(深度好文)
  3. HTML5期末大作业:游戏官网网站设计——神之刃游戏官网网页(6页) HTML+CSS+JavaScript web网页设计与开发
  4. 黑马程序员之ASP.NET学习笔记:Http状态代码及其含义
  5. 微信小程序获取微信用户绑定的手机号
  6. python将数字转字符串_python中如何将数字转字符串
  7. 查看oracle数据库允许的最大连接数和当前连接数
  8. java 本地方法栈_JVM学习笔记-本地方法栈(Native Method Stacks)
  9. JMX详解以及使用示例
  10. 卸载重装onedrive提示“已经安装了onedrive”