广告
返回顶部
首页 > 资讯 > 后端开发 > Python >MyBatis深入解读懒加载的实现
  • 210
分享到

MyBatis深入解读懒加载的实现

2024-04-02 19:04:59 210人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

懒加载 ,也称为嵌套查询        需要查询关联信息时,使用 mybatis 懒加载特性可有效的减少数据库压力, 首次查询只查询主表信息,

懒加载 ,也称为嵌套查询

       需要查询关联信息时,使用 mybatis 懒加载特性可有效的减少数据库压力, 首次查询只查询主表信息,关联表的信息在用户获取时再加载。        

       Mybatis 一对一关联的 association 和一对多的 collection 可以实现懒加载。懒加载时要 使用resultMap,不能使用 resultType 。

这里我们以员工表和部门表为例 

通过deptId 与 部门表 id 关联

 我们这里首先需要开启一个设置

<settings>
    <!--指定哪些方法去触发延迟加载,hashCode,equals,clone,toString-->
    <setting name="lazyLoadTriggerMethods" value=""/>
</settings>

懒加载功能是默认开启的, 但这里我们也需要设置这个属性, 不设置则不会触发延迟加载功能

Employee selectOneEmployee(int id);

我们以查询单个员工为例 , resultMap 与sql 如下

<!--定义resultMap-->
<resultMap id="employeeMap1" type="Employee">
   <id column="id" property="id"/>
   <result property="name" column="name"/>
   <result property="age" column="age"/>
   <!--fetchType为查询的类型,这里选择lazy  select为嵌套查询-->
   <association property="dept" javaType="Dept" fetchType="lazy"
         select="selectDept" column="deptId">
   <result column="name" property="name"/>
   </association>
</resultMap>
<select id="selectOneEmployee" resultMap="employeeMap1">
   select id,name,age,deptId from employee where id=#{id}
</select>
<!--通过上一级sql提供的deptId查询-->
<select id="selectDept" resultType="Dept">
   select name from dept where id=#{deptId}
</select>

此处一对一 ,我们使用<association>

java测试

