1. Mybatis 简介
Mybatis 是一款优秀的持久层框架, 支持定制化sql , 存储过程以及结果集映射. 笔者认为Mybatis有三大核心特性:
- sql分离: sql 写在xml文件中, 与java 代码分离, 降低了sql 与java 代码的耦合度, 便于维护和升级
- 结果集映射: Mybatis 的结果集映射是非常强大的, 可以将sql查询结果自动解析为任意对象, 而不仅仅局限于po 对象.
- 动态sql: 提供了一组标签以支持不同条件的sql 拼接.
2. 对比JDBC & Hibernate
对比JDBC 和 Hibernate, Mybatis 算是一个半自动化的ORM 框架. 既让开发人员拥有sql 编写和优化的全部权限, 又解决了繁琐且效率低的传参和结果集解析操作.
2.1 对比JDBC
jdbc 是java操作数据库最底层的实现, 对比Mybatis 缺点较多:
- 耦合性高: sql 夹杂在java 代码中, 耦合性高, 不便于维护和升级, 硬编码内伤
- 手工进行参数赋值, 编程繁琐
- 对查询结果进行手工解析, 开发效率极低
2.2 对比Hibernate
hibernate 是业界大名鼎鼎的全自动化全映射ORM框架, 意在消除sql 限制, 让不会写sql的开发人员也可以完成数据库模块儿的开发. 拥有独立的hql 语法进行查询. 对比Mybatis 有以下劣势:
- 内部自动生成sql , 不便于对sql 进行优化
- 虽然hql 支持自定义sql, 但是学习成本高. 而且对于复杂sql 而已, hql 也并不能完成支持
- 全字段映射, 会查询数据库的全部字段, 性能较低. 想查询部分字段, 方式比较繁琐
- 结果集封装只能是po 实体, 对普通vo 不能进行自动封装
Jdbc | Mybatis | Hibernate | |
---|---|---|---|
自动性 | 无 | 半自动 | 自动 |
单表API | 无 | 无 | 提供丰富的API |
sql | 原生sql | 原生sql | 原生sql 和 HQL |
结果集映射 | 无 | 强大的结果集映射, 可映射POJO | 只能映射 PO |
关系映射 | 无 | 仅体现在查询时的结果集映射中 | 可对关链表做级联操作 |
缓存 | 无 | 一二级缓存 | 一二级缓存 |
阅读sql | sql有格式,样式优美,易读 | sql 采用字符串拼接, 难读, 难维护 | |
学习成本 | 低 | 中 | 高 |
掌握程度 | 易 | 中 | 难 |
3. Mybatis 缺点
- 原生Mybatis 不支持分页, 需要借助于分页插件来实现
- Mybatis 的单表操作比较麻烦, 需要手写sql. 影响开发效率.
- 开发工具在Mapper 接口和xml文件直接跳转,比较麻烦. 可借助idea插件mybatisX .