Mybatis 结果集映射
结果映射(resultMap)
- constructor - 用于在实例化类时,注入结果到构造方法中(一般不用)
- idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能
- arg - 将被注入到构造方法的一个普通结果
- id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
- result – 注入到字段或 JavaBean 属性的普通结果
- association – 一个复杂类型的关联;许多结果将包装成这种类型
- 嵌套结果映射 – 关联本身可以是一个 resultMap 元素,或者从别处引用一个
- collection – 一个复杂类型的集合
- 嵌套结果映射 – 集合本身可以是一个 resultMap 元素,或者从别处引用一个
- discriminator – 使用结果值来决定使用哪个 resultMap(一般不用)
- case – 基于某些值的结果映射
- 嵌套结果映射 – case 本身可以是一个 resultMap 元素,因此可以具有相同的结构和元素,或者从别处引用一个
- case – 基于某些值的结果映射
id和result的属性 - 映射普通类型
- property - 映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用
- column - 数据库中的列名,或者是列的别名
- javaType - 一个 Java 类的完全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型
association的属性 - 映射对象
- property - 用来匹配的 JavaBean 类型
- javaType - 用来匹配的查询结果对应的java类型
- column - 如果需要嵌套查询,用来传参,一般和select一起用
- select - 嵌套查询时传select的id
collection的属性 - 映射集合
- property - 用来匹配的JavaBean类型
- javaType - 用来匹配查询结果对应的java类型
- ofType - 映射集合的泛型
- select - 嵌套查询时的select ID
- column - 如果需要嵌套查询,用来传参,一般和select一起用
一对多查询示例:
<!--按照查询嵌套处理-->
<select id="getList" resultMap="studentTeacher">
select * from student
</select> <resultMap id="studentTeacher" type="student">
<id property="id" column="id"></id>
<result column="name" property="name"></result>
<association property="teacher" column="tid" javaType="teacher" select="getTeacher"></association>
</resultMap> <select id="getTeacher" resultType="teacher">
select * from teacher where id = #{tid}
</select> <!--按照结果嵌套处理-->
<select id="getList" resultMap="studentTeacher" >
select s.id as sid ,s.name as sname,t.id as tid,t.name as tname from student as s inner join teacher as t
on s.id = t.id
</select> <resultMap id="studentTeacher" type="student">
<id property="id" column="sid"></id>
<result column="sname" property="name"></result>
<association property="teacher" javaType="teacher" >
<result property="id" column="tid"></result>
<result column="tname" property="name"></result>
</association>
</resultMap>
多对多查询示例:
<!--按照结果嵌套处理-->
<select id="getList" resultMap="teacherStudent">
select t.id tid,t.name tname,s.id sid,s.name sname from teacher t,student s where t.id = s.tid
</select>
<resultMap id="teacherStudent" type="teacher">
<id property="id" column="tid"></id>
<result column="tname" property="name"></result> <collection property="students" ofType="student">
<id property="id" column="sid"></id>
<result column="sname" property="name"></result>
</collection>
</resultMap> <!--按照查询嵌套结果-->
<select id="getList" resultMap="teacherStudent">
select * from mybatis.teacher
</select>
<resultMap id="teacherStudent" type="teacher">
<collection property="students" javaType="ArrayList" ofType="student" select="getStudents" column="id" >
</collection>
</resultMap>
<select id="getStudents" resultType="student">
select * from mybatis.student where tid = #{tid}
</select>
Mybatis 结果集映射的更多相关文章
- Mybatis结果集映射问题
之前的数据库图简单都是纯小写格式,这一次做项目为了显得正规一些,模拟实际的情况,采用了驼峰命名的规则,这时候就遇到了结果匹配的问题. 之前只要 <select id="select&q ...
- Mybatis学习笔记8 - resultMap自定义结果集映射规则
一.resultMap自定义结果集映射规则 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public ...
- mybatis中处理结果集映射
单行结果集映射: 接口中方法返回值定义为Map类型,sql语句的resultType属性设置为map即可.这种情况默认把列名作为key,列中的值作为value. 也就是说用map<Strirng ...
- Mybatis——ResultMap(结果集映射)的使用
ResultMap的使用 在Mybatis中,可以使用resultMap(结果集映射)作为sql的返回类型 一般用来解决如下问题: 数据库表字段名和实体类属性名不一致的问题: 多对一问题: 例如:多个 ...
- Mybatis学习笔记-ResultMap结果集映射
解决属性名与字段名不一致的问题 新建项目 --> 测试实体类字段不一致的情况 数据库字段:id,name,pwd 实体类属性:id,name,password 输出结果 User{id=1, n ...
- mybatis百科-结果集映射类ResultMap
目录 1 成员变量 2 构造函数 3 其他函数 3.1 setter 和 getter 函数 4 静态内部类 4.1 成员变量 4.2 构造函数 4.3 建造者相关的函数 4.4 获取配置的构造方法参 ...
- Mybatis 强大的结果集映射器resultMap
1. 前言 resultMap 元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC ...
- mybatis源码追踪2——将结果集映射为map
org.apache.ibatis.binding.MapperMethod中execute方法 ...} else if (method.returnsMap()) { result = execu ...
- mybatis(五):源码分析 - 结果集映射流程
随机推荐
- 【教程】Visual Studio2019安装教程
Visual Studio正式版早就可以使用了,但是好多小伙伴还是不会用,今天小编就给大家带来了最新的安装教程和激活方法. Visual Studio 2019包含社区版(Community).专业版 ...
- 基于Java+HttpClient+TestNG的接口自动化测试框架(八)------ 针对文件的处理
在实际的接口测试中,有时需要根据情况进行文件的上传和下载.在文件数量比较小的时候,我们当然可以直接处理(比如若干个接口都用一个文件).但是,如果我们上传的文件需要使用不同文件夹里不同的文件,而且数量又 ...
- python lambda ,map详解
lambda 匿名函数 # 普通定义函数 def func1(x,y): return x+y # 执行函数 print(func(1,2)) # 如果此函数只调用一次,或者功能简单,此方法就显得笨拙 ...
- 《Java程序设计》第十一周学习总结
20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...
- C++分割string字符串(转)
原文链接:https://blog.csdn.net/jirryzhang/article/details/80473032 或:https://www.cnblogs.com/dingxiaoqia ...
- 【sql】sql必知必会_02
chapter10 - 常用的sql标准有哪些,在SQL92中是如何使用连接的? sql两个主要的标准sql92.sql95: sql92中的五种连接方式: a.笛卡尔积:是一个数学运算,两个集合X和 ...
- UI 自定义布局
今天继续学习UI布局的布局管理器,昨天学习并练习使用了线性布局,相对布局和帧布局,今天学习表格布局,网格布局以及嵌套布局,相对于前三种布局,后三种布局比较复杂一些. 1.表格布局 TableLayou ...
- vue + elementui表单重置 resetFields问题(无法重置表单)
问题: elementui在重置表单时,无法使用this.$refs['formRefVal'].resetFields()清空表单数据; elementui 设置rules后没有效果 解决方法: 1 ...
- 2.7.5 元素定位(主推xpath、cssSelector) ❀❀❀
定位方式选择: 1. 当页面元素有id属性时,最好尽量用id来定位.但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法. 2. xpath很强悍,但定位性能 ...
- deepin linux 安装之后 引导错误 出现 grub>
deepin 安装之后 引导错误 ,,, 忙了一晚上 终于解决了 太辛苦了 不过明白了grub的工作原理也不亏,,,, 就是 整个过程满满的绝望 (哭 环境说明 华硕顽石4 笔记本 硬盘分区表GPT ...