Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
一、基本功能
Hibernate作为数据持久化的中间件,足以让数据库在业务逻辑层开发中去冬眠。它通过可扩展标记语言(XML)实现了类和数据表之间的映射,使程序员在业务逻辑的开发中面向数据库而改为面向对象开发。使整个项目开发分工更加明确,提高了程序开发的效率。
configuration对象:
Configuration 类负责管理Hibernate 的配置信息。Hibernate 运行时需要
获取一些底层实现的基本信息,其中几个关键属性包括:
1. 数据库URL
2. 数据库用户
3. 数据库用户密码
4. 数据库JDBC驱动类
5. 数据库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.编写Hibernate配置文件
Hibernate配置文件有两种,分别是hibernate.cfg.xml文件和hibernate.properties,推荐使用hibernate.cfg.xml。
2.PO和映射文件
使用middlegen和hibernate-extensions从数据库导出PO的映射文件,并在hibernate.cfg.xml当中声明。
3.编写DAO
对每一张关系表编写一个DAO,提供一组增、删、改、查方法供业务逻辑对数据库操作使用。
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“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开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
二者的对比:
1.iBATIS非常简单易学,Hibernate相对较复杂,门槛较高。
2.二者都是比较优秀的开源产品
3.当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合
4.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。
5.iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。
6.以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。
7.Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS
8.最关键的一句话是iBATIS的作者说的:
If you are starting a new project and you're in full control of your object model and database design, Hibernate is a good choice of O/R tool.
If you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were an SQL Mapper comes in handy.
选择Hibernate还是iBATIS都有它的道理:
Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。
iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
我的建议就是:
如果你的团队没有Hibernate高手,那么请用iBATIS,要把Hibernate用好,并不容易;否则你应该选择Hibernate,那样你的开发速度和代码简洁性都相当棒!
BTW:
rails的ActiveRecord是平衡性做的最好的,避免了Hibernate的复杂性和学习HQL的成本,同时具备iBATIS即学即用的简单性。
iBatis和Hibernate的较量其实就是他们之间的一个简单的比较,不知道你在实际应用中有没有发现其他别的区别和联系。
分享到:
相关推荐
【ibatis和Hibernate的区别】 在Java开发中,ibatis和Hibernate都是常见的对象关系映射(ORM)框架,它们简化了数据库操作,将Java对象与数据库表之间的映射关系抽象出来,使得开发人员可以使用面向对象的方式处理...
### ibatis 与 hibernate 之间的比较:优点和缺点 #### 概述 在 Java 开发领域中,对象关系映射(Object Relational Mapping,简称 ORM)是一种将面向对象编程语言中的对象模型与数据库系统中的关系模型相互转换的...
### iBatis与Hibernate的主要区别 #### 一、概述 iBatis与Hibernate都是Java领域内流行的ORM(Object-Relational Mapping,对象关系映射)框架,用于简化Java应用程序与数据库之间的交互。尽管它们有着相似的目标,...
#### 三、ibatis与Hibernate的区别 1. **设计理念**: - **ibatis**:强调对SQL语句的控制,更适合对性能有较高要求的应用。 - **Hibernate**:更注重对象模型的映射,适合于需要快速开发的应用。 2. **学习曲线...
**选用Ibatis与Hibernate的区别**: 1. **灵活性**:Ibatis允许直接编写SQL,适合复杂的查询和性能优化。Hibernate则倾向于自动化,可能在复杂查询方面不够灵活。 2. **学习曲线**:Hibernate提供了全套的ORM解决...
标题 "IBatisVSHibernate" 暗示了我们将探讨两个知名的Java持久层框架——IBatis和Hibernate之间的差异和特点。这两个工具都是用于简化数据库操作的框架,但在设计理念和使用方式上有所不同。 **IBatis** 是一个轻...
公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在...想了很多办法,都没能很好的避免这个问题,无意间在javaeye上看到了《使ibatis支持hibernate式的物理分页》这篇文章,
1. 自动化程度:Hibernate提供全面的ORM,自动转换对象与数据库记录,而Ibatis则更灵活,允许自定义SQL。 2. 性能:由于Ibatis允许直接编写SQL,所以在某些情况下,其性能可能优于Hibernate,尤其是在复杂的查询和...
在IT行业中,数据库持久化是开发过程中的关键环节,Ibatis和Hibernate是两种广泛使用的Java持久层框架。它们都致力于简化数据库操作,让开发者能够更专注于业务逻辑而不是繁琐的SQL语句编写。以下是对这两个框架的...
4. 运行效率:不考虑缓存的情况下,iBatis通常比Hibernate更快,因为它减少了与数据库的交互次数。但若需考虑缓存,两者都有各自的局限,且管理起来较为复杂。 5. 数据库支持:iBatis对不同数据库的支持不如...
iBatis VS Hibernate iBatis不亚于Hibernate
iBatis 可以与 ORM(对象关系映射)框架如 Hibernate 配合使用,提供更高效的 SQL 执行。 3. Hibernate: Hibernate 是一个流行的 ORM 框架,它自动处理了数据库操作,使得开发者可以使用 Java 对象进行操作而无需...
Struts2、Spring、iBatis 和 Hibernate 是四个在 Java Web 开发中广泛使用的开源框架。这个项目将它们集成为一个整体,为初学者提供了一个学习和理解这些技术如何协同工作的实例。 **Struts2** 是一个基于 Model-...
标题“spring与hibernate以及ibatis集成的实例和具体配置图解”表明,这个资料包主要讲解如何将这三个框架结合在一起使用,以构建一个高效、灵活的后端系统。集成这些框架可以实现数据访问层的无缝切换,同时利用...
在IT行业中,数据库操作是应用程序开发的核心部分,而MyBatis、iBatis和Hibernate都是流行的Java持久层框架,它们简化了与数据库交互的过程。这三个框架各有特点,但都提供了ORM(对象关系映射)机制,帮助开发者将...
hibernate下载 : http://sourceforge.net/projects/hibernate/files/hibernate3/--3.XX版本 ...比如:ibatis-2.3.0.677.jar, spring 可在下载你需要的版本: http://www.springsource.org/download
在SpringMVC项目中,iBatis可以作为数据访问层,提供数据查询和存储功能,与Hibernate一起形成双数据库架构。 Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用与关系数据库之间的交互。Hibernate通过...
4. **Ibatis**:与Hibernate相比,Ibatis更轻量级,它将SQL语句直接写在配置文件或Java代码中,提供了更灵活的控制。Ibatis更适合那些需要对SQL有高度定制需求的项目。 在`stm-ssh`和`SSHdemo`中,可能包含的是...