延迟/立即加载
延迟加载
- 在真正使用数据时才发起查询,不用的时候不查询;按需求加载(懒加载LAZY)
立即加载
- 不管用不用,只要一调用,马上发起查询(EAGER);
对应四种表关系: - 一对多或者多对多:采用延迟加载
- 一对一或者多对一:采用立即加载
Mybatis中的缓存机制
- 缓存:存在于内存中的临时数据
- 作用:减少与数据库的交互,提高执行效率
- 适用于缓存:经常查询且不经常改变的;数据的正确与否对最终结果影响不大的数据。
- 不适用于缓存:经常变化的数据;确保数据正确性的(商品库存、银行汇率、股市牌价等)数据。
- 一级缓存:
- 它指的是Mybatis中SQLSession对象的缓存。当我们执行查询之后,查询的结果会同时存入到SQLSession为我们提供的一块区域中;该区域结构是一个Map,当我们再次查询同样的数据时,Mybatis会先去SQLSession中查询是否有该数据,有的话直接拿出来用,没有则查询数据库并存储到SQLSession中。
- 一级缓存存储的是对象,多次查询它指向的是同一个对象并且当Sqlsession消失时,缓存也消失
两次查询的对象地址是一样的
只执行了一次sql语句,第二次是从SQLSession缓存中取出来的
当sqlsession对象消失后:进行两次查询;并且两次查询两个对象
- 二级缓存:
- Mybatis中SqlsessionFactory对象的缓存。由同一个SQLSessionFactory对象创建的SQLSession共享其缓存。
二级缓存中存放的内容是数据而不是对象;谁来查询他就将创建一个新的对象将该数据填充进去,这样就不再是同一个对象了 - 使用步骤:
- 第一步:让Mybatis框架支持二级缓存(在SQLMapConfig.xml中配置)
- 第二步:让当前的映射文件支持二级缓存(在IUserdao.xml中配置)
- 第三步:让当前的操作支持二级缓存(在select标签中配置)
- 第一步:让Mybatis框架支持二级缓存(在SQLMapConfig.xml中配置)
- Mybatis中SqlsessionFactory对象的缓存。由同一个SQLSessionFactory对象创建的SQLSession共享其缓存。
Mybatis的注解开发
注意:使用注解开发就不能有采用配置方式的XML配置文件,不然会报错(因为Mybatis不知道以哪个为准)
- 环境搭建
pom文件
SQLMapConfig.xml
常用注解
-
@Select
-
@Insert
-
@Update
-
@Delete
-
@Results/@Result:建立实体类属性和数据库表中字段的对应关系
查询结果数据封装入对象
- id=“userMap”:此结果对象集合的唯一标识
- id=true:结果集合中的对象的唯一标识
-
MyBatis基于注解的二级缓存使用
在Dao/Mapper接口上添加@CacheNamespace(blocking = true)注解