一、相同点

都屏蔽 jdbc api 的底层访问细节,使用我们不用与 jdbc api 打交道,就可以访问数据。

jdbc api 编程流程固定,还将 sql 语句与 java 代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐。

二、映射区别

有时我们可能需要用不正规形式与传统数据库协同工作,

使用成熟的 ORM 框架(如 Hibernate ),有可能很难跟传统数据库很好地协同工作,因为他们尝试将 Java 对象静态地映射到数据库的表上。

而 MyBatis 是将查询的结果与 Java 对象映射起来,这使得 MyBatis 可以很好地与传统数据库协同工作。你可以根据面向对象的模型创建 Java 域对象,执行传统数据库的查询,然后将结果映射到对应的 Java 对象上。

三、SQL 区别

成熟的 ORM 框架(如 Hibernate )鼓励使用实体对象(Entity Objects),和在其底层,自动产生SQL 语句。由于这种 SQL 生成方式,我们有可能不能够利用到数据库的一些特有的特性。Hibernate 允许执行本地 SQL,但是这样会打破持久层和数据库独立的原则。

MyBatis 框架接受 SQL 语句,而不是将其对开发人员隐藏起来。由于 MyBatis 不会产生任何的SQL 语句,所以开发人员就要准备 SQL 语句,这样就可以充分利用数据库特有的特性并且可以准备自定义的查询。

其它:

MyBatis 对存储过程也提供了支持。

将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;提供了自动将实体对象的属性传递给sql语句的参数。

Hibernate的优点:

1、如果你的应用是以面向对象模型,并且想动态生成SQL语句,那么MyBatis可能就不符合你的要求;
2、如果要让你的应用有一个传递性的缓存机制的话(保存父对象时也应该保存关联的子对象),Hibernate会更适合。

Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,ibatis需要我们自己在xml配置文件中写sql语句,hibernate要比ibatis功能负责和强大很多。因为hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。对于一些不太复杂的sql查询,hibernate可以很好帮我们完成,但是,对于特别复杂的查询,hibernate就很难适应了,这时候用ibatis就是不错的选择,因为ibatis还是由我们自己写sql语句。

04-16 13:52
查看更多