MyBatis Review——一对多关系映射配置

示例:

查询订单表及订单明细信息。

编写sql查询语句:

SELECT
	orders.*, USER .username ,USER .sex,
	USER .address,
	orderdetail.id as orderdetail_id,
	orderdetail.items_id,
	orderdetail.items_num,
	orderdetail.orders_id
FROM
	orders,
	USER,
	orderdetail
WHERE
	orders.user_id = USER .id
	AND
  orderdetail.orders_id=orders.id

结果如下:

order定义:

resultMap配置:

<!-- 定义订单查询关联用户的resultMap -->
	<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
		<!-- 配置映射的订单信息 -->
		<id column="id" property="id" /><!-- 订单信息的唯一标识 --><!-- 如果有多个列,组成唯一标识,配置多个id -->
		<result column="user_id" property="userId" />
		<result column="number" property="number" />
		<result column="createtime" property="createtime" />
		<result column="note" property="note" />

		<!-- 配置映射的关联的用户信息 -->
		<!-- association:用于映射关联查询单个对象的信息 property:将关联查询的用户信息映射到orders的那个属性中 -->
		<association property="user" javaType="cn.itcast.mybatis.po.User">
			<!-- 关联查询的用户的唯一标识 column:指定唯一标识用户信息的列 -->
			<id column="user_id" property="id" />
			<result column="username" property="username" />
			<result column="sex" property="sex" />
			<result column="address" property="address" />
		</association>

	</resultMap>

	<!-- 查询订单及订单明细的resultMap -->
	<!--  extends:
				使用继承就不用配置订单信息和用户信息的映射了
	-->
	<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
		<!-- 订单信息 -->
	<!-- 	<id column="id" property="id" />订单信息的唯一标识如果有多个列,组成唯一标识,配置多个id
		<result column="user_id" property="userId" />
		<result column="number" property="number" />
		<result column="createtime" property="createtime" />
		<result column="note" property="note" />

		用户信息
		<association property="user" javaType="cn.itcast.mybatis.po.User">
			关联查询的用户的唯一标识 column:指定唯一标识用户信息的列
			<id column="user_id" property="id" />
			<result column="username" property="username" />
			<result column="sex" property="sex" />
			<result column="address" property="address" />
		</association> -->

		<!-- 明细信息 一个订单关联查询除了多条明细信息 要使用collection来进行映射 collection:实现了对关联查询到的多条记录进行映射
			property:将关联查询到的多条记录映射到cn.itcast.mybatis.po.Orders的哪个属性 ofType:要映射到集合属性中pojo的类型 -->
		<collection property="orderDetials" ofType="cn.itcast.mybatis.po.OrderDetial">
			<!-- 订单明细的唯一标识 -->
			<!-- id:订单明细的唯一标识 -->
			<id column="orderdetail_id" property="id" />
			<result column="items_id" property="itemsId"/>
			<result column="items_num" property="itemsNum"/>
			<result column="orders_id" property="ordersId"/>

		</collection>

	</resultMap>
<!-- 查询订单关联用户及订单明细 -->
	<select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
		SELECT
		orders.*, USER .username ,USER .sex,
		USER .address,
		orderdetail.id as orderdetail_id,
		orderdetail.items_id,
		orderdetail.items_num,
		orderdetail.orders_id
		FROM
		orders,
		USER,
		orderdetail
		WHERE
		orders.user_id = USER .id
		AND
		orderdetail.orders_id=orders.id
	</select>

小结:

1,使用collection来映射一对多中的List属性;

2,使用extends来继承其他resultMap;

时间: 2024-10-07 18:32:29

MyBatis Review——一对多关系映射配置的相关文章

hibernate实体xml一对多关系映射

单向一对多关系映射: 一个房间对应多个使用者,也就是Room實例知道User實例的存在,而User實例則沒有意識到Room實例. 用户表: package onlyfun.caterpillar; public class User { private Long id; private String name; public User() {} public Long getId() { return id; } public void setId(Long id) { this.id = id

菜鸟学习Hibernate——一对多关系映射

Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创建实体类Classes和实体类Student Classes.java package com.bjpowernode.hibernate; import java.util.Set; public class Classes { private int id; private String nam

Hibernate学习笔记(四) — session的产生方式 与 一对多关系映射

一.session的创建 Session是由SessionFactory负责创建的,而SessionFactory的实现是线程安全的,多个并发的线程可以同时访问一个SessionFactory并从中获取Session实例,但Session不是线程安全的. 每次openSession,产生的都是一个新的session,相当于创建一个新的连接.但是有很多时候,并不希望这样.比如在淘宝购物,在付账的一瞬间,至少有三件事情发生,转账,仓库数据变化,购物历史记录.而这三件事有必须在同一事务下.自然我们会联

Hibernate One-to-Many Mappings 一对多关系映射

Hibernate One-to-Many Mappings 一对多关系映射 关键点:一对多关系使用 Set 实现, 例子:一个员工可以有多个学证书. Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml) 2.创建持久化类,即其实例需要保存到数据库中的类(Employee.java) 3.创建对象-关系映射文件(Employee.hbm.xml) 4.通过Hibernate API编写访问数据库的代码 创建Hibernate的配置文件(h

Mybatis框架中实现一对多关系映射

学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢? 其实很简单 首先我们照常先准备前期的环境(具体解释请  参考初识Mybatis进行增.删.改.查 blogs )这里我就直接上代码了 主配置文件:Configuration.xml <?xml version="1.0" encoding="UTF-8" ?&

hibernate 一对多 关系映射

在关系中,或多或少的表之间有复杂的关联关系 这里测试 一对多 关联关系的配置 开发步骤就不多说了.直接看一个示例. users 用户 和  shop商品订单表 分析:一个用户可以有多个商品订单,一个订单只属于一个用户. 这样就构成了一对多的关联关系. 这里用的是oracle 数据库 users 和 shop 数据库表 create table users( id number(7) primary key,   name nvarchar2(20),   pass nvarchar2(20),

mybatis 中一对多关系简单应用

1:应用场景 主要需要实现是一个实体类中存在一个字段,该字段为一个集合,集合存放的是另外一个实体类类型 如教室类(Class)中有一个学生类(student)的集合,即表示一个教室中 存在多个学生 项目保存路径: D:\海同\mybatis\9.16\FirstMybatis 2:相关代码 创建数据库中表语句 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE

Mybatis基础学习(四)&mdash;关系映射

一.模型分析 user和orders user---->orders 一个用户可以创建多个订单,一对多. orders--->user 一个订单只由一个用户创建,一对一.   orders和orderdetail orders--->orderdetail 一个订单可以包括多个订单明细,因为一个订单可以购买多个商品,每个商品的购买信息在orderdetail记录,一对多关系. orderdetail---> orders 一个订单明细只能包括在一个订单中,一对一.   orderd

一对多关系映射

我们想把 部门 与 员工 这两种类型的数据保存到数据库中 假设: 一个员工不能同时属于多个部门.那么 部门 跟员工之间的关系 ,从部门角度分析 便是 一对多的关系 第一步设计类: 第二步,实现类: public class Department { private Integer id; private String departName; private Set<Employee> employees; //getter & setter } public class Employe