前言

现有两张表emp、dept如下;
当我们想要查询职员的所有信息时,需要涉及两张表;
第一种方法——多表连接查询
使用sql语句:“select * from emp left join dept on emp.deptno=dept.deptno;”
但这仅仅是一种最普通的方法;
如果信息量很大的时候,这种查询方法无疑是很耗时的;
且我们可能不需要所有信息,在这个时候,程序员就增加了工作量。
第二种方法——分步查询
先查寻所有的职员信息:“select * from emp;”
如果需要部门信息;再根据上一步查询的deptno查询部门信息查询部门信息:“select * from dept where no=dept.deptno”
以上两个步骤都是单表查询;执行效率比多表查询高得多
如果不需要部门信息,则不需要执行第二部,减少了额外的操作。
emp:

dept:

什么是懒加载

前言里说到的第二种分步操作的方式就是mybatis懒加载。
懒加载通俗的说就是分步加载、按需加载;需要的时候再去操作
在mybatis中,resultMap可以实现高级映射;assication、collection具备延迟加载功能

mybatis实现懒加载

对应表创建对应的类

dept表对应类Department

package com.pojo;import lombok.Data;import java.io.Serializable;/*** @author Una* @date 2022/8/19 13:40* @description:*/@Data
public class Department implements Serializable {private Integer deptNo;private String deptName;private String deptLoc;public Department() {}public Department(Integer deptNo, String deptName, String deptLoc) {this.deptNo = deptNo;this.deptName = deptName;this.deptLoc = deptLoc;}
}

emp对应User类
在User中写入属性department,对应dept表的Department

package com.pojo;import lombok.Data;import java.io.Serializable;
import java.util.Date;/*** @author Una* @date 2022/8/19 13:36* @description:*/@Data
public class User implements Serializable {private Integer empNo;private String empName;private String empJob;private Integer empMgr;private Date empDate;private Double empSalary;private Double empComm;private Integer deptNo;private Department department;public User() {}public User(Integer empNo, String empName, String empJob, Integer empMgr, Date empDate, Double empSalary, Double empComm, Integer deptNo, Department department) {this.empNo = empNo;this.empName = empName;this.empJob = empJob;this.empMgr = empMgr;this.empDate = empDate;this.empSalary = empSalary;this.empComm = empComm;this.deptNo = deptNo;this.department = department;}
}

编写接口类

getUser()方法用于第一步查询
getAll(Integer id)方法用于进一步查询

package com.mapper;import com.pojo.User;import java.util.List;/*** @author Una* @date 2022/8/19 13:45* @description:*/public interface UserMapper {public List<User> getUser();public List<Department> getAll(Integer id);}

编写对应的映射文件

值得注意的是;对department进行映射时;使用关键字<assocication>;使用<fetchType=“lazy”>指定加载方式;在select语言时;使用#{属性名}

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.mapper.UserMapper"><resultMap id="userMap" type="User"><id property="empNo" column="empno" javaType="java.lang.Integer"/><result property="empName" column="empname" javaType="java.lang.String"/><result property="empJob" column="job" javaType="java.lang.String"/><result property="empMgr" column="mgr" javaType="java.lang.Integer"/><result property="empSalary" column="salary" javaType="java.lang.Double"/><result property="empComm" column="comm" javaType="java.lang.Double"/><result property="deptNo" column="deptno" javaType="java.lang.Integer"/><association property="department" column="deptno" select="getAll" fetchType="lazy"/></resultMap><resultMap id="deptMap" type="Department"><id property="deptNo" column="deptno" javaType="java.lang.Integer"/><result property="deptName" column="dname" javaType="java.lang.String"/><result property="deptLoc" column="loc" javaType="java.lang.String"/></resultMap><select id="getUser" resultMap="userMap">select * from emp;</select><select id="getAll" resultMap="deptMap" parameterType="java.lang.Integer">select * from dept where deptno=#{id}</select>
</mapper>

在配置文件中开启懒加载;关闭实时加载

<settings><setting name="logImpl" value="LOG4J"/><!--        开启懒加载(开启延迟加载)--><setting name="lazyLoadingEnabled" value="true"/><!--        关闭实时加载--><setting name="aggressiveLazyLoading" value="false"/><!--        开启二级缓存--><setting name="cacheEnabled" value="true"/></settings>

结果

一:

二:

