课程复习
一对一查询
上面的id对应的应该是property
resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射
如果没有查询结果的特殊要求建议使用resultType
resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊要求,使用resultMap可以完成将关联查询映射pojo的属性中
resultMap可以实现延迟加载,resultType无法实现延迟加载
一对多查询
ResultMap总结
延迟加载
什么是延迟加载
先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度快
打开延迟加载开关
延迟加载的mapper.xml
测试
查询缓存
什么是查询缓存
提供查询缓存,用于减轻数据压力,提高数据库性能。提供一级缓存和二级缓存。
一级缓存是sqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
二级缓存是mapper级别的缓存,多个sqlSession去操作同一个Mapper的sql语句,多个sqlSession可以共用二级缓存,二级缓存是跨sqlSession的。
一级缓存
mybatis默认支持一级缓存
二级缓存
调用pojo类实现序列化接口
为了将缓存数据取出执行反序列化操作,因为二级缓存数据
useCache配置
刷新缓存(就是清空缓存)
mybatis整合ehcache
分布缓存
我们系统为了提高系统并发性能,一般对系统进行分布式部署(集群部署方式)
不使用分布缓存,缓存的数据在各服务单独存储,不发便系统开发。所以要使用分布式缓存对缓存数据进行集中管理。
mybatis无法实现分布式,需要和其他分布式缓存框架进行整合。
整合方法
mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,实现cache接口开发即可。mybatis和ehcache整合,mybatis和ehcache整合包中提供了一个cache接口的实现类。
加入ehcache包
整合ehcache:type改为对应实现类的路径
加入ehcache的配置文件
二级缓存的应用场景
spring和mybatis整合
整合思路
需要spring通过单例方式管理SqlSessionFactory。
spring和mybatis整合生成代理对象,使用sqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)。
持久层的mapper都需要由spring进行管理