SpringBoot延迟加载

简介: CSS实现元素吸顶功能,比较简单的一种实现方式

需求:

我们查询所有的员工列表,然后根据员工的部门编号查询对应的部门信息

如何解决

方式一:连接查询。一条SQL语句查询出所有的信息

方式二: 延迟加载。关联表的数据只有在真正使用的时候才去查询,不使用不查询。

优点

先从单表查询,需要时再从关联表去关联查询,大大提高了数据库的性能,因为单表查询要比关联查询多张表速度要快。

配置方法

延迟加载多用在关联对象和集合中,association和collection具备设置延迟加载的功能

设置全局开关

在mybatis-config.xml中打开延迟加载的开关。配置完成后,所有的association和collection元素都生效

<settings><!--开启全局的懒加载--><settingname="lazyLoadingEnabled"value="true"/><!--是否立即加载,其实不用配置,默认为false--><settingname="aggressiveLazyLoading"value="falsec"/></settings>



lazyLoadingEnabled MyBatis是否开启延迟加载的总开关,当开启时,所有关联对象都会延迟加载。特定关联关系中,可通过设置fetchType属性来覆盖该项的开关状态 true /false false
aggressiveLazyLoading 开启时,任一方法的调用都会加载该对象的所有延迟加载属性。否则,每个延迟加载属性会按需加载 true  /false false
在 3.4.1 及之前的版本默认值为 true

配置单项开关

在指定的association和collection元素中配置fetchType属性。该属性配置将覆盖全局延迟设置.

eager 立即加载
lazy 延迟加载


代码实现

用户类及账户类

publicclassUserimplementsSerializable{
privateIntegerid;
privateStringusername;
privateDatebirthday;
privateStringsex;
privateStringaddress;
privateList<Account>accountList;
get和set方法省略.....      
}
publicclassAccountimplementsSerializable{
privateIntegerid;
privateIntegeruid;
privateDoublemoney;
get和set方法省略.....      
}

Mapper.java

publicinterfaceUserMapper {
/*** 查询所有的用户*/List<User>findAll();
}
publicinterfaceAccountMapper {
/*** 根据用户ID查询账户信息* @return*/List<Account>findAllByUid(Integeruid);
}

Mapper.xml文件

userMapper.xml

<resultMapid="userAccountMap"type="com.example.domain.User"><idproperty="id"column="id"/><resultproperty="username"column="username"/><resultproperty="birthday"column="birthday"/><resultproperty="sex"column="sex"/><resultproperty="address"column="address"/><collectionproperty="accountList"ofType="com.example.domain.Account"column="id"select="com.example.dao.AccountDao.findAllByUid"/></resultMap><selectid="findAll"resultMap="userAccountMap">    SELECT * FROM USER;
</select>

accountMapper.xml

<selectid="findAllByUid"resultType="com.example.domain.Account">    SELECT * FROM account WHERE uid = #{uid};
</select>


注意:

通过懒加载查询完数据后,只需要确定SQL语句是否查询了对应的关联表即可。不要输出对象,否则相当于使用了对象,就会进行对应的关联查询。

目录
相关文章
|
5月前
|
Java 容器 Spring
SpringBoot:详解依赖注入和使用配置文件
SpringBoot:详解依赖注入和使用配置文件
146 0
|
4月前
|
缓存 Java 开发者
SpringBoot自动装配原理
SpringBoot自动装配原理
53 1
|
4月前
|
Java
手写SpringBoot(四)之bean动态加载
可以看到只有userApplication tomcatWebServer init打印,没有mySpringboot tomcatWebServer init打印,证明spring-boot只加载了用户定义的那个tomcatWebServer
28 0
|
5月前
|
Java 容器 Spring
【SpringBoot:详解依赖注入和使用配置文件】
【SpringBoot:详解依赖注入和使用配置文件】
37 2
|
XML Java 数据格式
如何正确控制springboot中bean的加载顺序总结
springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题。在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功能。 在一般业务场景,可能你不大关心一个bean是如何被注册进spring容器的。只需要把需要注册进容器的bean声明为@Component即可,spring会自动扫描到这个Bean完成初始化并加载到spring上下文容器。
|
Java 测试技术 Spring
SpringBoot配置加载顺序
SpringBoot配置加载顺序
527 0
|
11月前
|
XML Java 数据库连接
Springboot 中同时使用mybatis注解和springbean-xml配置方式
因为自己新建了一个应用,为了开发的速度,直接选用了springboot,但后来发现大部分读库的代码和同事已有的代码重复, 索性直接拿过来用。但问题是我已有的代码是通过纯注解的方式使用mybatis,同事代码是spring+xml来使用mybatis,经过几天的探索,发现一种两种方式结合使用的方法。
101 0
|
XML 安全 Java
《SpringBoot系列九》:SpringBoot自动装配机制原理
《SpringBoot系列九》:SpringBoot自动装配机制原理
220 0
《SpringBoot系列九》:SpringBoot自动装配机制原理
|
存储 缓存 Java
Springboot中基于注解使用缓存
Springboot中基于注解使用缓存
130 0
|
Java 开发者 Spring
springboot依赖注入的几种方式
springboot依赖注入的几种方式
366 0
下一篇
无影云桌面