Mybatis懒加载相关推荐

  1. mybatis ------ 懒加载(八)

    分析: 1.需求:查询订单信息,有时候需要关联查出用户信息. 第一种方法:我们直接关联查询出所有订单和用户的信息 select * from orders o ,user u where o.user ...

  2. mybatis懒加载与缓存

    在接触mybatis时我们会学到接触小知识,关于懒加载的一些知识点还是需要亲自去测试一下才能加深理解; mybatis懒加载与缓存 mybatis对缓存的支持 mybatis一级缓存 mybatis的 ...

  3. Mybatis懒加载机制

    懒加载会按需要是否执行关联查询语句.如果用到了关联查询语句的信息,就需要执行关联查询,否则就只执行主查询 1.在mybatis的全局配置文件中加入两个属性: <settings><s ...

  4. mybatis -- 懒加载原理

    目录 测试代码 调试代码 为什么BlogResp2是代理对象呢? 什么时候创建的代理对象呢? 让我们看一下源码 懒加载的赋值流程 懒加载失效的原因 blogResp2的代理对象是如何构建lazyLoa ...

  5. Mybatis处理表关联(懒加载)

    1.关系型数据库? 数据库中的表对象之间是有关系的. 一对一,一对多,多对多. ORM映射.数据库表映射到实体对象. 实体与实体之间是有关系的. 一对多的关系. 比如商品分类表与商品表之间的关系,就是 ...

  6. MyBatis缓存和懒加载

    MyBatis一级缓存,默认是开启的 同一个sqlsession会话,执行相对的SQL操作,那么MyBatis会使用一级缓存的数据,而不会去数据库中执行SQL语句. 除非对数据有了增删改的操作,那么M ...

  7. 14、mybatis多表关联查询 association定义关联对象封装规则及懒加载

    文章目录 1.使用association单步查询 1).EmployeeMapper 2).EmployeeMapper.xml 3).Test 2.使用association进行分步查询 4).De ...

  8. lombok中的@Data注解与MyBatis的懒加载机制冲突解决

    使用@Data注解与mybatis的懒加载机制实现一对一关系查询时,发现怎么配置都无效,就是一下都查出来了,根本没有懒加载 1.application.yml配置文件配置如下: # mybatis 配 ...

  9. free mybatis 不生效_关于 Mybatis 设置懒加载无效的问题

    看了 mybatis 的教程,讲到关于mybatis 的懒加载的设置: 只需要在 mybatis 的配置文件中设置两个属性就可以了: 但是经过测试之后发现是无效的,经过一番折腾,发现是因为我在测试的时 ...

最新文章

  1. jwt token长度限制_ASP.NET Core Web Api之JWT(一)
  2. Java知多少(完结篇)
  3. application.properties引用其他文件_金橙智能 | C语言头文件组织与包含原则,你知道吗?...
  4. 冲击双一流:燕山大学到底实力如何?
  5. php中命名空间、面向对象、访问控制、接口
  6. java lambda表达式详解_Java8新特性:Lambda表达式详解
  7. 数据库冷备份和热备份
  8. nginx一键安装脚本
  9. php设置加载动画,如何用CSS3制作页面圆圈加载动画(附代码)
  10. java web fileupload_javaweb 文件上传(fileupload) 下载
  11. 利用条件随机场模型进行中文分词
  12. 企业财务制度二--会计科目名称和编号(一)1291 分期收款发出商品(转载)
  13. 大话微服务:(二)对于业务如何划分微服务,即微服务的颗粒度,又称业务边界
  14. 分析称惠普赶走前任CEO赫德堪比苹果赶走乔布斯
  15. 电脑使用android手机摄像头,电脑怎么使用安卓手机摄像头 电脑使用手机摄像头的方法-电脑教程...
  16. markdown 编辑器实现双屏同步滚动
  17. NLP自然语言处理学习
  18. 单片机应用系统设计技术——基于51单片机篮球计时计分器的设计
  19. 雅虎财经和新浪财经股票API,中国A股实时和历史数据API获取
  20. 整数序列中的众数和中位数

热门文章

  1. C++使用opencv实现单目测距
  2. 使用芯片和贴片天线解决多频带射频问题
  3. 【mmdetection源码解读(一)】骨干网络--ResNet
  4. Vi键盘图片可视化教程
  5. 7-108 将x的平方赋值给y
  6. 行我所行,爱我所爱,追求自我。
  7. nvm 的安装安装 node 以及 nvm 操作命令 yarn 的安装
  8. App Store创赢艺术—— Apple 开发的赚钱机密
  9. JS高级-ES6语法汇总及案例练习
  10. 彻底关闭Windows10_21h1任务栏里的资讯和兴趣广告