resultMap的使用总结
Mybatis:resultMap的使用总结
resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中。
resultMap包含的元素:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性--> <resultMap id= "唯一的标识" type= "映射的pojo对象" > <id column= "表的主键字段,或者可以为查询语句中的别名字段" jdbcType= "字段类型" property= "映射pojo对象的主键属性" /> <result column= "表的一个字段(可以为任意表的一个字段)" jdbcType= "字段类型" property= "映射到pojo对象的一个属性(须为type定义的pojo对象中的一个属性)" /> <association property= "pojo的一个对象属性" javaType= "pojo关联的pojo对象" > <id column= "关联pojo对象对应表的主键字段" jdbcType= "字段类型" property= "关联pojo对象的主席属性" /> <result column= "任意表的字段" jdbcType= "字段类型" property= "关联pojo对象的属性" /> </association> <!-- 集合中的property须为oftype定义的pojo对象的属性--> <collection property= "pojo的集合属性" ofType= "集合中的pojo对象" > <id column= "集合中pojo对象对应的表的主键字段" jdbcType= "字段类型" property= "集合中pojo对象的主键属性" /> <result column= "可以为任意表的字段" jdbcType= "字段类型" property= "集合中的pojo对象的属性" /> </collection> </resultMap> 复制代码 |
如果collection标签是使用嵌套查询,格式如下:
1
2
|
<collection column= "传递给嵌套查询语句的字段参数" property= "pojo对象中集合属性" ofType= "集合属性中的pojo对象" select= "嵌套的查询语句" > </collection> |
注意:<collection>标签中的column:要传递给select查询语句的参数,如果传递多个参数,格式为column= ” {参数名1=表字段1,参数名2=表字段2} ;
以下以实例介绍resultMap的用法:
一、简单需求:一个商品的结果映射;
1、创建商品pojo对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
public class TShopSku { /** * 主键ID */ private Long id; /** * 商品名 */ private String skuName; /** * 分类ID */ private Long categoryId; /** * 主键ID * @return ID */ public Long getId() { return id; } /** * 主键ID, * @param id */ public void setId(Long id) { this .id = id; } /** * 商品名 * @return SKU_NAME 商品名 */ public String getSkuName() { return skuName; } /** * 商品名 * @param skuName 商品名 */ public void setSkuName(String skuName) { this .skuName = skuName == null ? null : skuName.trim(); } /** * 分类ID * @return CATEGORY_ID 分类ID */ public Long getCategoryId() { return categoryId; } /** * 分类ID * @param categoryId 分类ID */ public void setCategoryId(Long categoryId) { this .categoryId = categoryId; } 复制代码 |
对应的resultMap:
1
2
3
4
5
|
<resultMap id= "BaseResultMap" type= "com.meikai.shop.entity.TShopSku" > <id column= "ID" jdbcType= "BIGINT" property= "id" /> <result column= "SKU_NAME" jdbcType= "VARCHAR" property= "skuName" /> <result column= "CATEGORY_ID" jdbcType= "BIGINT" property= "categoryId" /> </resultMap> |
二、商品pojo类添加属性集合:
一个商品会有一些属性,现在需要将查询出的商品属性添加到商品对象中,首先需要在原商品pojo类的基础上中添加属性的集合:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
复制代码 /** * 属性集合 */ private List<TShopAttribute> attributes; /** * 获得属性集合 */ public List<TShopAttribute> getAttributes() { return attributes; } /** * 设置属性集合 * @param attributes */ public void setAttributes(List<TShopAttribute> attributes) { this .attributes = attributes; } 复制代码 |
将Collection标签添加到resultMap中,这里有两种方式:
1、嵌套结果:
对应的resultMap:
1
2
3
4
5
6
7
8
9
10
|
<resultMap id= "BasePlusResultMap" type= "com.meikai.shop.entity.TShopSku" > <id column= "ID" jdbcType= "BIGINT" property= "id" /> <result column= "SKU_NAME" jdbcType= "VARCHAR" property= "skuName" /> <result column= "CATEGORY_ID" jdbcType= "BIGINT" property= "categoryId" /> <collection property= "attributes" ofType= "com.meikai.shop.entity.TShopAttribute" > <id column= "AttributeID" jdbcType= "BIGINT" property= "id" /> <result column= "attribute_NAME" jdbcType= "VARCHAR" property= "attributeName" /> </collection> </resultMap> 复制代码 |
查询语句:
1
2
3
4
5
|
<select id= "getById" resultMap= "basePlusResultMap" > select s.ID,s.SKU_NAME,s.CATEGORY_ID,a.ID,a.ATTRIBUTE_NAME from t_shop_sku s,t_shop_attribute a where s.ID =a.SKU_ID and s.ID = #{id,jdbcType =BIGINT}; </select> |
2、关联的嵌套查询(在collection中添加select属性):
商品结果集映射resultMap:
1
2
3
4
5
6
7
|
<resultMap id= "BasePlusResultMap" type= "com.meikai.shop.entity.TShopSku" > <id column= "ID" jdbcType= "BIGINT" property= "id" /> <result column= "SKU_NAME" jdbcType= "VARCHAR" property= "skuName" /> <result column= "CATEGORY_ID" jdbcType= "BIGINT" property= "categoryId" /> <collection column= "{skuId=ID}" property= "attributes" ofType= "com.meikai.shop.entity.TShopAttribute" select= "getAttribute" > </collection> </resultMap> |
collection的select会执行下面的查询属性语句:
1
2
3
4
5
|
<select id= "getAttribute" resultMap= "AttributeResultMap" > select a.ID,s.ATTRIBUTE_NAME from t_shop_attribute a where a.ID = #{skuId,jdbcType =BIGINT}; </select> |
属性结果集映射:
1
2
3
4
|
<resultMap id= "AttributeResultMap" type= "com.meikai.shop.entity.TShopAttribute" > <id column= "ID" jdbcType= "BIGINT" property= "id" /> <result column= "ATTRIBUTE_NAME" jdbcType= "VARCHAR" property= "attributeName" /> </resultMap> |
BasePlusResultMap包含了属性查询语句的Collection
所以通过下面的查询商品语句就可获得商品以及其包含的属性集合:
<select id="getById" resultMap="BasePlusResultMap">
select s.ID,s.SKU_NAME,s.CATEGORY_ID
from t_shop_sku s
where s.ID = #{id,jdbcType =BIGINT};
</select>
原文: https://www.cnblogs.com/xinruyi
resultMap的使用总结的更多相关文章
- MyBatis的resultMap
1.大家学习MyBatis时,可能会碰到实体类属性跟数据库字段不同的情况 如:数据库 ------ 实体类 stuname ----> name 即: 数据库中的stuname字段对 ...
- MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作
一.getMapper()接口 解析:getMapper()接口 IDept.class定义一个接口, 挂载一个没有实现的方法,特殊之处,借楼任何方法,必须和小配置中id属性是一致的 通过代理:生成接 ...
- resultMap 映射
1. sql的重用:定义一个sql片段,可在任何SQL语句中重用该片段. <sql id="personColumns"> name, sex, updateTime& ...
- myBatis的一对多查询,主要利用resultMap实现一次查询多个结果集
日常开发中有这中场景,一个用户有多个角色,一个角色又有多个菜单,想查出一个用户的所有菜单.除了常见的关联查询之外,更使用的应该是利用myBatis的resultMap来实现一次查询出多个结果集,缺点: ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- MyBatis学习(二)、SQL语句映射文件(1)resultMap
二.SQL语句映射文件(1)resultMap SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyB ...
- mybatis - resultMap
resultMap有比较强大的自动映射,下面是摘自mybatis中文官网的的片段: 当自动映射查询结果时,MyBatis会获取sql返回的列名并在java类中查找相同名字的属性(忽略大小写). 这意味 ...
- [刘阳Java]_MyBatis_映射文件的resultMap标签入门_第4讲
<resultMap>:用于解决实体类中属性和表字段名不相同的问题 id:表示当前<resultMap>标签的唯一标识 result:定义表字段和实体类属性的对应关系 prop ...
- mybatis resultMap映射学习笔记
这几天,百度mybatis突然看不到官网了,不知道百度怎么整的.特此贴出mybatis中文官网: http://www.mybatis.org/mybatis-3/zh/index.html 一个学习 ...
- MyBatis中的resultType和resultMap
MyBatis的查询在进行映射的时候,返回值类型可以使用resultType同时也可以使用resultMap.前者表示直接的返回值类型,一般是domain名称,当然这里可以写domain的全部路径也可 ...
随机推荐
- psutil:系统、进程,信息都在我的掌握之中
获取cpu的逻辑数量 import psutil print(psutil.cpu_count()) # 12 获取CPU的物理核心数 import psutil print(psutil.cpu_c ...
- linux下编译安装SDL2和ffmpeg
首先安装sudo apt-get install libsdl2-dev ./configure --prefix=/tools/SDL2 make && make install $ ...
- CVE漏洞分析
分析cve-2018-9489漏洞和download content provider(CVE-2018-9468, CVE-2018-9493, CVE-2018-9546), 每人至少选择一个漏洞 ...
- 第二章 Vue快速入门-- 19 v-if和v-show的使用和特点
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- CentOS 6的系统启动流程
一.POST加电自检 按下电源后ROM芯片中的CMOS程序执行并检测CPU.内存等设备是否存在并正常运行,CMOS中的程序叫BIOS,可以设置硬盘接口,网卡声卡开关之类的简单设置.一般PC机主板上有一 ...
- 也来谈谈SQL SERVER 自定义函数~
在使用SQL SERVER 数据库的时候,函数大家都应该用过,简单的比如 系统聚合函数 Sum(),Max() 等等.但是一些初学者编写自定义函数的时候,经常问起什么是表值函数,什么是标量值函数. 表 ...
- Django-多对多建表与Form表单
一.多对多建表的三种创建方式: 1.全自动型:(一般情况下使用) class Book(models.Model): title = models.CharField(max_length=32) a ...
- linux的逻辑运算符
1:expression :用于计算括号中的组合表达式,如果整个表达式的计算按结果为真,则测试结果也为真. 2:!exp:客队表达式进行逻辑非运算,即对测试结果求反 3:符合 -a 或者 && ...
- vue 安装scss
1.安装插件 npm install node-sass --save-devnpm install sass-loader --save-dev 在App页面测试是否可用,在style 上添加< ...
- Java基础-自增自减运算符练习题
我们用一个简单的例子分析下边的运行结果: package demo; public class ZiZeng { int i = 0; test(i); // i = i++; i = ++i; Sy ...