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本身提供的缓存机制不佳。