ResultMap的使用
前言
MyBatis是基于“数据库结构不可控”的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBatis为我们提供这种理想与现实间转换的手段了,而resultMap就是结果集映射的配置标签了。
在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程。
从SQL查询结果到领域模型实体
- 通过JDBC查询得到ResultSet对象
- 遍历ResultSet对象并将每行数据暂存到HashMap实例中,以结果集的字段名或字段别名为键,以字段值为值
- 根据ResultMap标签的type属性通过反射实例化领域模型
- 根据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的使用相关推荐
- mybatis ResultMap
ResultMap 解决属性名和字段的名称不一致的问题. 查询为null的问题 创建java实体类: public class User {private int id; //idprivate St ...
- mybatis 使用resultMap实现数据库的操作
resultType:直接表示返回类型 resultMap:对外部resultMap的引用 二者不能同时使用 创建一个实体类Role和User public class Role {private I ...
- MyBatis源码:原来 resultMap 解析完是这样
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:阿进的写字台 www.cnblogs.com/homejim ...
- Mybatis:resultMap的万字使用总结
结果映射(resultMap) resultMap 元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你 ...
- mybatis中的resultMap与resultType、parameterMap与 parameterType的区别
Map:映射:Type:Java类型 resultMap 与 resultType.parameterMap 与 parameterType的区别在面试的时候被问到的几率非常高,项目中出现了一个小b ...
- resultType 与resultMap 的区别
2019独角兽企业重金招聘Python工程师标准>>> resultType: 使用resultType进行输出映射,只有查出来的列名与pojo中的属性名一致,才能映射成功 resu ...
- 【Mybatis框架】输出映射-resultType与resultMap
为什么80%的码农都做不了架构师?>>> 输出映射 接下来说说有关Mapper.xml配置文件中查询标签中关于返回值类型resultType与resultMap的一些内容 1. ...
- MyBatis之ResultMap标签
ResultMap标签基本作用:建立SQL查询结果字段与实体属性的映射关系信息 在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程. 1. 通过JDB ...
- resultmap为list_MyBatis源码:原来 resultMap 解析完是这样
(给ImportNew加星标,提高Java技能) 作者:阿进的写字台 www.cnblogs.com/homejim/p/9853703.html 目录 1 两个基础类 1.1 列映射类ResultM ...
- 04. Mybatis的resultMap基本应用
resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果集中取出数据的 JDBC 代码的那个东西,而且在一些情形下允许你做一些 JDBC 不支持的事情.事实 ...
最新文章
- 贝塞尔结合CAShapeLayer绘制路线,CABasicAnimation实现的小动画
- 戴尔怎样把计算机放在桌面,戴尔台式机桌面图标不见了怎么办
- KMP经典算法与变形的应用(字符串parttern匹配问题)
- 160个Crackme016
- 【企业管理】2020年3-4 月 每日花语
- datagridview 设置选中行_Excel实用两大技巧,删除重复行,神奇选择性粘贴
- iOS Base64转码(使用ios7系统自带编码库 和 GMTBase64 两种方式)
- java 学生信息的增删改查_学生信息的增删改查(java)
- iOS显示性能优化过程讲解
- Maven笔记——依赖管理
- Flink Kafka consumer的消费策略配置
- 【免费下载】2021年7月热门报告盘点(附热门报告列表及下载链接)
- 3万字“十看支付”:开启支付之门
- 微信小程序开发教程+工具插件
- 三极管当做开关的导通方式
- 卡内基梅隆大学计算机世界排名,卡内基梅隆大学世界排名多少?
- (附源码)Node.js图书管理小程序 毕业设计 250858
- MAC 扩展屏,颜色描述文件
- linux之getcwd函数解析,如何在Linux 中使用getcwd()函数
- WIN10系统盘安装提示MBR分区问题解决步骤
热门文章
- 祝大家新年快乐,虎年大吉
- 21个终身受用的顶级思维(深度好文)
- HTML5期末大作业:游戏官网网站设计——神之刃游戏官网网页(6页) HTML+CSS+JavaScript web网页设计与开发
- 黑马程序员之ASP.NET学习笔记:Http状态代码及其含义
- 微信小程序获取微信用户绑定的手机号
- python将数字转字符串_python中如何将数字转字符串
- 查看oracle数据库允许的最大连接数和当前连接数
- java 本地方法栈_JVM学习笔记-本地方法栈(Native Method Stacks)
- JMX详解以及使用示例
- 卸载重装onedrive提示“已经安装了onedrive”