mybatis 多对多映射关系

xml映射文件:一个用户对应多个订单,一个订单对应多个订单明细,一个订单明细对应一个商品 可以推断出用户和商品是多对多的关系用户和商品的关系分析

可以发现一层套一层...

<!-- #######################################多对多的关系映射####################################################### -->
	<resultMap type="cn.itcast.domain.User" id="UserAndItemsResultMap">
		<!-- 用户表信息 -->
		<id column="id" property="id"/>
		<result column="username" property="username"/>
		<result column="sex" property="sex"/>
		<result column="address" property="address"/>
		<!-- 订单表信息  一个用户多个订单-->
		<collection property="ordersList" ofType="cn.itcast.domain.Orders">
			<id column="id" property="id"/>
			<result column="number" property="number"/>
			<result column="createtime" property="createtime"/>
			<result column="note" property="note"/>
			<result column="user_id" property="userId"/>
			<!-- 一个 订单多个明细 -->
			<collection property="orderdetails" ofType="cn.itcast.domain.Orderdetail" >
				<id column="orderdetail_id" property="id"/>
				<result column="items_num" property="itemsNum"/>
				<result column="items_id" property="itemsId"/>
				<result column="orders_id" property="ordersId"/>
				<!-- 一个订单一个商品 -->
				<association property="items" javaType="cn.itcast.domain.Items">
					<id column="items_id" property="id"/>
					<result column="items_name" property="name"/>
					<result column="items_price" property="price"/>
					<result column="items_detail" property="detail"/>
				</association>
			</collection>
		</collection>
	</resultMap>
	<select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap">
		select orders.*,
		user.username,user.sex,user.address,
		orderdetail.items_id,orderdetail.items_num,orderdetail.orders_id,orderdetail.id orderdetail_id,
		items.name items_name,items.price items_price,items.detail items_detail
		from orders,user,orderdetail,items
		where orders.user_id=user.id and orders.id=orderdetail.orders_id and orderdetail.items_id=items.id
	</select>

接口中定义方法

public List<User> findUserAndItemsResultMap();

测试:

@Test
	public void testfindUserAndItemsResultMap(){
		SqlSession sqlSession = sqlSessionFactory.openSession();
		 OrdersMapperUser ordersMapperUser = sqlSession.getMapper(OrdersMapperUser.class);
		List<User> list = ordersMapperUser.findUserAndItemsResultMap();
		System.out.println(list);
	}

运行结果分析:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-03 00:03:24

mybatis 多对多映射关系的相关文章

hibernate(四) 双向多对多映射关系

序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感觉还是比较容易的,需要理清楚其数据库关系图,那么你就拿下了它.映射文件的配置还是那么些死东西. --WH 一.小疑问的解答 问题一:到这里,有很多学习者会感到困惑,因为他不知道使用hibernate是不是需要自己去创建表,还是hibernate全自动,如果需要自己创建表,那么主外键这种设置也是自己设

Hibernate的多对多映射关系

example: 老师(teacher)和学生(Student)就是一个多对多的关系吧?老师可以有多个学生,学生也可以由多个老师,那在Hibernate中多对多是怎样实现的呢?? 在Hibernate中多对多关系分为两种:1单向的多对多,2双向的多对多 下面详细说明一些两种有什么不同和实现步骤 I单向的多对多实现步骤: 1新建teacher.student表,可以任意选择在其中一个表添加另一个表的集合,(例如在teacher中添加student的set<Student>集合,例如private

Hibernate单向多对一映射关系(1)

单向 n-1 单向 n-1 关联只需从 n 的一端可以访问 1 的一端 域模型: 从 Order 到 Customer 的多对一单向关联需要在Order 类中定义一个 Customer 属性, 而在 Customer 类中无需定义存放 Order 对象的集合属性 关系数据模型:ORDERS 表中的 CUSTOMER_ID 参照 CUSTOMER 表的主键        Order.hbm.xml <many-to-one name="customer" class="C

Hibernate多对多映射关系(5)

单向 n-n n-n 的关联必须使用连接表 与 1-n 映射类似,必须为 set 集合元素添加 key 子元素,指定 CATEGORIES_ITEMS 表中参照 CATEGORIES 表的外键为 CATEGORIY_ID. 与 1-n 关联映射不同的是,建立 n-n 关联时, 集合中的元素使用 many-to-many. many-to-many 子元素的 class 属性指定 items 集合中存放的是 Item 对象, column 属性指定 CATEGORIES_ITEMS 表中参照 IT

Java中多对多映射关系(转)

多对对的映射,可以用学生和课程进行演示.一个学生可以选择多个课程,一个课程又对应了多个学生 定义学生类 class Stu{ private String name; private String num; private Course[] course; public Stu() {} public Stu(String name,String num) { this.name = name; this.num = num; } public String getName() { return

mybatis多对多映射

数据库里面有角色实体类app_cms_role 权限实体类app_cms_right 以及一张中间表app_cms_role_right 建立对应的实体类AppCmsRole package com.qianlong.cms.entity; import java.util.Date; import java.util.Set; public class AppCmsRole { private Integer id; private String name; private Date crea

mybatis懒加载特性详解,以及多对多映射详解

注意讲解都在代码中 准备数据库,测试数据,各位自己添加,因为是多对多,所以使用中间表: 用到的实体: 学生类: public class Student { private Integer sid; private String name; private Integer age; //一个学生有多个老师,一个老师有多个学生 private List<Teacher> teachers=new ArrayList<Teacher>(); setter.. getter.... to

Hibernate学习8—Hibernate 映射关系(多对多)

第二节:Hibernate 多对多映射关系实现 比如学生和课程是多对多的关系: 一个学生可以选多个课程: 一个课程可以被多个学生选中,所以是多对多的关系: 1,多对多单向实现: 单向关系: 这里通过学生可以获取这个学生选修的课程: 但是通过课程无法获取选修这门课程的学生: Student.java: package com.cy.model; import java.util.HashSet; import java.util.Set; public class Student { privat

EJB3 jpa 数据库表的映射关系

1)多对一映射关系(单向) 使用外键关联,在外键的选取上以多的一方为主,即外键要在多的一方体现出来 @Entity public class Company implements Serializable{ @Id @Column(name = "c_id") private int id; private String name; } @Entity public class Employee implements Serializable { @Id @Column(name=&q