在学校的时候和实习的时候, 自己学的是Hibernate, 但在第一个公司使用的是Mybatis(原名为ibatis,迁移到Google Code后改之),于是乎就开始学下Mybatis。
到现在也用了几个月了, 感觉ORM框架都差不多, 至少重基本的使用上来说, 当成工具来用学习成本不高, 熟悉一周左右就能开始写了。在使用过程中感觉中文的文档或者答案时间都不是太新, 所以参看官方的Doc了。
Mybatis 文档官网:http://mybatis.github.io/mybatis-3/
从个人使用上来说,Mybatis有一点我特别喜欢, 那就是面向结果的查询方式, 不管你的表结构是1:1还是1:n, 只要你最终所需要获得的结果是1:1那么在写映射ResultMap的时候就按结果1:1来写,感觉很方便。
而且Mybatis官网比Hibernate好看很多, 特别简洁, 它的在github pages也是简洁到不行(这个是用Jekyll这个语言开发者的一个模版), 个人是非常喜欢这种风格。
那么从更别人客观的方面来看Mybatis和Hibernate的优劣:
两者相同点
- Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
- Hibernate和MyBatis都支持JDBC和JTA事务处理。
Mybatis优势
- MyBatis可以进行更为细致的SQL优化(但是自己得写大量的SQL语句,不过用它的Dynamic SQL确实灵活),可以减少查询字段(Hibernate也行,就是这样就破坏了Hibernate用HQL的方便)。
- MyBatis相对容易使用(官网文档没几页,只要熟悉所使用数据库的语言),而Hibernate学习成本高挺多的。
- Mybatis有直接的SQL语句可见(分析大表相关的所有select语句),对存储数记录较大的800W条之类的需要分库分表的情况,会比Hibernate来的方便些。
Hibernate优势
- Hibernate的DAO(或者交DAL)层开发比MyBatis简单,Mybatis需要写ModelMapper.xml( 大量SQL语句和映射[如果关联查询的话] ,改起代码来还真是比Hibernate慢很多)
- Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便(Mybatis改个需求要改好多东西)。
- Hibernate数据库移植性很好(用HQL不用熟悉SQL语句都能写,如一个save就保存了),MyBatis的数据库移植性不好
- Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。