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

目录
相关文章
|
18天前
|
缓存 NoSQL Java
Springboot整合缓存
Springboot整合缓存
Springboot整合缓存
|
1月前
|
前端开发 Java API
Springboot整合Swaggar最简单方法
Springboot整合Swaggar最简单方法
28 0
|
3月前
|
Java Spring
springboot常用的注解有哪些,如何使用
【1月更文挑战第12天】springboot常用的注解有哪些,如何使用
15 1
|
9月前
|
Java 测试技术 Spring
SpringBoot配置加载顺序
SpringBoot配置加载顺序
390 0
|
8月前
|
存储 缓存 Java
Springboot中基于注解使用缓存
Springboot中基于注解使用缓存
91 0
|
8月前
|
Java 开发者 Spring
springboot依赖注入的几种方式
springboot依赖注入的几种方式
209 0
|
9月前
|
XML Java 数据库连接
springboot项目中引入mybatis plus
springboot项目中引入mybatis plus
|
XML 安全 Java
《SpringBoot系列九》:SpringBoot自动装配机制原理
《SpringBoot系列九》:SpringBoot自动装配机制原理
186 0
《SpringBoot系列九》:SpringBoot自动装配机制原理
|
10月前
|
监控 IDE Java
SpringBoot实现热部署两种方式!
小宅作为一个Java程序员,在日常的工作中,经常需要修改代码,然后重启服务,在验证代码是否生效。如果是小项目还好,重启速度比较快,等待时间比较短。但是随着项目逐渐变大,并且被拆分成多个服务时,改动一些代码,可能需要重启多个服务才能生效。这样下来就耗费了大量的时间在等待服务重启。 这样肯定是不行的,极大的影响了我的开发效率,那么是否有方式能够实现,修改完代码之后,能够不重启项目呢?
SpringBoot实现热部署两种方式!
|
SQL Java 数据库连接
SpringBoot整合Mybatis(超简单的整合方式)
SpringBoot整合Mybatis(超简单的整合方式)
SpringBoot整合Mybatis(超简单的整合方式)