阅读 51

mybatis延迟加载是为什么(mybatis延迟加载的原理)

一、Mybatis 延迟加载策略

1.1 何为延迟加载?

延迟加载:就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载。

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

坏处: 因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗时间,所以可能造成用户等待时间变长,造成用户体验下降。

1.2 实现需求:

需求:查询账户(Account)信息并且关联查询用户(User)信息。如果先查询账户(Account)信息即可满足要求,当我们需要查询用户(User)信息时再查询用户(User)信息。把对用户(User)信息的按需去查询就是延迟加载。

1.3 使用 assocation 实现延迟加载:

1.3.1 账户的持久层 DAO 接口:

1.3.2 账户的持久层映射文件:

1.3.3 用户的持久层接口和映射文件:

1.3.4 开启 Mybatis 的延迟加载策略:

我们需要在 Mybatis 的配置文件 SqlMapConfig.xml 文件中添加延迟加载的配置:

1.3.5 编写测试方法

1.4 使用 Collection 实现延迟加载:

1.4.1 在 User 实体类中加入 List属性

1.4.2 编写用户和账户持久层接口的方法

1.4.3 编写用户持久层映射配置:

1.4.4 编写账户持久层映射配置:

1.4.5 编写测试方法

二、Mybatis 缓存

2.1 Mybatis 一级缓存:一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。

2.2 Mybatis 二级缓存:二级缓存是 mapper 映射级别的缓存,多个SqlSession去操作同一个 Mapper 映射的 sql 语句,多个 SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。

2.2.1 二级缓存的开启与关闭:

2.2.1.1 第一步:在 SqlMapConfig.xml 文件开启二级缓存

2.2.1.2 第二步:配置相关的 Mapper 映射文件

2.2.1.3 第三步:配置 statement 上面的 useCache 属性

2.2.2 二级缓存注意事项:当我们在使用二级缓存时,所缓存的类一定要实现 java.io.Serializable 接口,这样就可以使用序列化方式来保存对象。

第3章 Mybatis 注解开发

3.1 mybatis 的常用注解说明:

@Insert:实现新增

@Update:实现更新

@Delete:实现删除

@Select:实现查询

@Result:实现结果集封装

@Results:可以与@Result 一起使用,封装多个结果集

@ResultMap:实现引用

@Results 定义的封装

@One:实现一对一结果集封装

@Many:实现一对多结果集封装

@SelectProvider: 实现动态 SQL 映射

@CacheNamespace:实现注解二级缓存的使用

3.2 使用 Mybatis 注解实现基本 CRUD:

3.2.1 编写实体类

3.2.2 使用注解方式开发持久层接口:

3.2.2.1 查询所有用户:

3.2.2.2 根据id查询一个用户:

3.2.2.3 保存和更新操作:

3.2.2.4 删除操作和使用聚合函数

3.2.2.4 模糊查询操作:

3.2.3 编写 SqlMapConfig 配置文件

3.2.4 编写测试方法

3.3 使用注解实现复杂关系映射开发:

3.3.1 复杂关系映射的注解说明:

3.3.2 使用注解实现一对一复杂关系映射及延迟加载:

需求: 加载账户信息时并且加载该账户的用户信息,根据情况可实现延迟加载。(注解方式实现)

3.3.2.1 添加 User 实体类及 Account 实体类:

3.3.2.2 添加账户的持久层接口并使用注解配置

3.3.2.3 添加用户的持久层接口并使用注解配置:

3.3.2.4 测试一对一关联及延迟加载

3.3.3 使用注解实现一对多复杂关系映射:

需求: 查询用户信息时,也要查询他的账户列表。使用注解方式实现。

分析: 一个用户具有多个账户信息,所以形成了用户(User)与账户(Account)之间的一对多关系。

3.3.3.1 User 实体类加入 List

3.3.3.2 编写用户的持久层接口并使用注解配置

@Many:

select 属性:代表将要执行的 sql 语句

fetchType 属性:代表加载方式,一般如果要延迟加载都设置为 LAZY 的值

3.3.3.3 编写账户的持久层接口并使用注解配置

3.3.3.4 添加测试方法

文章分类
百科问答
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