mybatis 一对多的映射关系

xml中的配置:--通过外键进行关联-->映射到Orders类  orders类中的属性包括(自己本身的属性,和用户的关系的属性User user,和订单明细之间的关系的属性List<OrderDetail>orderdetails)

1)一个订单一个用户(使用association)

2)一个订单多个订单明细(使用collection)

<!-- ####################################一对多的查询########################################################## -->
	<resultMap type="cn.itcast.domain.Orders" id="OrdersAndOrderDetailResultMap" extends="ordersUserResultMap">
			<!-- 因为使用了继承 下面下注释的代码就没有必要写 -->
			<!-- <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"/>
			<association property="user" javaType="cn.itcast.domain.User">
				<id column="id" property="id"/>
				<result column="username" property="username"/>
				<result column="sex" property="sex"/>
				<result column="address" property="address"/>
			</association> -->
		<!-- 订单信息 -->
		<!-- 用户信息 -->
		<!-- 订单明细信息
			一个订单关联查询出了多条明细,使用collection进行映射
			collection:对关联查询到多条记录映射到集合对象中
			property:将关联查询到多条记录映射到cn.itcast.domain.Orders中那个属性
			oftype:指定映射到list集合属性中pojo的类型
		-->
		<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"/>
		</collection>
	</resultMap>
	<select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
		select orders.*,
		user.username,user.sex,user.address,
		orderdetail.items_id,orderdetail.items_num,orderdetail.orders_id,orderdetail.id orderdetail_id
		from orders,user,orderdetail
		where orders.user_id=user.id and orders.id=orderdetail.orders_id
	</select>

接口中定义方法

public List<Orders> findOrdersAndOrderDetailResultMap();

测试:

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

测试结果:

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

时间: 2024-12-28 12:15:52

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

MyBatis 中一对一和一对多的映射关系

1 一对一映射 比如每位学生有一个地址. public class Address { private Integer addrId; private String street; private String city; private String state; private String zip; private String country; // setters & getters } public class Student { private Integer studId; pr

Hibernate关联映射关系

一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实体类(Emp(员工),Dept(部门)) /* * 员工实体类 */public class Emp { private Integer empId; //员工编号 private String empName; //员工姓名 private Dept dept; //所处部门 //get(),set()方法省略 } /* * 部

Hibernate基于注解的双向one-to-many映射关系的实现

在项目中用到了一对多的实体类关系映射,之前接触的都是基于配置文件的映射实现.可是公司的大部分都是基于注解的.因此自己參考之前的代码捣鼓了基于注解的一对多的映射关系实现. 背景: 一的一端:QingAoCenterInfo:青奥场所信息. 多的一端:QingAoPlaceInfo:青奥场馆信息, 当中一个青奥场所下能够包括多个青奥场馆 one端:QingAoCenterInfo,持有QingAoPlaceInfo的List引用, 通过注解@OneToMany(mappedBy="qingAoCen

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

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

MyBatis --- 映射关系【一对一、一对多、多对多】,懒加载机制

映射(多.一)对一的关联关系 1)若只想得到关联对象的id属性,不用关联数据表 2)若希望得到关联对象的其他属性,要关联其数据表 举例: 员工与部门的映射关系为:多对一 1.创建表 员工表 确定其外键是部门表的 id DROP TABLE IF EXISTS emp; CREATE TABLE emp( id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, emp_name VARCHAR(255) DEFAULT NULL, gender CHAR(1

MyBatis总结之高级映射一对多查询

上一篇博文总结了一下一对一的映射,本文主要总结一下一对多的映射,订单项和订单明细是一对多的关系,所以本文主要来查询订单表,然后关联订单明细表,这样就有一对多的问题出来了. 首先还是先写sql语句,在写sql语句的时候遵循两点: 查询的主表是哪个? 订单表 查询的关联表是哪个? 订单明细表 明确了主表和关联表,下面就可以写sql了,我们在上一节的sql基础上添加订单明细表的关联即可. SELECT orders.*, user.`username`, user.`sex`, user.`addre

Hibernate4.x之映射关系--单向一对多

在领域模型中,类与类之间最普遍的关系就是关联关系在UML中,关联是有方向的 以Customer和Order为例:一个用户能发出多个订单,而一个订单只能属于一个客户.从Order到Customer的关联是多对一关联:而从Customer到Order是一对多关联 单向n-1 单向n-1关联只需从n的一端可以访问到1的一端 域模型:从Order到Customer的多对一单向关联需要在Order类中定义一个Customer属性,而在Customer类中无需定义存放Order对象的集合属性 关系数据模型:

Hibernate映射关系之一对多

1.双边使用的比较多,所以这里用双边的一对多:一个商店包含多个优惠券,一个优惠券对应一个商店 Store.java(商店) @OneToMany(mappedBy="store",cascade = {CascadeType.REMOVE }) private Set<Coupon> coupons=new HashSet<Coupon>(); (1)mappedBy="store"是在Coupon类中的Store的变量名称 (2)Casca

java框架篇---hibernate(一对多)映射关系

一对多关系可以分为单向和双向. 一对多关系单向 单向就是只能从一方找到另一方,通常是从主控类找到拥有外键的类(表).比如一个母亲可以有多个孩子,并且孩子有母亲的主键作为外键.母亲与孩子的关系就是一对多的关系.如果想对母亲信息的操作同时也反应在其孩子信息上那么可以在母亲类配置文件的集合属性上配置cascade="all",表示对关联实体进行级联更新配置. “主”端: 多的一端 <?xml version="1.0"?> <!DOCTYPE hiber