ibatis和Hibernate的比较浅析

1、Hibernate

HIbernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操作数据库,Hibernate可以应用在任何使用JDBC的场合,即可以在Java的客户端程序使用,也可以再Servlet、Jsp的weby应用中使用,最具有革命意义的是,Hibernate可以再应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

1.1、基本功能

Hibernate作为数据持久化的中间件,足以让数据在业务逻辑层开发中去冬眠,它通过扩展标记语言(XML)实现了类和数据表之间的映射,使得程序员在业务逻辑的开发中面向数据库而改为面向对象,使得整个项目开发分工更加明确,提高了程序开发的效率。

Configuration对象:

Configuration类负责管理Hibernate的配置信息,Hibernate运行时需要获取一些底层实现的基本信息,其中几个关键属性包括:

  • 数据库URL
  • 数据库用户
  • 数据库用户密码
  • 数据库JDBC驱动类
  • 数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。

以上信息一般情况下由hibernate.cfg.xml或者hibernate.properties文件来配置,实现与不同数据库的连接。

Session对象:

Session是持久层操作的基础,相当于JDBC的Connection:

实例通过SessionFactory实例构建:

Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();

之后我们就可以使用Session所提供的Save、find、flush等方法完成持久层操作,因此Session对象也封装了所有对数据库的操作实现Hibernate对数据库的操纵功能,如:

Save()方法实现增加和保存。

Delete()方法实现数据的删除。

Update()方法实现数据更新和修改。

Find()方法实现数据的检索。

Hibernate会根据不同的操作自动生成相应的SQL语句,从而实现了程序员对PO对象的操作转化为数据库关系表的操作。

1.2、使用步骤

  • 编写Hibernate配置文件

Hibernate配置文件有两种,分别是hibernate.cfg.xml文件和Hibernate.properties,推荐使用hibernate.cfg.xml

  • PO和映射文件

使用middlegen和hibernate-extensions从数据库导出PO的映射文件,并在hibernate.cfg.xml文件中声明。

  • 编写DAO

对每一张关系表编写一个DAO,提供一组增、删、改、查方法供业务逻辑对数据库操作使用。

2、iBATIS

相对于Hibernate和Apache OJB等一站式ORM解决方案而言,ibatis是一种半自动化的ORM实现,所谓半自动,可能理解上有点生涩,纵观目前主流的ORM,无论Hibernate还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全套映射机制,程序员往往只需要定义好了POJO到数据库映射关系,即可通过Hibernate或者OJB提供的方法完成持久层操作,程序员甚至不需要对SQL的熟练掌握,Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL,并调用JDBC接口加以执行。

ibatis最直接的好处是不但为程序员提供了对象与关系数据库之间的映射,同时提供操作方法与SQL间的直接映射,设计者可以直接为一个方法指定一条SQL语句,从而取得更加准确的数据,同时为优化查询、连接查询提供了方便。

2.1、基本功能

作为又一个轻量级的ORM中间件,ibatis除了提供了对数据库的基本的增、删、改、查之外还提供了连接管理、缓存支持、线程支持、分布式事务管理等一套较为完整的数据库管理功能。

SqlMapClient对象时ibatis持久层操作的基础,相当于Hibernate的Session,提供对SQL映射的方法。

insert()方法实现对插入SQL语句的映射。

delete()方法实现对删除SQL语句的映射。

update()方法实现对更新SQL语句的映射。

queryForList()、queryForMap()、queryForObject()、queryForPaginatedList()等方法提供了一组查询SQL语句的映射。

2.2、使用步骤

  • ibatis SQL Map配置文件

文件中对所用数据库的连接座了基本配置,包括数据库驱动类型、用户名、密码、以及连接池相关的管理数据

  • PO和映射文件

和hibernate一样,PO作为数据库关系表的映射,也需要响应的映射配置文件,可以手写,也可以借助hibernate的相关工具生成PO,不会影响在ibatis中使用,与hibernate不同的是,ibatis的映射文件中没有对PO中每个属性做响应的描述,而是指定了一系列与PO有关的SQL相关操作,也体现了ibatis良好的灵活性与扩展性。

  • 编写DAO

在DAO中,可以使用SqlMapClient提供 的方法来对应的指定对PO的操作的SQL语句,从而使业务逻辑层的开发仍然是面向对象的操作。

相对于hibernate O/R而言,ibatis是一种Sql Mapping的ORM实现。

Hibernate对数据库结构提供了较为完整的封装,hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行,程序员往往只需要定义好了POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作,程序员甚至不需要对SQL大的熟练掌握,Hibernate/OJB会根据制定的存储逻辑。自动生成对应的SQL并调用JDBC接口。

而ibatis的着力点在于POJO与SQL之间的映射关系,也就是说,ibatis并不会为程序员在运行期间自动生成SQL制定,具体的SQL需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定的POJO,使用ibatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过hibernate实现的ORM基本一致,而对于具体的数据操作,hibernate会自动生成SQL语句,而ibatis则要求开发者编写具体的SQL语句,相对hibernate而言,ibatis以SQL开发的工作量和数据库迁移性上让步,为系统设计提供了更大的自由空间。

