【MyBatis框架点滴】——MyBatis延迟加载

简介:  延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。——摘自百度百科《延迟加载》

 什么是延迟加载?


 延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。——摘自百度百科《延迟加载》



 当然,不光是Hibernate,MyBatis也支持延迟加载。


 这里继续以订单业务的例子来说明:


13.png

  如上图,以订单表为主查询表,关联查询对应用户的信息,默认只查询订单信息,当客户端用到用户信息时,才去关联查询用户信息。


  Orders.java


public class Orders {
  private Integer id;
  private Integer userId;
  private String number;
  private Date createtime;
  private String note;
  private User user;
  //getter、setter
}

  User.java

public class User {
  private int id;
  private String username;
  private int sex;
  private Date birthday;
  private String address;
  //getter、setter
}

  映射文件


<?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.danny.mybatis.mapper.OrdersMapper" >
<resultMap type="com.danny.mybatis.po.Orders" id="OrderUserLazyLoadingResultMap">
    <!-- 配置映射的订单信息 -->  
    <id column="id" property="id"/>
    <result column="user_id" property="userId"/>
    <result column="number" property="number"/>
    <result column="createtime" property="createtime"/>
    <result column="note" property="note"/>
    <!-- 配置映射的用户信息 -->
    <association property="user" javaType="com.danny.mybatis.po.User" select="com.danny.mybatis.mapper.UserMapper.findUserById" column="user_id">     
    </association>
  </resultMap>
  <select id="findOrderUserLazyLoading" resultMap="OrderUserLazyLoadingResultMap" >
      select * from orders
    </select>
</mapper>

  mapper接口

public interface OrdersMapper{
  List<Orders> findOrderUserLazyLoading() throws Exception;
}

  MyBatis默认是不支持延迟加载的,所以还要对系统进行配置,在MyBatis全局配置文件中进行如下配置:


<settings>
   <setting name="lazyLoadingEnabled" value="true"/>
   <setting name="aggressiveLazyLoading" value="false"/>
</settings>



  这两个配置的意义如下表:

14.png


 配置的时候还需要注意MyBatis全局配置文件中的标签时有顺序的,从前到后应该为properties、settings、typeAliases、typeHandlers、objectFactory、plugins、environments、mappers,如果顺序颠倒,则会报错“元素类型为configuration的内容必须匹配(properties?,settings?,typeAliases?,typeHandlers?……”



 测试


@Test
public void findOrderUserLazyLoading(){
  SqlSession sqlSession=sqlSessionFactory.openSession();
  OrdersMapperCustom ordersMapperCustomMapper=sqlSession.getMapper(OrdersMapperCustom.class);
  try {
    List<Orders> list=ordersMapperCustomMapper.findOrderUserLazyLoading();
    if (list!=null) {
        System.out.println(list.get(0).getUser().getUsername());
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
}


  断点调试时,当执行到List<Orders> list=ordersMapperCustomMapper.findOrderUserLazyLoading();时,可以在日志中发现执行的sql语句为select * from orders,如图:


16.png


  当执行完list.get(0).getUser().getUsername()时,可以在日志中发现系统又执行了select * from user where id=?,如图:


17.png



 上面的例子是通过association延迟加载,collection也是一样的。

相关文章
|
6月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
8月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
353 29
|
Java 数据库连接 Maven
后端框架学习-----mybatis(使用mybatis框架遇到的问题)
这篇文章总结了在使用MyBatis框架时可能遇到的几个常见问题及其解决方法,包括配置文件注册、接口绑定、方法名匹配、返回类型匹配、Maven资源导出、时区设置和字符编码问题。
|
7月前
|
SQL XML Java
八、(了解即可)MyBatis懒加载(或者叫延迟加载)
八、(了解即可)MyBatis懒加载(或者叫延迟加载)
177 1
|
6月前
|
Oracle 关系型数据库 Java
|
10月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
199 1
持久层框架MyBatisPlus
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
11月前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
375 0