讲了manyToOne和oneToMany,下面来看看get方法。在之前已经说过,如果是映射单对象,直接使用association来映射。而如果关系 是一个集合,则需要使用collection来描述。和association一样,mybatis不会去管关系是many2many还是 one2many。同理要完成collection映射,也应该有两种方式,1,发送另一条sql;2,内联映射。

第一种配置方式

首先在departmentMapper.xml中添加:

<select id="get" resultMap="departmentmapper" parameterType="long">
SELECT * FROM department WHERE id = #{id}
</select>

这只是查询出一条Department,接下来配置resultMap:

<resultMap type="Department" id="departmentmapper">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="emps" column="id" ofType="Employee" select="cd.itcast.mybatis.mapper.EmployeeMapper.gets" />
</resultMap>

这里配置了collection,在collection中:

1,property:代表集合对应的属性名称为emps;
2,column:代表one方的id(配合下面的select就清楚了)
3,ofType:注意,这里的ofType代表的是集合里面的对象类型
4,select:非常重要的一条,我们先看看这条select对应的映射:

<select id="gets" resultType="Employee" parameterType="long">
SELECT * FROM EMPLOYEE WHERE DEPT_ID = #{id}
</select>

可以看到,这段sql根据外键从employee表中查询所有的匹配给定的department的employee对象。

结合select和column,再联想之前的association中的select方式,我们可以明白,mybatis的存放策略为:首先执行查询得到department结果集,从结果集中得到相关的列,拼装id和name属性。当mybatis运行到emps属性时,会从结果集中把id得到,并作为参数传入cd.itcast.mybatis.mapper.EmployeeMapper.gets,并查询到该department对应的 employees,最后把employees设置到Department的emps属性中。
注意这种方式也遵循延迟加载策略,并且容易产生N+1问题。

第二种配置方式

<select id="get" resultMap="departmentmapper" parameterType="long">
SELECT d.*,e.id as eid,e.name as ename FROM
DEPARTMENT d LEFT JOIN EMPLOYEE e ON e.DEPT_ID = d.id WHERE d.id = #{id}
</select>
    <resultMap type="Department" id="departmentmapper">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="emps" ofType="Employee">
<id property="id" column="eid"/>
<result property="name" column="ename"/>
</collection>
</resultMap>

结合前面的解释,应该很好理解了。

collection映射的更多相关文章

  1. mybatis入门基础(六)----高级映射(一对一,一对多,多对多)

    一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id INT NOT NULL AUTO_INCREMENT, itemsname ) NOT ...

  2. MyBatis学习--高级映射

    简介 前面说过了简单的数据库查询和管理查询,在开发需求中有一些一对一.一对多和多对多的需求开发,如在开发购物车的时候,订单和用户是一对一,用户和订单是一对多,用户和商品是多对多.这些在Hibernat ...

  3. 六 mybatis高级映射(一对一,一对多,多对多)

    1  订单商品数据模型 以订单商品数据为模型,来对mybaits高级关系映射进行学习.

  4. Mybatis学习(5)高级映射

    需求: 一.一对一查询 查询订单信息,关联查询创建订单的用户信息: orders--->user:一个订单只由一个用户创建,一对一 orders表 和 user表: 1)使用resultType ...

  5. 【mybatis深度历险系列】mybatis中的高级映射一对一、一对多、多对多

    学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要 ...

  6. Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)

    一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT ...

  7. MyBatis高级映射查询(3)

    一.数据库数据和项目搭建过程 1.主要要四张表,分别为user用户信息表.items商品表.orderdetail订单明细表.orders订单表.表的结构和数据如下: 表结构 CREATE DATAB ...

  8. mybatis入门基础----高级映射(一对一,一对多,多对多)

    阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id ...

  9. MyBatis—mapper.xml映射配置

    SQL文件映射(mapper文件),几个顶级元素的配置: mapper元素:根节点只有一个属性namespace(命名空间)作用: 1:用于区分不同的mapper,全局唯一. 2:绑定DAO接口,即面 ...

随机推荐

  1. Docker 搭建 Jenkins 持续集成自动化构建环境

    1.Docker镜像拉取 Jenkins 环境命令 docker pull jenkins/jenkins:lts 查看下拉取的镜像 docker images 2.通过容器编排方式构建 Jenkin ...

  2. 策略路由——使用Router-Policy策略路由进行路由协议的引入

    1.实验目的:实现R3-R2-R1为访问主线路,R3-R4-R1为访问备份线路 2.实验拓扑及IP,如图; 3.基本配置(端口IP) R1: <Huawei>sys[Huawei]sys ...

  3. 检查redis是否正常运行

    [XX@XXX]$ ps -ef | grep redisXX   8047 1 0 10:06 ? 00:00:03 redis-server *:6379XX   9983 9802 0 11:2 ...

  4. 记一次 Java 导出大批量 Excel 优化

    常用的excel导出方案,详情见Spring Boot 入门(十二):报表导出,对比poi.jxl和esayExcel的效率,其中jxl.esayEscel 底层都是基于 poi,它们仅仅是对 poi ...

  5. HTML基本使用

    HTML初识 (Hyper Text Markup Language): 超文本标记语言 「HTML骨架格式」 <!-- 页面中最大的标签 根标签 --> <html> < ...

  6. 用 python 解决线性代数中的矩阵运算

    用 python 解决线性代数中的矩阵运算 矩阵叉乘 矩阵求逆 矩阵转置 假定AX=B,求解未知矩阵X 矩阵的行列式值|matrix| 未完待续..... import sys from PyQt5. ...

  7. Swift-Framework Error(一)桥接文件

    摘要 Xcode 编译工程代码时,出现编译错误时除了红色图标外,还会附送几句英文文本. 常规操作拷贝英文文本,放到搜索框中找答案,但是读懂这几句话能事半功倍. 项目中如果有 OC 和 Swift 两种 ...

  8. 菜鸟Markdown笔记,看这个就够了

    菜鸟markdown语法笔记 1.标题 写法:共六级标题,一个#是一级标题,两个#是二级标题,三个#是三级标题······以此类推 (#)+空格键,快捷方式是Ctrl+1/2/3/4/5/6 2.段落 ...

  9. 大爽Python入门教程 0-4 安装Pycharm

    大爽Python入门公开课教案 点击查看教程总目录 安装重量级IDE--Pycharm 一 下载 下面步骤1,2中网络卡顿的朋友, 请直接前往步骤3来下载. 使用搜索引擎搜索Pycharm, 打开搜索 ...

  10. 1组-Alpha冲刺-1/6

    一.基本情况 队名:震震带着六菜鸟 组长博客:https://www.cnblogs.com/Klein-Wang/p/15526531.html 小组人数:7人 二.冲刺概况汇报 王业震 过去两天完 ...