Hibernate与MyBatis缓存

1. Hibernate与Mybatis的一级缓存与二级缓存

   Mybatis的一级缓存:
		sqlSession级别的缓存,操作数据库时需要构造sqlSession对象,对象中有一个数据结构(Hashmap)用于存储缓存数据。
		不同的sqlSession对象互不影响。Mybatis默认开启一级缓存
   Mybatis的二级缓存:
		Mapper级别的缓存,多个sqlSession共用一个Mapper,多个sqlSession操作数据库会将数据存储在二级缓存,并且可以共用二级缓存,
		作用域是同一个mapper的namespace的。Mybatis的二级缓存默认是不开启的,需要在配置文件中开启。
		
		
   Hibernate的一级缓存:
		又叫Session缓存,Session是内置的,不能被卸载,是事物范围的缓存,是由Hibernate维护的,用户一般不能操作缓存内容。
		如果想操作缓存内容,必须通过hibernate提供的evict/clear方法操作。在一级缓存中,持久化的每个实例都有唯一的OID.
   Hibernate的二级缓存:
		又叫SessionFactory缓存。基于应用程序级别的缓存,作用在SessionFactory范围内。可以跨多个Session
		SessionFactory的生命周期与应用程序的整个过程对应,所以Hibernate的二级缓存是进程范围或者集群范围的缓存。
                SessionFactory的生命周期与应用程序的整个过程对应,所以Hibernate的二级缓存是进程范围或者集群范围的缓存。
		有可能出现并发问题,因此要采用适当的并发访问策略。Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架,默认下SessionFactory不会启用这个插件。
		
2. 总结:
	
	Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。
	而MyBatis的优势是MyBatis可以进行更为细致的SQL优化,可以减少查询字段,并且容易掌握。
	Hibernate的优势是DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。Hibernate的数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
	Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
		    

  

posted @ 2020-10-28 11:36  Ysoo  Views(440)  Comments(0Edit  收藏  举报