MyBatis 配置延迟加载

本文介绍MyBatis中配置延迟加载的方法,包括全局配置参数设置、ResultMap中定义关联对象加载逻辑,以及通过测试代码验证延迟加载的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在全局配置文件中

<!-- 全局配置参数 -->
	<settings>
		<!-- 开启延迟加载  -->
		<setting name="lazyLoadingEnabled" value="true" />
		<setting name="aggressiveLazyLoading" value="false" />
			
		<!-- 打开二级缓存 -->
		<setting name="cacheEnabled" value="true"/>
	</settings>

配置文件中

type="orders"使用的是别名

<!-- 订单及用户的resultMap,实现延迟加载 -->
	<resultMap type="orders" id="ordersResultMap">
		<!-- 配置订单信息的映射 -->
		<id column="id" property="id" />
		<result column="user_id" property="user_id" />
		<result column="order_number" property="order_number" />
		<!-- 配置延迟加载 用户信息
			 select:延迟加载 时调用 的statement,如果跨命名空间,需要加上namespace 
			 column:将哪一列的值作为参数 传到延迟加载 的statement -->
		<association property="user" javaType="cn.itcast.mybatis.po.User"
			select="cn.itcast.mybatis.mapper.UserMapper.findUserById" column="user_id">

		</association>

	</resultMap>

<!-- 订单信息查询,使用延迟加载  -->
	<select id="findOrdersList" resultMap="ordersResultMap">
		select * from orders
	</select>

测试代码

// 测试延迟加载
	@Test
	public void testfindOrdersList() throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		OrdersMapperCustom ordersMapperCustom = sqlSession
				.getMapper(OrdersMapperCustom.class);
		List<Orders> list = ordersMapperCustom.findOrdersList();
		for (Orders orders : list) {
			int order_id = orders.getId();// 取订单id
			User user = orders.getUser();// 查询用户信息
		}

	}




orders类

package cn.itcast.mybatis.po;

import java.util.List;

/**
 * 订单信息
 * @author Thinkpad
 *
 */
public class Orders {
	private int id;//订单id
	private int user_id;//用户id
	private String order_number;//订单号
	
	//用户信息
	private User user;
	
	//订单明细
	private List<Orderdetail> orderdetails;
	
	@Override
	public String toString() {
	     return id+"..."+user_id+"..."+order_number;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getUser_id() {
		return user_id;
	}
	public void setUser_id(int user_id) {
		this.user_id = user_id;
	}
	public String getOrder_number() {
		return order_number;
	}
	public void setOrder_number(String order_number) {
		this.order_number = order_number;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public List<Orderdetail> getOrderdetails() {
		return orderdetails;
	}
	public void setOrderdetails(List<Orderdetail> orderdetails) {
		this.orderdetails = orderdetails;
	}
	
	
	
	
}

user类

package cn.itcast.mybatis.po;

import java.io.Serializable;
import java.util.Date;

/**
 * 
 * <p>Title: User</p>
 * <p>Description: user表对应的po类</p>
 * <p>Company: www.itcast.com</p> 
 * @author	lzqiang
 * @date	2015-08-11上午9:59:48
 * @version 1.0
 */
public class User implements Serializable {

	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 出生日期
	private String address;// 地址
	private String detail;// 详细信息
	private Float score;// 成绩
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getDetail() {
		return detail;
	}
	public void setDetail(String detail) {
		this.detail = detail;
	}
	public Float getScore() {
		return score;
	}
	public void setScore(Float score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", sex=" + sex
				+ ", birthday=" + birthday + ", address=" + address
				+ ", detail=" + detail + ", score=" + score + "]";
	}
	
	
	

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值