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的全部路径也可 ...
随机推荐
- composer问题集锦
问题一:composer遇到Your configuration does not allow connection to 解决方案: 设置一个本地或全局的composer配置: composer c ...
- 求二叉搜索树的第k小的节点
题目描述: /** * 给定一棵二叉搜索树,请找出其中的第k小的结点. * 例如, (5,3,7,2,4,6,8)中, * 按结点数值大小顺序第三小结点的值为4. * 这是层序遍历: * 5 * 3 ...
- 【HEOI2015】小Z的房间
题意 https://www.luogu.org/problemnew/show/P4111 题解 前置知识:矩阵树定理 不要问证明,我不会,用就完事了(反正一般也不会用到) 因为矩阵树定理就是求一张 ...
- poi导出excel数据量过大
问题:使用poi导出excel,数据量过大导致内存溢出 解决思路:1.多sheet导出 2.生成多个excel打包下载 3.生成csv下载 本文使用的是第二个思路,代码如下: poiUtil工具类 p ...
- Apk反编译那些事
参考博客: https://blog.csdn.net/cbd_2012/article/details/91410119 https://mp.weixin.qq.com/s?__biz=MzI0N ...
- LVS+Heartbeat安装部署文档
LVS+Heartbeat安装部署文档 发表回复 所需软件: ipvsadm-1.24-10.x86_64.rpmheartbeat-2.1.3-3.el5.centos.x86_64.rpmhear ...
- linux运维、架构之路-K8s通过Service访问Pod
一.通过Service访问Pod 每个Pod都有自己的IP地址,当Controller用新的Pod替换发生故障的Pod时,新Pod会分配到新的IP地址,例如:有一组Pod对外提供HTTP服务,它们的I ...
- Ant下载与配置
ant官网链接: https://ant.apache.org/ 我这里下载的版本是1.10.7 解压下载后的.zip文件到指定的目录 配置环境变量 ANT_HOME:ant的存放目录 PATH:an ...
- LOJ #6145. 「2017 山东三轮集训 Day7」Easy 点分树+线段树
这个就比较简单了~ Code: #include <cstdio> #include <algorithm> #define N 100004 #define inf 1000 ...
- Python3.X Selenium 自动化测试中如何截图并保存成功
在selenium for python中主要有三个截图方法,我们挑选其中最常用的一种. 挑最常用的:get_screenshot_as_file() 相关代码如下:(下面的代码可直接复制) # co ...