全局配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载资源文件 -->
<properties resource="jdbc.properties"/>
<!-- 全局配置,驼峰规则,默认不开启,结果值null -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 打开延迟加载的开关 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 将积极加载改为消息加载即按需加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!-- 简化类,起别名 -->
<typeAliases>
<typeAlias type="com.swliu.yhmis.pojo.Order" alias="Order"/>
<typeAlias type="com.swliu.yhmis.pojo.Door" alias="door"/>
<typeAlias type="com.swliu.yhmis.pojo.OrderDetail" alias="OrderDetail"/>
</typeAliases>
<!-- 配置环境、事务、数据源、映射文件 -->
<environments default="test">
<environment id="test">
<!-- 支持两种类型:JDBC/MANAGE -->
<transactionManager type="JDBC"/>
<!-- 数据源:POOLED/UNPOOLED/JNDI -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 告诉mybatis映射文件存在 -->
<mappers>
<mapper class="com.swliu.yhmis.pojo.OrderMapper"/>
</mappers>
</configuration>
mapper配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.swliu.yhmis.pojo.OrderMapper">
<!-- 订单的映射 autoMapping自动映射和驼峰规则全局设定来配合 -->
<resultMap type="Order" id="orderResultMap" autoMapping="true">
<!-- 主键 -->
<id property="id" column="id"/>
<!-- 对一,一个订单所属一个门店
property 关联对象中声明的名称
javaType 关联对象它对应对象类
select 指的另外查询标签id
column 当前表中对应外键
-->
<association property="door" select="getDoorInfo" column="door_id" javaType="Door" autoMapping="true"/>
<!-- 对多,一个订单有多个订单详情
property pojo中配置的属性名称
ofType 集合元素类型
个人感觉:orderDetails无主表order的外键不适用于懒加载
<collection property="orderDetails" ofType="OrderDetail" autoMapping="true"/>
-->
</resultMap>
<!-- 查询某个订单,包含门店信息,包含订单详情信息 -->
<select id="get" parameterType="int" resultMap="orderResultMap">
select id,door_id,order_no,order_type,person_num,
cashier,create_time,end_time,payment_type,price
from tb_order where id=#{pid}
</select>
<!-- 查询某个订单对应门店信息 -->
<select id="getDoorInfo" parameterType="int" resultType="door">
select * from tb_door where id=#{id}
</select>
</mapper>
导入cglib包:
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
测试延迟加载:
package yhmis;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.swliu.yhmis.pojo.Door;
import com.swliu.yhmis.pojo.Order;
import com.swliu.yhmis.pojo.OrderDetail;
import com.swliu.yhmis.pojo.OrderMapper;
public class OrderTest {
//成员变量,线程安全的
private SqlSessionFactory factory;
@Before //获取factory
public void init() throws IOException{
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
factory = new SqlSessionFactoryBuilder().build(is);
}
@Test //查询某个订单
public void get(){
SqlSession session = factory.openSession();
OrderMapper mapper = session.getMapper(OrderMapper.class);
Order order = mapper.get(10);
System.out.println("订单信息:"+order.getId()+" "+order.getDoorId());
Door door = order.getDoor();
System.out.println("门店信息:"+door.getId()+" "+door.getName());
// List<OrderDetail> orderDetails = order.getOrderDetails();
// for (OrderDetail orderDetail : orderDetails) {
// System.out.println("订单详情信息:"+orderDetail.getId()+" "+orderDetail.getItem());
// }
System.out.println("订单汇总信息:"+order);
}
}
打印信息:
2022-07-08 12:55:51,441 [main] DEBUG [com.swliu.yhmis.pojo.OrderMapper.get] - ==> Preparing: select id,door_id,order_no,order_type,person_num, cashier,create_time,end_time,payment_type,price from tb_order where id=?
2022-07-08 12:55:51,513 [main] DEBUG [com.swliu.yhmis.pojo.OrderMapper.get] - ==> Parameters: 10(Integer)
2022-07-08 12:55:51,685 [main] DEBUG [com.swliu.yhmis.pojo.OrderMapper.get] - <== Total: 1
订单信息:10 null
2022-07-08 12:55:51,685 [main] DEBUG [com.swliu.yhmis.pojo.OrderMapper.getDoorInfo] - ==> Preparing: select * from tb_door where id=?
2022-07-08 12:55:51,685 [main] DEBUG [com.swliu.yhmis.pojo.OrderMapper.getDoorInfo] - ==> Parameters: 1(Integer)
2022-07-08 12:55:51,701 [main] DEBUG [com.swliu.yhmis.pojo.OrderMapper.getDoorInfo] - <== Total: 1
门店信息:1 永和大王(北三环西路店)
订单汇总信息:Order [door=Door [id=1, name=永和大王(北三环西路店), tel=110-62112313], orderDetails=null, id=10, doorId=null, orderNo=P000011, orderType=堂食, personNum=1, cashier=张静, createTime=Fri Jun 15 11:25:11 CST 2018, endTime=Tue Apr 17 07:24:38 CST 2018, paymentType=微支付, price=8.0]
参考文章:MyBatis懒加载(延迟加载)
本文介绍了如何在Mybatis中配置延迟加载,包括全局配置、mapper配置、依赖cglib包的引入,以及通过测试验证延迟加载的效果,并提供了相关参考文章链接。
7899

被折叠的 条评论
为什么被折叠?



