Mybatis:resultMap的使用总结

From: https://www.cnblogs.com/kenhome/p/7764398.html

Mybatis的介绍以及使用:http://www.mybatis.org/mybatis-3/zh/index.html

 

resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中。

resultMap包含的元素:

复制代码

<!--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标签是使用嵌套查询,格式如下:

 <collection column="传递给嵌套查询语句的字段参数" property="pojo对象中集合属性" ofType="集合属性中的pojo对象" select="嵌套的查询语句" > </collection>

注意:<collection>标签中的column:要传递给select查询语句的参数,如果传递多个参数,格式为column= ” {参数名1=表字段1,参数名2=表字段2} ;

 

以下以实例介绍resultMap的用法:

一、简单需求:一个商品的结果映射;

1、创建商品pojo对象:

复制代码

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:

<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类的基础上中添加属性的集合:

复制代码

    /*** 属性集合*/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:

复制代码

<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>

复制代码

查询语句:

<select id="getById"  resultMap="basePlusResultMap">select s.ID,s.SKU_NAME,s.CATEGORY_ID,a.ID,a.ATTRIBUTE_NAMEfrom 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:

 

复制代码

<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会执行下面的查询属性语句:

<select id="getAttribute"  resultMap="AttributeResultMap">select a.ID,s.ATTRIBUTE_NAMEfrom t_shop_attribute awhere  a.ID = #{skuId,jdbcType =BIGINT};
</select>

 属性结果集映射:

<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_IDfrom t_shop_sku swhere  s.ID = #{id,jdbcType =BIGINT};
</select>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NSOperation, NSOperationQueue 原理探析

通过GNUstep的Foundation来尝试探索下NSOperation&#xff0c;NSOperationQueue 示例程序 写一个简单的程序 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self configurationQueue]; LDNSOperatio…

MyBatis总结六:resultMap详解(包含多表查询)

From: https://www.cnblogs.com/Alex-zqzy/p/9296039.html 简介&#xff1a;   MyBatis的每一个查询映射的返回类型都是ResultMap&#xff0c;只是当我们提供的返回类型属性是resultType的时候&#xff0c;MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性&a…

object c 快速构建对象

__block NSNumber *capacity (0);

mysql语句添加索引

1.PRIMARY KEY&#xff08;主键索引&#xff09; mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column ) 2.UNIQUE(唯一索引) mysql>ALTER TABLE table_name ADD UNIQUE (column ) 3.INDEX(普通索引) mysql>ALTER TABLE table…

基于beego一键创建RESTFul应用

2019独角兽企业重金招聘Python工程师标准>>> API应用开发入门 Go是非常适合用来开发API应用的&#xff0c;而且我认为也是Go相对于其他动态语言的最大优势应用。beego在开发API应用方面提供了非常强大和快速的工具&#xff0c;方便用户快速的建立API应用原型&#…

MyBatis中in的使用

From: https://www.cnblogs.com/w-bb/articles/6378031.html foreach的主要用在构建in条件中&#xff0c;它可以在SQL语句中进行迭代一个集合。 foreach元素的属性主要有 item&#xff0c;index&#xff0c;collection&#xff0c;open&#xff0c;separator&#xff0c;close…

JS 限制input框的输入字数,并提示可输入字数

<!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>限制文件字数字</title> </head> <body> <span class"span">备注信息</br><span id"stay" sty…

采购订单单价金额屏蔽

应用 Oracle Purchasing 层 Level Function 函数名 Funcgtion Name CUXPOXPOVPO 表单名 Form Name POXPOVPO 说明 Description 采购订单单价金额屏蔽 条件 Condition 触发器事件 Tirgger Event WHEN-NEW-FORM-INSTANCE 触发器对象 Tirgger Object / 条件 Cond…

MyBatis总结五:#{}和${}的用法和区别

From: https://www.cnblogs.com/blazeZzz/p/9295634.html #{}的用法&#xff1a; 我们发现&#xff0c;在Mapper.xml映射文件中&#xff0c;经常使用#{属性名} 来作为SQL语句的占位符&#xff0c;来映射Sql需要的实际参数 如果只有一个参数 <select id"getUserById&…

面试题二

