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语句是否查询了对应的关联表即可。不要输出对象,否则相当于使用了对象,就会进行对应的关联查询。

目录
相关文章
|
4月前
|
Java 容器 Spring
SpringBoot:详解依赖注入和使用配置文件
SpringBoot:详解依赖注入和使用配置文件
142 0
|
3月前
|
Java
手写SpringBoot(四)之bean动态加载
可以看到只有userApplication tomcatWebServer init打印,没有mySpringboot tomcatWebServer init打印,证明spring-boot只加载了用户定义的那个tomcatWebServer
27 0
|
4月前
|
Java 容器 Spring
【SpringBoot:详解依赖注入和使用配置文件】
【SpringBoot:详解依赖注入和使用配置文件】
32 2
|
4月前
|
Java Spring 容器
SpringBoot中bean的生命周期
Spring Boot的Bean生命周期涉及实例化、属性注入、初始化和销毁。在实例化后,Spring通过构造函数或Setter注入属性,然后调用初始化方法(@PostConstruct、InitializingBean接口)。Bean在应用中使用后,当容器关闭时,会调用销毁方法(@PreDestroy、DisposableBean接口)。依赖注入、配置管理、组件扩展和切面编程是其常见应用场景。示例代码展示了如何通过实现BeanNameAware、BeanFactoryAware等接口以及使用@PostConstruct注解来控制Bean的初始化。
69 2
SpringBoot中bean的生命周期
|
4月前
|
缓存 NoSQL Java
Springboot整合缓存
Springboot整合缓存
Springboot整合缓存
|
4月前
|
Java 数据库
SpringBoot数据库连接池常用配置
SpringBoot数据库连接池常用配置
115 0
|
Java 测试技术 Spring
SpringBoot配置加载顺序
SpringBoot配置加载顺序
514 0
|
10月前
|
XML Java 数据库连接
Springboot 中同时使用mybatis注解和springbean-xml配置方式
因为自己新建了一个应用,为了开发的速度,直接选用了springboot,但后来发现大部分读库的代码和同事已有的代码重复, 索性直接拿过来用。但问题是我已有的代码是通过纯注解的方式使用mybatis,同事代码是spring+xml来使用mybatis,经过几天的探索,发现一种两种方式结合使用的方法。
97 0
|
XML 安全 Java
《SpringBoot系列九》:SpringBoot自动装配机制原理
《SpringBoot系列九》:SpringBoot自动装配机制原理
217 0
《SpringBoot系列九》:SpringBoot自动装配机制原理
|
SQL XML Java
简单理解springboot的依赖注入
依赖注入,Dependency Injection,简称DI,是spring中的核心技术,此技术贯穿Spring全局,是必须要熟练掌握的知识点。在本文中,我们将要深入研究spring中的IOC和DI,理解核心思想,并学会如何在spring boot中使用基于java和注解的方式正确使用DI来创建spring应用程序。控制反转 IOC要理解DI,首先需要理解spring的核心思想之一,控制反转(In
1914 0
简单理解springboot的依赖注入