Java神鬼莫测之MyBatis多表操作延迟加载(四)

简介: Java神鬼莫测之MyBatis多表操作延迟加载(四)

MyBatis多表操作延迟加载


延迟加载设置


20210720113936492.png

延迟加载原理


使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用A.getB().getName(),拦截器invoke()方法发现A.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用A.setB(b),于是a的对象b属性就有值了,接着完成A.getB().getName()方法的调用。这就是延迟加载的基本原理。


1.对一操作:


<resultMap id="orderMap" type="order">
        <result property="id" column="id"></result>
        <result property="ordertime" column="ordertime"></result>
        <result property="total" column="total"></result>
    <!-- 
      当查询order的时候,mybatis会把查询结果中的uid列中的数据,一个一个拿出来,然后调用        UserMapper.findById方法,查询数据,并把查询到数据,封装到order对象的user属性中。
    -->
        <association property="user" javaType="user"
                     select="com.demo.dao.UserMapper.findById" column="uid">
      </association>
</resultMap>
<!-- 获取所有的order -->
<select id="findAll" resultMap="orderMap">
    SELECT * FROM orders
</select>
<!-- 根据用户id,查询对应的所有的订单 -->
<select id="findByUid" resultType="order">
    SELECT * FROM orders WHERE uid = #{uid}
</select>

2.对多操作:

<resultMap id="userMap" type="user">
        <result property="id" column="id"></result>
        <result property="username" column="username"></result>
        <result property="password" column="password"></result>
        <result property="birthday" column="birthday"></result>
      <!-- 
      当查询user的时候,mybatis会把查询结果中的id列中的数据,一个一个拿出来,然后调用          OrderMapper.findByUid方法,查询数据,并把查询到数据,封装到user对象的orders属性中。
    -->
        <collection property="orders" ofType="order" 
                    select="com.demo.dao.OrderMapper.findByUid" column="id">  
      </collection>
</resultMap>
<!-- 获取所有用户 -->
<select id="findAll" resultMap="userMap">
        select * from user
</select>
<!-- 根据用户id,获取用户 -->
<select id="findById" resultType="user">
    select * from user where id = #{id}
</select>

3.延迟加载(懒加载)


什么是延迟加载?


在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)


什么是立即加载?


不管用不用,只要一调用方法,马上发起查询。

<!-- 在SqlMapConfig文件中,开启mybatis的懒加载机制 -->
<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>


目录
相关文章
|
6月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
246 1
|
10月前
|
SQL XML Java
八、(了解即可)MyBatis懒加载(或者叫延迟加载)
八、(了解即可)MyBatis懒加载(或者叫延迟加载)
304 1
|
11月前
|
安全 Java 数据库连接
Java使用MyBatis-Plus的OR
通过MyBatis-Plus的条件构造器,Java开发者可以方便地进行复杂的查询条件组合,包括AND和OR条件的灵活使用。熟练掌握这些技巧,可以显著提升开发效率和代码可读性。
412 20
|
11月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
1163 6
|
11月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
1723 1
|
11月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
287 1
|
11月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
496 2
|
11月前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
210 5
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
605 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
334 6