1.数据库连接查询。 连接查询用于多表查询 内连接&#xff1a;用inner join 关键字&#xff08;以学生表为例&#xff1a;select stu.stu_name&#xff0c;sc.stu_score from student stu inner join score sc on stu.stu_idsc.stu_id&#xff09; 左外连接:left join on 特征&…

iOS多视图代码操作

2019独角兽企业重金招聘Python工程师标准>>> 摘抄 http://supershll.blog.163.com/blog/static/370704362012112021115/ 2.1.1 层次结构 基于树的层次结构对iPhone屏幕上的可见内容进行排序。从主窗口开始&#xff0c;视图以特殊的分层方式布置。所有视图都可以有…

MongoDB服务重启及后台运行解决方法

1 在MongoDB 安装目录下 新建一个test文件夹 mkdir /test 2 切换到MongoDB的安装目录(可通过 find -name mongod命令查找安装目录)下 执行&#xff1a; bin/mongod --dbpath ./test/ 重启MongoDB服务 3 在MongoDB安装目录下继续执行&#xff1a; bin/mongod -dbpath ./test/ -…

clover 隐藏没用的启动项

From: https://blog.csdn.net/A807296772/article/details/88636458 参考链接: http://bbs.pcbeta.com/viewthread-1610560-1-3.html 总体思路: 引导项全部禁掉,然后添加自定义项. 具体步骤如下: 开机,出现Clover引导选项、选好mac的启动分区后,先按一下F2,再回车,直到进入…

(转)Tiny210v2( S5PV210 ) 平台下 FIMD 对应 的 framebuffer 驱动中,关于 video buffer 的理解...

原文:http://www.arm9home.net/read.php?tid-25938.html 管理提醒&#xff1a; 本帖被 xoom 执行加亮操作(2012-12-13)如之前所说&#xff0c;一直想知道显示数据都在哪个地方&#xff0c;通常的数据&#xff0c;比如 framebuffer 中的显示数据&#xff0c;和OpenGL 处理的数据…

Swift--控制流与oc不同的地方

1.For-in循环中... for index in 1...5 { print("\(index) times 5 is \(index * 5)") } for _ in 1...5 { 可以用下划线忽略当前值 } 2.字典通过元祖返回 3.do while循环变成repeat repeat { statements } while condition 4.switch不需要break let someCharacter: …

MySQL——字符串拆分(含分隔符的字符串截取)

From: https://blog.csdn.net/pjymyself/article/details/81668157 有分隔符的字符串拆分 题目要求 数据库中 num字段值为&#xff1a; 数据库中 num字段值 实现的效果&#xff1a;需要将一行数据变成多行 实现效果 实现的SQL SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(7…

python3 TypeError: 'str' does not support the buffer interface in python

http://stackoverflow.com/questions/38714936/typeerror-str-does-not-support-the-buffer-interface-in-python 下面这样会报错&#xff1a; bb{"m":1} import urllib.parse urllib.parse.unquote(b) 修正方案&#xff1a; bb.decode() urllib.parse.unquote(b) 即…

C链表反转(时间复杂度O(n))

面试的时候经常会出现的问题,现在都做一遍,回忆一下,练练手. 这个题目需要注意两点: 1.head->next 要先设置为NULL ,否则反转后,它还是指向之前的next节点 2.需要有一个tmp指针,临时保存p->next的地址,这个在改变一个节点的next地址时,经常会用到 示意图 代码实现 #inclu…

mysql中find_in_set()函数的使用及in()用法详解

From: http://www.manongjc.com/article/2710.html MySQL手册中find_in_set函数的语法解释&#xff1a; FIND_IN_SET(str,strlist) str 要查询的字符串 strlist 字段名 参数以”,”分隔 如 (1,2,6,8,10,22) 查询字段(strlist)中包含(str)的结果&#xff0c;返回结果为null…

浅谈SQLiteOpenHelper之onUpgrade例子

当你看到这个博文&#xff0c;首先你要了解onCreate这个创建方法&#xff0c;再来继续下文!&#xff08;可以参考我的上一个博文http://www.cnblogs.com/896240130Master/p/6119616.html&#xff09; 这个onUpgrade类要在onCreate类的基础上建立&#xff01;我们知道onUpgrade是…