1.Why?
为什么要使用MyBatis?
已经有Hibernate了,为什么还要使用MyBatis?
MyBatis到底有什么优势呢?
2.What?
①MyBatis前身:iBatis——"Internet"和"abatis"的组合,是一个基于Java的持久化层框架。
②iBatis最早是由Apache负责维护的,后来迁移到了Google Code,并改名MyBatis。代码于2013年11月迁移到了GitHub。
https://github.com/mybatis/mybatis-3/releases
③MyBatis优势
[1]轻巧:Hibernate核心包4.4M,MyBatis核心包只有698K。
[2]高效:比Hibernate运行效率高。
[3]解耦:SQL语句与Java代码相分离,易于单独维护与优化。
④MyBatis缺陷
[1]SQL工作量很大,尤其是字段多、关联表多时,更是如此。
[2]SQL依赖于数据库,导致数据库移植性差。
[3]由于XML里标签id必须唯一,导致Dao中的方法不支持重载。
[4]字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于SQL。
[5]不支持级联更新、级联删除。
⑤相关技术比较
[1]效率:JDBC>MyBatis>Hibernate
[2]易用:Hibernate>MyBatis>JDBC
3.How?
将Hibernate和MyBatis进行对比,按照对应结构对比学习。
Hibernate | MyBatis | |
核心工厂 | SessionFactory | SqlSessionFactory |
数据库会话 | Session | SqlSession |
总体配置文件 | hibernate.cfg.xml | mybatis-config.xml |
具体配置文件 | User.hbm.xml | UserMapper.xml |
接口 | UserDao | UserMapper |
实现类 | UserDaoImpl | 由框架提供 |
自动生成方向 | 正向工程 | 逆向工程 |
一级/二级缓存 | 支持 | 支持 |
关联关系 | 重量级 | 轻量级 |