在我们的实际开发中,会面临各种各样的查询操作。如果单表查询能满足业务需求。尽量用单表查询,因为单表查询的效率比多表关联查询快。

那么当业务需求需要用到的数据来源于多张表的时候,单表查询无法解决,Mybatis 为我们引入了延迟加载的概念。

操作前,我们需要先把 log4j 整合到 mybatis 上,我们需要如下的一些操作。

第一步,编写 log.properties 文件

log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO
复制代码

第二步,在 mybatis 核心配置文件中配置 log4j

<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
复制代码

第三步,导入 log4j 的依赖

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
复制代码

先来看一下我们的表结构,两张表,一张表是用户登录的信息表,结构如下:  
一张是发贴表,结构如下:  
登陆表的 username 字段作为发帖表的 uid 的外键。

接下来,我们来操作延迟加载,场景是根据主键查询发贴表,级联查询登陆表中的登陆用户的信息。

第一步,在 mybatis 核心配置文件中配置延迟加载

<settings>
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--关闭积极加载-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
复制代码

第二步,在查询接口中添加添加方法

@Repository
public interface LoginDao {
public TieInfo getTieInfoById(Integer id);
复制代码

第三步,在 mapper.xml 文件中配置查询

<select id="getTieInfoById" parameterType="integer" resultMap="tieInfoPro">
select * from tieInfo where id = #{id}
</select> <resultMap id="tieInfoPro" type="tieInfo">
<id column="id" property="id"></id>
<result column="theme" property="theme"></result> <association property="loginUser" column="uid" select="selectUser"></association>
</resultMap> <select id="selectUser" resultType="loginuser">
select * from loginuser where username = #{uid}
</select>
复制代码

接下来,我们进行查询,如果只进行发贴表对象或者是其中的部分对象,我们发现 sql 语句只会执行一条,即外部查询

如果查询的对象或者字段来源于两个对象,那么 sql 就会按照延迟加载的方案,执行两个 sql 语句

MyBatis 延迟加载代码详解的更多相关文章

  1. MyBatis Mapper XML 详解

    MyBatis Mapper XML 详解 MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JD ...

  2. Mybatis源码详解系列(四)--你不知道的Mybatis用法和细节

    简介 这是 Mybatis 系列博客的第四篇,我本来打算详细讲解 mybatis 的配置.映射器.动态 sql 等,但Mybatis官方中文文档对这部分内容的介绍已经足够详细了,有需要的可以直接参考. ...

  3. mybatis代码生成器配置文件详解

    mybatis代码生成器配置文件详解 更多详见 http://generator.sturgeon.mopaas.com/index.html http://generator.sturgeon.mo ...

  4. 深入浅出mybatis之启动详解

    深入浅出mybatis之启动详解 MyBatis功能丰富,但使用起来非常简单明了,今天我们来追踪一下它的启动过程. 目录 如何启动MyBatis 如何使用MyBatis MyBatis启动过程 如何启 ...

  5. MyBatis核心配置文件详解

    ------------------------siwuxie095                                     MyBatis 核心配置文件详解         1.核心 ...

  6. 《深入理解mybatis原理2》 Mybatis初始化机制详解

    <深入理解mybatis原理> Mybatis初始化机制详解 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程 ...

  7. BM算法  Boyer-Moore高质量实现代码详解与算法详解

    Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...

  8. ASP.NET MVC 5 学习教程:生成的代码详解

    原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  9. Github-karpathy/char-rnn代码详解

    Github-karpathy/char-rnn代码详解 zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouwan  2016-1-10 ...

  10. 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”

    来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...

随机推荐

  1. Qt ui 文件转换为python代码文件

    python -m PyQt5.uic.pyuic -o ui_xxx.py xxx.ui

  2. CSR,SSR,PreRender原理解密

    CSR.SSR.Prerender 原理全解密   做前端的同学们肯定或多或少听说过CSR,SSR,Prerender这些名词,但是大多肯定只是停留在听说过,了解过,略懂一点,但是,你真的理解这些技术 ...

  3. Day15-static、抽象类、接口、内部类

    static.抽象类.接口.内部类 一.static关键字详解 1.静态的变量/方法 package Demo02; //static public class Student { private s ...

  4. ImmutablePair和ImmutableTriple的使用

    场景 当我们调用某个方法,需要有超过一个值的返回时,我们通常会怎么做,比如现在需要调用方法返回姓名和年龄两个属性(假如姓名为张三,年龄为12). 方式一:使用Map,将Map中分别放入name为key ...

  5. centos7(虚拟机)下安装nginx

    centos7(虚拟机)下安装nginx 安装前准备 gcc yum install gcc-c++ pcre yum install -y pcre pcre-devel zlib yum inst ...

  6. Think in UML 其二

    UML基本元素 参与者 1.参与者位于系统边界之外. 思考参与者究竟是谁时,以下两个问题有助于了解 ·谁对系统有着明确的目标和要求并且主动发出动作? ·系统是为谁服务的? 2.参与者可以非人 功能性需 ...

  7. 20181224《网络攻防技术》Exp7 网络欺诈防范

    20181224<网络攻防技术>Exp7 网络欺诈防范 目录 20181224<网络攻防技术>Exp7 网络欺诈防范 相关知识点总结 ARP Spoofing IP源地址欺骗 ...

  8. 多线程post

    async Task<long> post() { var stopwatch = new Stopwatch(); stopwatch.Start(); var client = new ...

  9. 修改word文档中已有的批注者名称

    前言 https://blog.csdn.net/hyh19962008/article/details/89430548 word中可以通过修改用户的信息实现新建的批注者显示不同的名称,但是对于文档 ...

  10. 如何优化MySQL

    1.MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化? a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率.b. 选择合适的表字段数据类型和存储 ...