MyBatis和Hibernate有一些共同点,都为持久层框架。但Hibernate能够说是比较老旧的框架,这样讲的缘由是虽然Hibernate有比较好的可移植性,并且对JDBC有较好的封装,便于使用SQL进行操做,但因为MySQL数据库只适用于中小企业,因此Hibernate的使用就有必定的局限性;相比于Hibernate,MyBatis对JDBC的封装程度没那么深,对开发人员的要求较高,但对大型数据库的优化和适配性较强,因此适用于处理大量数据。MyBatis和Hibernate二者的特色及对比,具体的不一样可见以下:程序员
首先从开发速度来比较,Mybatis其实要比Hibernate要更好上手,由于Hibernate是对JDBC的深度封装,而Mybatis就显得更加开放,并且简单易学。这也是Mybatis更加流行的缘由,正由于如此,Mybatis的开发社区近年来也开始活跃起来,下载一些支持开发的工具也较为方便;Mybatis也有本身的代码生成工具,能够生成简单基本的DAO层方法,针对高级查询,Mybatis须要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,尚学堂•百战程序员陈老师指出开发者无需关心SQL的生成与结果映射,能够把更多的精力放在业务流程上。数据库
在系统调优方面,Hibernate能够制定合理的缓存策略,在延迟加载方面处理得较好,有较为合理的Session管理机制,便于批量抓取,同时有合理的O/R映射设计。Mybatis在调优方面,一样有Session机制和二级缓存,同时还能够对SQL进行优化设计;Hibernate通常是查询数据库的全部字段,若是指定字段查询,程序较为繁琐,而Mybatis的SQL是手动编写的,因此能够按需求指定查询的字段。虽然Hibernate具备本身的日志统计,但一样能够经过Log4j进行日志记录。缓存
在对象管理方面,Hibernate 是完整的对象/关系映射解决方案,对象管理功能比较完善,使开发者不用再关注底层数据库系统的细节。也就是说,相对于常见的 JDBC/SQL 持久层方案中须要管理 SQL 语句,Hibernate采用了更天然的面向对象的视角来持久化 Java 应用中的数据。而MyBatis在这方面没有特定的文档说明,但也便于开发者发挥自身的想法来对对象进行管理。app
在缓存机制方面,刚才已经提到过,Hibernate的一级缓存是Session缓存,一级缓存是与Session的生命周期相关的。而它的二级缓存是SessionFactory级的缓存其中可分为内置缓存和外置缓存,其中的内置缓存中存放了关于SessionFactory对象的一些集合属性包含的数据,包括映射元素据及预约SQL语句等;而Mybatis通常也可分为二级缓存,一级缓存是 SqlSession 级别的缓存二级缓存是 mapper 级别的缓存,多个 SqlSession 共享,而它默认状态是开启一级缓存,这样对开发者而言是一种便捷。但也有人指出,Mybatis的缓存机制在必定程度上限制了Mybatis的推广。以上就是对MyBatis和Hibernate二者的特色及对比,固然还有不少方面能够比较,从此会继续与你们分享。
框架