一、一对一的表关联查询(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的学习总结四:实现关联表查询【参考】的更多相关文章

  1. MyBatis学习总结(五)——实现关联表查询(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...

  2. MyBatis学习总结(五)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  3. MyBatis学习总结(五)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  4. MyBatis学习总结_05_实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  5. MyBatis学习总结(5)——实现关联表查询

    一对一关联 提出需求 根据班级id查询班级信息(带老师的信息) 创建表和数据 创建一张教师表和班级表,假设一个老师负责教一个班,那么老师和班级之间的关系就是一对一的关系. create table t ...

  6. MyBatis学习笔记(五)——实现关联表查询

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创 ...

  7. 五:MyBatis学习总结(五)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  8. oracle学习篇四:多表查询

    -----------------产生笛卡儿积------------------------------------ select * from emp,dept; --不带条件时,记录数为14*4 ...

  9. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解   建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...

  10. Mybatis源码分析--关联表查询及延迟加载原理(二)

    在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...

随机推荐

  1. jquery方法详解--bind(type, [data], fn)

    转自:http://www.zhufengpeixun.cn/jquery/bind_type_data_fn.html bind(type, [data], fn)  返回值::jQuery 概述 ...

  2. (转载)LINUX UNBUNTU10.04 下 搭建OC编译环境

    (转载)http://blog.sina.com.cn/s/blog_833996210100rgl4.html 1安装 / install GNUstep on ubuntu 下面列出来的包是安装G ...

  3. No setter found for property 'userDAO' in class 'com.ssh.service.impl.User1Service'

    造成此问题的原因是: 在applicationContext.xml中引用 <bean id="userService" class="com.ssh.servic ...

  4. Selenium - WebDriver 小结(1)

    public class Base { SimpleDateFormat formatterTime = new SimpleDateFormat("yyyyMMdd_hhmmssa&quo ...

  5. Unity3d shader之SWAP Force Depth-of-Field Shader

    由于博主常年逃课,所以期末考试期间只能突击,但偶尔还能拿个奖学金啥的,哈哈,所以近一个月没有做游戏,也没有发博客= =... 这个景深的方法很简单 我们需要求的是CoC(circle of confu ...

  6. Bzoj 1687: [Usaco2005 Open]Navigating the City 城市交通 广搜,深搜

    1687: [Usaco2005 Open]Navigating the City 城市交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 122  So ...

  7. HashMap原理

    1. HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 2. ...

  8. 17 Great Machine Learning Libraries

    17 Great Machine Learning Libraries 08 October 2013 After wonderful feedback on my previous post on ...

  9. art template前端模板引擎

    偶然看到后台有一段代码 采用的是art template的模板引擎 地址为 http://aui.github.io/artTemplate/ 这段代码很简洁 var html = template( ...

  10. HttpClient4.5.2 连接池原理及注意事项

    随着微服务的流行,服务之间的http调用越来越多,遇到的问题也比较多,写这边文章的目的也是将自己遇到的坑和解决方案跟大家分享 一.为什么要用Http连接池 1.降低延迟:如果不采用连接池,每次连接发起 ...