mybatis实现对象之间的关系(一对一、一对多、多对多)以及mybatis的缓存机制

本文探讨了在业务需求中常见的对象关系——一对一、一对多、多对多,并详细阐述了如何使用mybatis处理这些关系。此外,文章还深入解析了mybatis的一级缓存和二级缓存机制,包括它们的工作原理、配置和优化,以及如何通过Ehcache实现二级缓存。同时,提到了mybatis的延迟加载特性,旨在提高数据库性能。
摘要由CSDN通过智能技术生成

一、业务需求中对象之间的关系

在实际的开发当中,不仅要对表与表之间的关系进行的详细分析,也要针对在业务意义上对象之间的关系,通常的关系为:一对一、一对多、多对多;

二、针对使用mybatis处理这三种关系

1、业务模型说明

这里用用用户表、订单表、订单详情表、商品表着四张表之间,说明对象这三种之间的关系:


2、一对一的关系

2.1、用查询订单表的详情orders表,来说明一对一的关系(一个订单信息对应一个用户)

2.2、使用resultType和resultMap都可以实现一对一的关系的

2.21、使用resultType实现一对一的关系

resultType标签对应的结果映射到一个包装类上面,这个包装类包含着order表和user表的所有的属性信息;(很好理解啊,就是sql查询返回的数据要对应到java对象中,如果使用包装类型的设计方法就是用resultTpye,如果使用在两者中插入某一类的对象作为属性,就是用resultMap)

包装类:

public class OrdersCustom extends  Orders {
	
	//用户名称 
	private String username;
	//用户地址
	private String address;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
	
}
映射文件.xml

<!-- 使用resultType实现订单查询,关联查询用户信息 -->
	<select id="findOrdersUserList" resultType="cn.itcast.mybatis.po.OrdersCustom">

		SELECT
		orders.*,
		user.username,
		user.address
		FROM
		orders,
		USER
		WHERE orders.user_id =
		user.id

	</select>

对用的mapper接口

// 查询订单及用户信息
	public List<OrdersCustom> findOrdersUserList() throws Exception;

2.22、使用resultMap来说明一对一的关系

(这里resultMap映射到orders对象后,但是里面又有user要映射,所以,相当于在orders对象映射之后又映射到user一次,相当于连续两次的映射,所以在是一对一的情况下,使用resultType)

映射到java对象

public class Orders {
	private int id;//订单id
	private int user_id;//用户id
	private String order_number;//订单号
	
	//用户信息
	private User user;

映射文件.xml

<!-- 定义订单信息及用户信息的resultMap -->
	<resultMap type="orders" id="ordersUserResultMap">
		<!-- id:订单信息的唯 一约束 如果由多个字段决定一条唯 一记录,id标签需要定义多个 -->
		<id column="id" property="id" />
		<result column="order_number" property="order_number" />
		<result column="user_id" property="user_id" />


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




	</resultMap>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值