3、二者对比

1、ibaits非常简单易学、hibernate相对较为复杂,门槛较高

2、二者都是优秀的开源产品

3、当系统属于二次开发,无法对数据库结构做到控制和修改,那么ibatis的灵活性将比hibernate更合适。

4、系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或者存储过程)才能达到系统性能设计指标,在这种情况下ibatis会有更好的可控性和表现。

5、ibatis需要手动写sql语句,也可以生成一部分,hibernate则基本上可以自动生成,偶而写一些sql,同样的需求,ibatis的工作量比hibernate要大的多,类似的,如果设计到数据库字段的修改,hibernate修改的地方很少,而ibatis要把那些sql mapping的地方一一修改。

6、以数据库字段--对应映射得到的PO和Hibernate这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路、

7、hibernate现在已经是主流的O/R Mapping框架,从文档的丰富性、产品的完善性、版本的开发速度都要强于ibatis.

时间: 2024-10-07 19:17:25

ibatis和Hibernate的比较浅析的相关文章

ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解

这个项目的底层是用ibatis框架完毕,这几天也是都在用这个框架写代码,也有了一些简单的理解,把项目拿过来后基本的配置都已经配置好了,比方一些事务.日志控制等,在开发中主要用到的是写SQL语句以及熟悉ibatis xml文件都提供的一些标签,这些标签大部分是用来处理推断.逻辑,使得sql能够动态组装变的更灵活. 在写代码的工作量上ibatis要比hibernate高一些,在你写了服务层后还须要些dao层,dao层实现,然后这些在hibernate中不须要自己写,仅仅写到服务层就能够调用hiber

Ibatis和Hibernate的比较

Ibatis和Hibernate的比较 分类: IBATIS HIBERNATE2010-11-19 17:58 341人阅读 评论(0) 收藏 举报 hibernateibatis数据库sqlcachetable 我在最初的选型的时候是打算选择 Hibernate 的,在研究的过程中发现了 iBatis,经过 分析比较之后我选择了 iBatis.现在我已经使用 iBatis 完成了一个中小型的 ... - 我在最初的选型的时候是打算选择 Hibernate 的,在研究的过程中发现了 iBati

ibatis 和hibernate 在开发中的理解

这个项目的底层是用ibatis框架完成,这几天也是都在用这个框架写代码,也有了一些简单的理解,把项目拿过来后主要的配置都已经配置好了,比如一些事务.日志控制等,在开发中主要用到的是写SQL语句以及熟悉ibatis xml文件都提供的一些标签,这些标签大部分是用来处理判断.逻辑,使得sql可以动态组装变的更灵活. 在写代码的工作量上ibatis要比hibernate高一些,在你写了服务层后还需要些dao层,dao层实现,然后这些在hibernate中不需要自己写,只写到服务层就可以调用hibern

IBatis和Hibernate区别

1. 简介 Hibernate是当前最流行的O/R mapping框架.它出身于sf.net,现在已经成为Jboss的一部分了.iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myBATIS.目前属于apache的一个子项目了.相对Hibernate"O/R"而言,iBATIS 是一种"Sql Mapping"的ORM实现. Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的

iBatis与Hibernate有什么不同?

相同点:屏蔽jdbc api的底层访问细节,使用我们不用与jdbc api打交道,就可以访问数据. jdbc api编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐. ibatis的好处:屏蔽jdbc api的底层访问细节:将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象:提供了自动将实体对象的属性传递给sql语句的参数. Hiber

【发问】代表ODBC、Ibatis 发问 Hibernate、Linq、Entity、JPA

分页: 多表关联查询: 多表操作 临时表: 存储过程式长语句 : Hibernate与iBATIS的比较 博客分类: db iBATISHibernateSQL数据结构ORM 1.出身 hibernate 是当前最流行的o/r mapping框架,它出身于sf.net,现在已经成为jboss的一部分了. ibatis 是另外一种优秀的o/r mapping框架,目前属于apache的一个子项目了. 2.原理 相对hibernate“o/r”而言,ibatis是一种“sql mapping”的or

O/R Mapping框架:Ibatis与Hibernate之间的区别

hibernate 是当前最流行的o/r mapping框架,它出身于sf.net,现在已经成为jboss的一部分了.ibatis 是另外一种优秀的o/r mapping框架,目前属于apache的一个子项目了. 相对hibernate“o/r”而言,ibatis是一种“sql mapping”的orm实现. hibernate对数据库结构提供了较为完整的封装,hibernate的o/r mapping实现了pojo 和数据库表之间的映射,以及sql 的自动生成和执行.程序员往往只需定义好了po

选用ibatis和hibernate的区别 转载

Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任. 一.基本功能Hibernate作为数据持久化的中间件,足以让数据库在业务逻辑层开

Hibernate 缓存机制浅析

1. 为什么要用 Hibernate 缓存? Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据. 回到顶部 2. 项目实战 当 Session 对象调用 save() 方法保存一个对象后,该对象会被放入到 Session 缓存中. 当 Session 对象调用 get() 或 load() 方法从数