MyBatis的学习总结四:实现关联表查询【参考】
一、一对一的表关联查询(edi_test_task 和 edi_task_detail) 例子:一条任务明细对一条任务记录
对应的sql的映射xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.cn.mybatis.mapper.taskDetailMapper"> <!--
方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
封装联表查询的数据(去除重复的数据)
-->
<select id="getTaskDetailById" parameterType="String" resultMap="taskDetail">
select * from edi_task_detail where detail_id=#{detailId}
</select>
<resultMap type="EdiTaskDetail" id="taskDetail">
<id property="detail_id" column="detail_id"/>
<association property="editt" javaType="EdiTestTask">
<id property="task_id" column="task_id"/>
</association>
</resultMap> <!--
方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
select * from edi_task_detail where detail_id=‘a8681f896898417caaf934b9707b961e’;
SELECT * FROM edi_test_task where task_id=‘5fd0998a07c84d9d924076f64fb726a7’ //5fd0998a07c84d9d924076f64fb726a7 是明细对应的task_id的值
-->
<select id="getTdById" parameterType="String" resultMap="editD">
select * from edi_task_detail where detail_id=#{detailId}
</select>
<resultMap type="EdiTaskDetail" id="editD">
<id property="detail_id" column="detail_id"/>
<association property="editt" column="task_id" select="getTaskById"></association>
</resultMap> <select id="getTaskById" parameterType="String" resultType="EdiTestTask">
SELECT * FROM edi_test_task where task_id=#{task_id}
</select>
</mapper>
总结——Mybatis一对一表查询:MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:
- property:对象属性的名称
- javaType:对象属性的类型
- column:所对应的外键字段名称
- select:使用另一个查询封装的结果
二、一对多的表查询 (edi_test_task 和 edi_task_detail) 例子:一个任务对应多个任务明细
SQL对应的映射xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.cn.mybatis.mapper.taskMapper"> <!-- 方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集 -->
<select id="getAllTask" parameterType="String" resultType="ettask">
select * from edi_test_task where task_id=#{taskId}
</select>
<resultMap type="EdiTestTask" id="ettask">
<id property="task_id" column="task_id"/>
<collection property="etdlist" column="task_id" javaType="EdiTaskDetail">
<id property="detail_id" column="detail_id"/>
</collection>
</resultMap> <!-- 方式二嵌套查询:通过执行另外一个SQL映射语句来返回与其的复杂类型-->
<select id="getTaskById" parameterType="String" resultMap="task">
SELECT * FROM edi_test_task where task_id=#{taskId}
</select>
<resultMap type="EdiTestTask" id="task">
<id property="task_id" column="task_id"/>
<collection property="etdlist" column="task_id" select="taskDetailById"></collection>
</resultMap> <select id="taskDetailById" parameterType="String" resultType="EdiTaskDetail">
select * from edi_task_detail where task_id=#{taskId}
</select>
</mapper>
总结:MyBatis中使用collection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型。
MyBatis的学习总结四:实现关联表查询【参考】的更多相关文章
- MyBatis学习总结(五)——实现关联表查询(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...
- MyBatis学习总结(五)——实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis学习总结(五)——实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis学习总结_05_实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis学习总结(5)——实现关联表查询
一对一关联 提出需求 根据班级id查询班级信息(带老师的信息) 创建表和数据 创建一张教师表和班级表,假设一个老师负责教一个班,那么老师和班级之间的关系就是一对一的关系. create table t ...
- MyBatis学习笔记(五)——实现关联表查询
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创 ...
- 五:MyBatis学习总结(五)——实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- oracle学习篇四:多表查询
-----------------产生笛卡儿积------------------------------------ select * from emp,dept; --不带条件时,记录数为14*4 ...
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
随机推荐
- 【Android 复习】:从Activity中返回数据
在实际的应用中,我们不仅仅要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递类似,也可以采用上一讲中的四种方式来传递数据,但是一般建议采用Intent对象的方式的来返 ...
- POJ -- 2955
Brackets Description We give the following inductive definition of a “regular brackets” sequence: th ...
- 我记录综合系统学习研究之用户管理五(如何利用wojilu打造一个全新的SNS应用)
wojilu框架特别适合快速开发多用户分享内容应用,比如知乎,digg这类应用. 对于博客等用户程序,要有4个入口:1)用户展示入口(展示自己的应用) 2)用户后台管理入口(管理自己的应用) 3)聚合 ...
- 进军es6(1)---初识es6
es6,全称ECMAScript6(又名es2015).何为ECMAScript?我们常说的Javascript和它又有什么联系呢? 阮一峰老师有一句话描述的比较准确:“ECMAScript是Java ...
- java解惑
java对转义字符没有提供任何特殊处理.编译器在将程序解析成各种符号之前,先将 Unicode 转义字符转换成为它们所表示的字符[JLS 3.2] 阅读笔记
- Mysql导出导入乱码问题解决
MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...
- CAS+SSO原理浅谈
http://www.cnblogs.com/yonsin/archive/2009/08/29/1556423.htmlSSO 是一个非常大的主题,我对这个主题有着深深的感受,自从广州 UserGr ...
- java方法的重载
java方法的重载 public class Person1 { private String name; //姓名 private int age; //年龄 priva ...
- 打造强势智能手表平台:Testin云測携手索尼招募全球开发人员
打造强势智能手表平台:Testin云測携手索尼招募全球开发人员 2014/10/27 · Testin · 业界资讯 日前,全球最大的移动游戏.应用真机和用户云測试平台Testin云測宣布联手索尼公司 ...
- Linux系统调优1
Linux在进行系统调优的时候,首先要考虑整个操作系统的结构,然后针对各个部分进行优化,下面展示一个Linux系统的各个组成部分: 有上图可以看出,我们可以调整的有应用程序,库文件,内核,驱动,还有硬 ...