如何利用mybatis的懒加载机制解决级联造成的N+1问题

本文介绍了如何利用MyBatis的懒加载机制来解决级联查询导致的N+1问题。通过配置`lazyLoadingEnabled`和`aggressiveLazyLoading`,可以控制对象的加载时机,从而提高查询效率。示例代码展示了在不同设置下,查询用户及其订单时的SQL执行情况。
摘要由CSDN通过智能技术生成

目录

1.代码演示

1.1创建POJO

1.2创建Mapper接口

1.3创建XML映射文件

1.4创建mybatis-config.xml文件

1.5测试未使用懒加载机制

2.懒加载定义

2.1配置lazyLoadingEnabled并测试

 2.2配置aggressiveLazyLoading并测试

 

什么是N+1:

例如我们有用户User和订单Order两张表,在一般情况下我们只需要查询用户就可以,(这就是所谓的“1”)但是User和Order都被查询出来了,每一个用户User都对应一个或者多个订单Order,查询出来的Order订单就是所谓的“N”。或许叫“1+N”会更贴切,但是这样的查询就会造成不必要的性能浪费。

1.代码演示

1.1创建POJO

我们有User和Order两个对象

package user.pojo;

import lombok.Data;
@Data
public class User {
    private long id;
    private String userName;
    private int userAge;
    private Order orderId;
}
package user.pojo;

import lombok.Data;

@Data
public class Order {
    private long id;
    private String orderName;
    private String note;
}

1.2创建Mapper接口

package user.mapper;

import user.pojo.User;

public interface UserMapper {
    User getUser(long id);
}
package user.mapper;

import user.pojo.Order;

public interface OrderMapper {
    Order getOrder(long id);
}

1.3创建XML映射文件

UserMapper.xml

<?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="user.mapper.UserMapper">
    <resultMap id="UserMap" type="user.pojo.User">
        <id property="id" column="id"/>
        <result property="userName" column="userName"/>
        <result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值