首页 > 其他分享 >MyBatis 延迟加载代码详解

MyBatis 延迟加载代码详解

时间:2022-11-18 15:14:32浏览次数:51  
标签:Console 代码 查询 详解 MyBatis 延迟 log4j 加载

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

那么当业务需求需要用到的数据来源于多张表的时候,单表查询无法解决,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 语句

标签:Console,代码,查询,详解,MyBatis,延迟,log4j,加载
From: https://www.cnblogs.com/qian-fen/p/16903259.html

相关文章

  • 加密狗逻辑:判断权限,延时加载遮罩层
    之前新人做的加密狗显示水印遮罩的功能,一直有问题,逻辑还找不出来哪有问题,自己简单写了个demo,照着套:<!doctypehtml><htmllang="en"translate="no"><head><met......
  • Day8-4 static关键字详解
    static关键字详解packagecom.oop.demo07;​//staticpublicclassStudent{privatestaticintage;//静态变量privatedoublescore;//非静态变量......
  • mybatis的代码生成器
    mybatis的代码生成器packagecom.atguigu.demo;importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.annotation.IdType;importcom......
  • 前端懒加载和预加载
    懒加载和预加载的目的都是为了提高用户的体验,二者行为是相反的,一个是延迟加载,另一个是提前加载。懒加载对缓解服务器压力有一定作用,预加载则会增长服务器前端压力缓存。懒......
  • Springboot项目java -jar 启动jar包参数详解
    Windows1、指定端口java-jarspringboot.jar--server.port=81812、指定配置文件java-jarspringboot.jar--spring.profiles.active=dev3、同时指定端口与配置文件ja......
  • 详解webpack构建优化
    当项目越来越复杂时,会面临着构建速度慢和构建出来的文件体积大的问题。webapck构建优化对于大项目是必须要考虑的一件事,下面我们就从速度和体积两方面来探讨构建优化的策略......
  • 53:双分支选择结构_三元运算符的使用详解
    ###双分支选择结构双分支结构的语法格式如下:if 条件表达式:   语句1/语句块1else:   语句2/语句块2【操作】输入一个数字,小于10,则打印该数字;大于10,......
  • 52:单分支选择结构_条件表达式详解
    ###选择结构选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分支、双分支、多分支。流程图如下:      但分支结构     ......
  • IDEA中使用 SVN 操作详解
    目录IDEA配置SVN拉取代码IDEA+SVN将文件回退到历史版本IDEA更新SVN代码解决冲突IDEA+SVN与资源库同步IDEA为SVN打分支或标签IDEA忽略提交文件到SVN......
  • mybatis中${}的用法
    MyBatis中${}的用法表t_user有如下4个字段:id 、name、 age 、 consume_amt如果需求是有时候是要age的平均数,有的是consume_amt的平均数,那么可以把列表传到SQL中查询......