Hibernate对数据库提供了较为完整的封装不需要手写SQL语句,自动生成、自动执行持久层框架,开源的对象关系映射对JDBC的进一步封装。
Mybatis着力点在于JAVA对象与SQL之间的映射关系需偠编写sql语句,半自动需要注意的细节更多,但是更有益于sql的优化移植性弱,缓存机制不如hibernate
(1)不需要编写SQL语句
(2)Hibernate屏蔽了数据库的差异,增强了对数据库的可移植性(使用Hibernate标准开发更换数据库时,只需要配置相应的配置文件即可)
(3)Hibernate实现了透明持久化当保存一个对潒时,这个对象不需要继承Hibernate中的任何类、实现任何接口只是个纯粹的单纯对象——POJO对象(没有继承第三方框架的任何类和实现它的任何接口)
(4)Hibernate是一个没有侵入性的轻量级框架
(6)有更好的mybatis一二级缓存存机制,可以使用第三方缓存
Hibernate一级缓存与mybatis一二级缓存存之间的区别
1.session提供了一级缓存的功能默认总是有效的,应用保存持久化实体、修改持久化实体时session不会立即将改变提交数据库,而是缓存在当前session除非顯示调用了session的flush()方法或通过close()方法关闭session。通过一级缓存可以减少应用程序与数据库的交互,提高数据库访问性能
2.SessionFactory级别的mybatis一二级缓存存是全局性的,所有的Session共享这个mybatis一二级缓存存不过其默认关闭,需要显示开启并制定需要哪种实现类一旦开启并指定,SessionFactory就会缓存访问过的该實体类每个对象除非缓存数据超过制定缓存空间。
一级缓存和mybatis一二级缓存存都是对整个实体进行缓存不会缓存普通属性,可以使用查詢缓存进行属性缓存
查询缓存:将HQL或SQL语句以及他们的查询结果作为键值对进行缓存。默认关闭显示开启。