public static void main(String[] args) {
   SqlSession sqlSession= MybatisUtil.getSqlSession();
   EmployeeDao mapper=sqlSession.getMapper(EmployeeDao.class);
   Employee employee = mapper.selectOneEmployee(3);
   System.out.println(employee);
   System.out.println(employee.getDept());
   sqlSession.commit();  //提交事务
   sqlSession.close();   //关闭

查询结果 :

通过结果可以看到 , 当我们第一次输出这个 employee 对象时, 部门是没有被查询的 , 而当我们需要使用到部门的信息时, 才会去触发这个查询 

查询部门 resultMap 与 sql如下: 

<resultMap id="deptMap1" type="Dept">
    <id column="id" property="id"/>
    <result column="name" property="name"/>
    <!--collection为一对多 , 这里一个部门包含多个员工-->
    <collection property="list" javaType="List" ofType="Employee"
          select="selectEmployee" fetchType="lazy" column="id">
    <result property="name" column="name"/>
    </collection>
</resultMap>
<select id="selectOneDept" resultMap="deptMap1">
    SELECT id,name FROM dept where id=#{id}
</select>
<select id="selectEmployee" resultType="Employee">
    select name from employee where deptId=#{id}
</select>

一对多,我们使用<collection>

懒加载就介绍到这里,感谢阅读

到此这篇关于MyBatis深入解读懒加载的实现的文章就介绍到这了,更多相关MyBatis懒加载内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: MyBatis深入解读懒加载的实现

本文链接: https://www.lsjlt.com/news/147511.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MyBatis深入解读懒加载的实现
    懒加载 ,也称为嵌套查询        需要查询关联信息时,使用 Mybatis 懒加载特性可有效的减少数据库压力, 首次查询只查询主表信息,...
    99+
    2022-11-13
  • Vue路由的懒加载深入详解
    目录一、概念二、代码实现三、打包文件的解析一、概念 官方描述: 当打包构建应用时,Javascript包会变得非常大,影响页面加载。 如果我们能把不同路由对应的组件分割成功不同的代码...
    99+
    2022-12-26
    Vue路由懒加载 Vue懒加载
  • MyBatis懒加载如何实现
    这篇文章主要介绍“MyBatis懒加载如何实现”,在日常操作中,相信很多人在MyBatis懒加载如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis懒加载如何实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • MyBatis深入解读动态SQL的实现
    目录if和wheretrimChooseSetforeachmybatis最强大的功能之一便是它的动态sql能力        借用...
    99+
    2022-11-13
  • mybatis源码解读之executor包懒加载功能
    ProxyFactory是创建代理类的工厂接口,其中的setProperties方法用来对工厂进行属性设置,但是mybatis内置的两个实现类都没有实现该接口,所以不支持属性设置。c...
    99+
    2022-11-13
  • Mybatis如何实现关联属性懒加载
    Mybatis 关联属性懒加载 延迟加载配置 mybatis默认没有开启延迟加载,需要在config.xml中setting配置。 lazyLoadingEnabled:true使用...
    99+
    2022-11-12
  • mybatis中如何实现executor包懒加载功能 
    这篇文章主要为大家展示了“mybatis中如何实现executor包懒加载功能 ”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mybatis中如何实现executor包懒加载功能&nb...
    99+
    2023-06-29
  • require加载器实现原理的深入理解
    前言 我们常说node并不是一门新的编程语言,他只是javascript的运行时,运行时你可以简单地理解为运行javascript的环境。在大多数情况下我们会在浏览器中去运行java...
    99+
    2022-11-12
  • JavaScript懒加载与预加载原理与实现详解
    目录1、懒加载1.1、什么是懒加载1.2、为什么要使用懒加载1.3、懒加载的优点1.4、懒加载的原理1.5、懒加载的实现步骤1.6、懒加载的实现方式2、预加载2.1、什么是预加载2....
    99+
    2022-11-13
  • jquery的懒加载怎么实现
    今天小编给大家分享一下jquery的懒加载怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2022-10-19
  • 详解如何在Java中实现懒加载
    目录Java 中如何实现懒加载使用 Supplier 接口实现懒加载使用双重检查锁定模式实现懒加载Java 中如何实现懒加载 懒加载是一种常见的优化技术,它可以延迟对象的创建或初始化...
    99+
    2023-03-19
    Java实现懒加载 Java懒加载
  • js怎么实现图片的懒加载
    这篇文章给大家分享的是有关js怎么实现图片的懒加载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。图片的懒加载是前端优化必须要掌握的东西,图片实现懒加载可以节省带宽又可以减轻我们网页的负荷。接下来我来记录一下我所掌...
    99+
    2023-06-14
  • MyBatis的注解使用、ORM层优化方式(懒加载和缓存)
    目录Mybatis注解Mybatis对ORM层的优化缓存懒加载MyBatis缓存机制二级缓存Mybatis注解 查找 @Select( "SELECT * ...
    99+
    2022-11-12
  • JVM中ClassLoader类加载器的深入理解
    JVM的体系结构图 先来看一下JVM的体系结构,如下图: JVM的位置 JVM的位置,如下图: JVM是运行在操作系统之上的,与硬件没有直接的交互,但是可以调用底层的硬件,用JI...
    99+
    2022-11-12
  • java懒加载的实现原理是什么
    Java的懒加载(Lazy Loading)是一种延迟加载的策略,即在需要使用某个对象时才进行实例化和初始化,在之前不会占用额外的资...
    99+
    2023-09-14
    java
  • android实现ViewPager懒加载的三种方法
    在项目中ViewPager和Fragment接口框架已经是处处可见,但是在使用中,我们肯定不希望用户在当前页面时就在前后页面的数据,加入数据量很大,而用户又不愿意左右滑动浏览,...
    99+
    2022-06-06
    方法 viewpager Android
  • 详解MyBatis的Dao层实现和配置文件深入
    目录Mybatis的Dao层实现传统开发方式代理开发方式MyBatis映射文件深入动态sql语句SQL片段抽取MyBatis核心配置文件深入typeHandlers标签plugins...
    99+
    2022-11-13
  • MyBatis实现配置加载的步骤
    目录前言正文总结前言 在原始MyBatis的使用中,使用MyBatis时会先读取配置文件mybatis-config.xml为字符流或者字节流,然后通过SqlSessionFacto...
    99+
    2023-05-19
    MyBatis 配置加载
  • Mybatis加载策略的实现方法
    目录MaBatis加载策略1.什么是延迟加载1.2实现1.2.1局部延迟加载1.2.2设置触发延迟加载的方法1.2.3全局延迟加载MaBatis加载策略 1.什么是延迟加载 Myba...
    99+
    2022-11-13
  • 深入解析Java类加载的案例与实战教程
    目录一、Tomcat类加载器架构二、动态代理的原理三、Java语法糖的改变本篇文章主要介绍Tomcat类加载器架构,以及基于类加载和字节码相关知识,去分析动态代理的原理。 一、Tom...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作