选用Ibatis和Hibernate的区别

来源:java认证发布时间:2012-11-12 13:16:16java认证视频

  ibatis 简介

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

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

  一、基本功能

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

  sqlmapclient对象是ibatis持久层操作的基础,相当于hibernate中的session,提供对sql映射的方法.

  insert()方法实现对插入sql语句的映射;

  delete()方法实现对删除sql语句的映射;

  update()方法实现对更新sql语句的影射;

  queryforlist()、queryformap()、queryforobject()、 queryforpaginatedlist()等方法提供了一组查询sql语句的影射;

  二、使用步骤

  1.ibatis sql map 配置文件

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

  2.po和映射文件

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

  3.编写dao

  在dao中,可以使用sqlmapclient提供的方法来对应的指定对po操作的sql语句,从而使业务逻辑层的开发仍然是面向对象的操作.

  选择hibernate还是ibatis都有它的道理:

  特点对比

  hibernate的特点:

  hibernate功能强大,数据库无关性好,o/r映射能力强,如果你对hibernate相当精通,而且对hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽.以数据库字段一一对应映射得到的po和hibernte这种对象化映射得到的po是截然不同的,本质区别在于这种po是扁平化的,不像hibernate映射的po是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路. hibernate对数据库结构提供了较为完整的封装,hibernate的o/r mapping实现了pojo 和数据库表之间的映射,以及sql 的自动生成和执行.程序员往往只需定义好了pojo 到数据库表的映射关系,即可通过hibernate 提供的方法完成持久层操作.程序员甚至不需要对sql 的熟练掌握, hibernate/ojb 会根据制定的存储逻辑,自动生成对应的sql 并调用jdbc 接口加以执行.hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计o/r映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好hibernate方面需要你的经验和能力都很强才行,但是hibernate现在已经是主流o/r mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于ibatis.

  ibatis的特点:

  ibatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的sql使用经验,对于没有那么高的对象模型要求的项目来说,相当完美.ibatis的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改.当系统属于二次开发,无法对数据库结构做到控制和修改,那ibatis的灵活性将比 hibernate更适合.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的sql语句(或存储过程)才能达到系统性能设计指标.在这种情况下ibatis会有更好的可控性和表现.

  对于实际的开发进行的比较:

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

  2. ibatis 可以进行细粒度的优化

  比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,ibatis 很简单,执行一个sql update table_a set column_1=#column_1# where id=#id# 但是用 hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段. 当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果.

  例如:我需要列出一个表的部分内容,用 ibatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量select id, name from table_with_a_lot_of_column where ...一般情况下hibernate 会把所有的字段都选出来.比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text.上面的场景中我为什么要把他们也选出来呢?用hibernate 的话,你又不能把这两个不需要的字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来.这个时候就能显现出ibatis 的好处了.如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update.这对数据库来说就是两条sql.而ibatis只需要一条update的sql就可以了.减少一次与数据库的交互,对于性能的提升是非常重要.

  3. 开发方面:

  开发效率上,我觉得两者应该差不多.可维护性方面,我觉得 ibatis 更好一些.因为 ibatis 的 sql 都保存到单独的文件中.而 hibernate 在有些情况下可能会在 java 代码中保sql/hql.相对hibernate"o/r"而言,ibatis 是一种"sql mapping"的orm实现. 而ibatis 的着力点,则在于pojo 与sql之间的映射关系.也就是说,ibatis并不会为程序员在运行期自动生成sql 执行.具体的sql 需要程序员编写,然后通过映射配置文件,将sql所需的参数,以及返回的结果字段映射到指定pojo.使用ibatis 提供的orm机制,对业务逻辑实现人员而言,面对的是纯粹的java对象,这一层与通过hibernate 实现orm 而言基本一致,而对于具体的数据操作,hibernate会自动生成sql 语句,而ibatis 则要求开发者编写具体的sql 语句.相对hibernate而言,ibatis 以sql开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间.

  4. 运行效率

  在不考虑 cache 的情况下,ibatis 应该会比hibernate 快一些或者很多.

  考试大温馨提示:本内容来源于网络,仅代表作者个人观点,与本站立场无关,仅供您学习交流使用。其中可能有部分文章经过多次转载而造成文章内容缺失、错误或文章作者不详等问题,请您谅解。如有侵犯您的权利,请联系我们,本站会立即予以处理。

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答