Hibernate 简介
Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操作数据库。Hibernate可以应用在任何使用JDBC的场景,既可以在Java的客户端程序使用,也可以在Servlet/JSP的WEB应用中使用,最具革命意义的是,Hibernate可以在应用EJB和J2EE架构中取代CMP,完成数据持久化的重任。
Hibernate的核心接口一共有6个,分别为:Session,SessionFactory,Transaction,Query,Criteria,Configuration。
1、Configuration 接口 接 接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动过程中,Configuration类实例首先定位映射文档位置、读取配置、然后创建SessionFactory对象。
1、数据库URL
2、数据库用户名
3、数据库密码
4、数据库JDBC驱动类
5、数据库dialect,用于对特定数据库提供支持,其中包括了针对特定数据库特性的实现。
2、Session 接口
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的Session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的Session接口,而以后会将HttpSession对象称为用户Session对象。
Session 是持久层操作的基础,相当于JDBC中的Connection 对象:
实例通过 SessionFactory 实例构建:
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
之后就可以调用Session所提供的 save、find、flush 等方法完成持久层操作。因此session对象也封装了所有对数据库的操作来实现Hibernate 对数据库的操纵功能,如:
1、Save() 方法实现数据库保存
2、Delete() 实现删除
3、Update() 实现更新
4、Find() 实现检索数据
3、SessionFactory 接口
SessionFactory 接口负责初始化hibernate。 它充当数据库存储源的代理,并负责创建Session对象。这里用到了 工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
4、Transaction 接口
Transaction 接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
5、Query 和 Criteria 接口
Query 和 Criteria 接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
======================================================================================================
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 快一些或者很多.
分享到:
相关推荐
**选用Ibatis与Hibernate的区别**: 1. **灵活性**:Ibatis允许直接编写SQL,适合复杂的查询和性能优化。Hibernate则倾向于自动化,可能在复杂查询方面不够灵活。 2. **学习曲线**:Hibernate提供了全套的ORM解决...
相比Hibernate等全对象关系映射(ORM)框架,iBatis更注重SQL的控制权,开发者可以灵活地编写SQL语句,以适应复杂多变的数据库查询需求。在本系统中,iBatis作为数据访问层,负责与数据库的交互,确保数据的准确存储...
《大数据功能模块概要设计》是对大数据系统的架构和组件进行详细描述的一份文档,主要涵盖了系统总体架构、通用组件和...通过选用合适的组件和框架,实现高效的数据采集、处理、存储和访问,满足不同应用场景的需求。
如果采用 Spring 的 Hibernate 集成和支持类,这些 JAR 文件不可或缺。如果使用其它 ORM 工具如 iBATIS,则不需要这些 JAR 文件。如果使用 Hibernate,则你的应用还要包含 CGLIB JAR 文件。 hsqldbhsqldb.jar ...
- **说明**: 使用Spring的Hibernate集成和支持类时,这些JAR文件是必需的。同时,如果使用Hibernate,还需包含CGLIB JAR文件。 ### 11. HSQLDB - **JAR文件**: hsqldb.jar - **说明**: Spring示例应用中使用了...
J2EE服务端开发涉及的库包括apache-commons提供基础类扩展,json-lib处理JSON数据,junit进行单元测试,struts2/spring mvc作为MVC框架,ibatis/mybatis/hibernate作为ORM层选择。 **选型** 3.1 **中间件**:商业...
SSH是Struts、Spring和Hibernate三个开源框架的缩写,它们分别是MVC设计模式中的表现层、业务层和持久层的重要组件。 在开发过程中,首先需要配置开发环境。基础的配置包括安装JDK 5.0,选用MyEclipse 6.5作为IDE,...
同时,选用高效的编程框架,如Spring+Ibatis,Spring的IOC机制能有效避免频繁创建对象,而Ibatis的直接SQL操作和缓存机制则能提升数据库交互效率。 2. **数据库缓存与优化**:DBA的角色在此过程中不可或缺,他们...
在Sharding的实现中,可以使用独立的DAL Proxy服务器(如MySQL的Amoeba,PostgreSQL的PL/Proxy)或者DAL API(如Java的Hibernate Shard,Ibatis Shard,HiveDB,Python的Pyshards)。这些工具可以帮助应用透明地处理...
3. **数据库管理**:存储新闻文章、用户信息、评论等数据,通常会选用MySQL、PostgreSQL或Oracle等关系型数据库,通过ORM(对象关系映射)技术如JPA或iBatis来简化数据库操作。 4. **安全性**:系统可能集成Spring ...
IBatisNet(原名iBATIS.NET)是一个轻量级的ORM框架,由iBATIS的Java版本发展而来。它提供了一种将业务对象与SQL语句进行映射的方法,使得开发者可以避免编写大量的数据访问代码。 **核心特性:** 1. **SQL映射文件...
- 数据仓储:采用ORM(对象关系映射)技术,如实体框架(EntityFramework),简化了数据库操作,使得代码更面向对象,同时也支持其他ORM框架如Hibernate和iBatis。 - 控制反转(IOC)与依赖注入(DI):选择了...
同时,它还支持与Hibernate、iBatis等ORM框架集成,使得在数据库操作中使用JSON变得更加方便。 在实际开发中,处理JSON数据时通常会选用更现代且功能更强大的库,如`org.json`、`com.google.gson`或`Jackson`。然而...
Spring 2.0的'spring-jdo.jar', 'spring-jpa.jar', 'spring-hibernate3.jar', 'spring-toplink.jar' 和 'spring-ibatis.jar' 被合并到Spring 2.5大粒度的'spring-orm.jar'中。 Spring 2.5的 'spring-test.jar' 取代...
- **技术要素选择**:优先考虑Spring JDBC Template而非Hibernate或iBatis,简化数据库交互复杂度,确保在高并发场景下的稳定性。 - **展现层实现**:ExtJS与Struts2.2.1的结合,提供丰富的UI组件和页面流转控制,...
它支持多种Java框架,如Hibernate、iBatis、Spring等,极大地简化了数据序列化和反序列化的操作。 **导入json-lib所需jar包** 在Java项目中使用json-lib时,通常需要导入以下六个jar包: 1. json-lib-2.x.jar:这是...