[toc]
Mybatis中的延迟加载
问题:在一对多中,当我们有一个用户,它有100个用户。
在查询用户的时候,要不要把关联的账户查出来?
在查询账户的时候,要不要把关联的用户查出来?
-
什么是延迟加载
- 在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
-
什么是立即加载
- 不管用不用,只要一调用方法,马上发起查询。
-
在对应的四种表关系中:一对多,多对一,一对一,多对多
- 一对多,多对多 :通常情况采用--延迟加载
- 多对一,一对一 :通常情况采用--立即加载
案例1:一对一延迟加载
案例2:一对多延迟加载
Mybatis中的缓存
-
什么是缓存
- 存在于内存中的临时数据
-
为什么使用缓存
- 减少和数据库的交互次数,提高执行效率
-
什么样的数据能使用缓存,什么样的数据不可以
- 适用于缓存:
- 经常查询并且不经常改变的。
- 数据的正确与否对最终结果影响很大的。
- 例如:商品的库存,银行的汇率,股市的牌价。
- 适用于缓存:
-
Mybatis中的一级缓存和二级缓存
-
一级缓存:
它指的是Mybatis中SqlSession对象的缓存。
当我们执行查询之后,查询的结果会同时存入到sqlSession为我们提供一块区域中。
该区域的结构是一个Map。当我们再次查询同样的数据,Mybatis会先去SqlSession中
查询是否有,有的话直接拿出来用。
当SqlSession对象消失时,Mybatis的一级缓存也就消失了。
-
一级缓存:
-
二级缓存:
它指的是Mybatis中SqlSessionFactory对象的缓存。有同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
- 二级缓存的使用步骤:
- 让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
二级缓存:
- 让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
- 让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
- 让当前的操作支持二级缓存(在select标签中配置)
Mybatis中的注解开发
- 单表CRUD操作(代理Dao方式)
- 多表查询操作
- 缓存的配置
- 一级缓存不需要配置,自动开启
- xml文件配置
- 注解配置