【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也是一样的。

相关文章
SQL XML Java
107 0
|
3月前
|
SQL Java 数据库连接
区分iBatis与MyBatis:两个Java数据库框架的比较
总结起来:虽然从技术角度看,iBATIS已经停止更新但仍然可用;然而考虑到长期项目健康度及未来可能需求变化情况下MYBATISS无疑会是一个更佳选择因其具备良好生命周期管理机制同时也因为社区力量背书确保问题修复新特征添加速度快捷有效.
232 12
|
4月前
|
SQL XML Java
MyBatis框架如何处理字符串相等的判断条件。
总的来说,MyBatis框架提供了灵活而强大的机制来处理SQL语句中的字符串相等判断条件。无论是简单的等值判断,还是复杂的条件逻辑,MyBatis都能通过其标签和属性来实现,使得动态SQL的编写既安全又高效。
294 0
|
9月前
|
Oracle 关系型数据库 Java
|
9月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
10月前
|
SQL XML Java
八、(了解即可)MyBatis懒加载(或者叫延迟加载)
八、(了解即可)MyBatis懒加载(或者叫延迟加载)
320 1
|
11月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
590 29
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
294 1
持久层框架MyBatisPlus
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
572 0
|
SQL Java 数据库连接
【Java 第十三篇章】MyBatis 框架介绍
MyBatis 原名 iBATIS,2001 年由 Clinton Begin 创建,以其简易灵活著称。2010 年更名以重塑品牌形象。MyBatis 通过 SQL 映射文件将 SQL 语句与 Java 代码分离,支持编写原生 SQL 并与方法映射。具备对象关系映射功能,简化数据库记录处理。支持动态 SQL 构建,灵活应对不同查询条件。内置缓存机制,提升查询效率。相比全功能 ORM,MyBatis 提供更高 SQL 控制度和更好的维护性,并易于与 Spring 等框架集成,广泛应用于 Java 数据访问层。
269 0