collection映射

讲了many2one和one2many,下面来看看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>
结合前面的解释,应该很好理解了。

Mybatis学习到此结束,如果你有兴趣,可以参照学习!

collection映射

时间: 2024-10-06 23:48:02

collection映射的相关文章

MyBatis 映射教程

认识MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github.iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO) mybatis图册 简介 前面说过了简单的数据库

Mybatis深入了解(六)----关联查询(高级映射)

一对一查询 resultType resultMap 一对多查询 resultType resultMap 多对多查询 一对一查询 resultType resultType:使用resultType实现非常简单,如果POJO中没有包括查询的列名,可以新建扩展类继承父类,并在子类中添加列名对应的属性,即可完成映射. package cn.itcast.ssm.po; /** * 订单的扩展类 * @author Administrator * */ //通过此类映射订单和用户查询的结果,让此类继

20_高级映射:多对多查询

[需求] 查询用户及用户购买的商品信息. [SQL语句] 查询主表:用户user表 关联表:由于用户和商品没有直接关联,需通过订单和订单明细进行关联,所以关联的表是 orders.orderdetail.items [映射的思路] 将用户信息映射到user中. 在user类中添加订单列表属性List<Orders> orderlist,将用户创建的订单映射到orderslist. 在Orders中添加订单明细列表属性List<OrderDetail> orderdetails,将订

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

一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: 1 CREATE TABLE items ( 2 id INT NOT NULL AUTO_INCREMENT, 3 itemsname VARCHAR(32) NOT NULL COMMENT '商品名称', 4 price FLOAT(10,1) NOT NULL COMMENT '商品定价', 5 detail TEXT COMMENT '商品描述', 6 pic VARCHAR(64) DEFAULT NULL COMMENT

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

一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(32) NOT NULL COMMENT '用户名称', birthday DATE DEFAULT NULL COMMENT '生日', sex CHAR(1) DEFAULT NULL COMMENT '性别',

mybatis 关系映射

一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: 1 CREATE TABLE items ( 2 id INT NOT NULL AUTO_INCREMENT, 3 itemsname VARCHAR(32) NOT NULL COMMENT '商品名称', 4 price FLOAT(10,1) NOT NULL COMMENT '商品定价', 5 detail TEXT COMMENT '商品描述', 6 pic VARCHAR(64) DEFAULT NULL COMMENT

MyBatis高级映射查询(3)

一.数据库数据和项目搭建过程 1.主要要四张表,分别为user用户信息表.items商品表.orderdetail订单明细表.orders订单表.表的结构和数据如下: 表结构 CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci CREATE TABLE `items` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(32) NOT NUL

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

1  订单商品数据模型 以订单商品数据为模型,来对mybaits高级关系映射进行学习. 1.1     数据模型分析思路 1.每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程. 2.每张表重要的字段设置 非空字段.外键字段 3.数据库级别表与表之间的关系 外键关系 4.表与表之间的业务关系 在分析表与表之间的业务关系时一定要建立 在某个业务意义基础上去分析. 1.2     数据模型分析 用户表user: 记录了购买商品的用户信息 订单表:order

MyBatis入门第2天--高级映射与查询缓存

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.28 lutianfei none mybatis框架执行过程: 1.配置mybatis的配置文件,SqlMapConfig.xml(名称不固定) 2.通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂 SqlSessionFactory在实际使用时按单例方式. 3.通过SqlSessionFactory创建SqlSession SqlSession是一个面向用户接口(提供操