- Hibernate是全自动,mybatis是半自动
a. Hibernate可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构自动生成sql。
b. Mybatis只有基本的字段映射,对象数据及关系需手动写sql来实现与管理。 - Hibernate数据库移植性远大于mybatis
a. hibernate通过强大的映射结构和hql语法,降低了与数据库的耦合性
b. mybatis需要手写sql,如果sql不具有通用性或与具体数据库特性相关,移植性则会降低很多。 - Hibernate拥有完整的日志系统,mybatis则欠缺一些
a. hibernate日志涉及sql记录、关系异常、优化警告、缓存提示、脏数据警告等
b. mybatis除了基本记录功能外,功能相对薄弱 - Mybatis需要关心更多细节
a. hibernate配置复杂,学习成本高
b. mybatis模式上与jdbc很像,容易上手,但是细节的忽略容易产生bug,开发速度快,但出稳定版本慢 - sql直接优化上,mybatis方便得多
a. hibernate许多sql自动生成,虽有hql,但若与联表复杂查询,只能使用原生sql, 此时开发模式又需转变,不太方便
b. mybatis较为小巧方便,灵活性好。
jdbc与二者的联系与区别
- 从层次上看
- a. jdbc是较底层的持久层操作方式
- b. hibernate和mybatis则是在JDBC的基础上进行封装
- 从功能上看
- a. jdbc就是
- i. 简单的建立数据库连接
- ii. 创建statement
- iii. 将sql语句传给statement去执行
- iv. 又返回结果的查询语句,将结果放入ResultSet中
- v. 通过对ResultSet对象的遍历操作来获取数据
- b.Hibernate将数据库中的数据表映射为持久层的Java对象,对sql语句进行修改和优化比较困难
- c. Mybatis将sql语句的输入参数和输出参数映射为Java对象,优化和修改都很方便
- a. jdbc就是
- 从使用上看
- a. JDBC:进行底层编程,对性能要求极高的
- b. Hibernate:对数据库进行完整性控制
- c. Mybatis:灵活使用sql语句