`

小谈选用 ibatis 和 hibernate 的区别

阅读更多

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语句两种表达方式。

======================================================================================================

i​b​a​t​i​s​的​特​点​:
i​b​a​t​i​s​入​门​简​单​,​即​学​即​用​,​提​供​了​数​据​库​查​询​的​自​动​对​象​绑​定​功​能​,​而​且​延​续​了​很​好​的​s​q​l​使​用​经​验​,​对​于​没​有​那​么​高​的​对​象​模​型​要​求​的​项​目​来​说​,​相​当​完​美​.​i​b​a​t​i​s​的​缺​点​就​是​框​架​还​是​比​较​简​陋​,​功​能​尚​有​缺​失​,​虽​然​简​化​了​数​据​绑​定​代​码​,​但​是​整​个​底​层​数​据​库​查​询​实​际​还​是​要​自​己​写​的​,​工​作​量​也​比​较​大​,​而​且​不​太​容​易​适​应​快​速​数​据​库​修​改​.​当​系​统​属​于​二​次​开​发​,​无​法​对​数​据​库​结​构​做​到​控​制​和​修​改​,​那​i​b​a​t​i​s​的​灵​活​性​将​比​ ​h​i​b​e​r​n​a​t​e​更​适​合​.​系​统​数​据​处​理​量​巨​大​,​性​能​要​求​极​为​苛​刻​,​这​往​往​意​味​着​我​们​必​须​通​过​经​过​高​度​优​化​的​s​q​l​语​句​(​或​存​储​过​程​)​才​能​达​到​系​统​性​能​设​计​指​标​.​在​这​种​情​况​下​i​b​a​t​i​s​会​有​更​好​的​可​控​性​和​表​现​.
对​于​实​际​的​开​发​进​行​的​比​较​:
1​.​ ​i​b​a​t​i​s​需​要​手​写​s​q​l​语​句​,​也​可​以​生​成​一​部​分​,​h​i​b​e​r​n​a​t​e​则​基​本​上​可​以​自​动​生​成​,​偶​尔​会​写​一​些​h​q​l​.​同​样​的​需​求​,​i​b​a​t​i​s​的​工​作​量​比​ ​h​i​b​e​r​n​a​t​e​要​大​很​多​.​类​似​的​,​如​果​涉​及​到​数​据​库​字​段​的​修​改​,​h​i​b​e​r​n​a​t​e​修​改​的​地​方​很​少​,​而​i​b​a​t​i​s​要​把​那​些​s​q​l​ ​m​a​p​p​i​n​g​的​地​方​一​一​修​改​.
2​.​ ​i​b​a​t​i​s​ ​可​以​进​行​细​粒​度​的​优​化
比​如​说​我​有​一​个​表​,​这​个​表​有​几​个​或​者​几​十​个​字​段​,​我​需​要​更​新​其​中​的​一​个​字​段​,​i​b​a​t​i​s​ ​很​简​单​,​执​行​一​个​s​q​l​ ​u​p​d​a​t​e​ ​t​a​b​l​e​_​a​ ​s​e​t​ ​c​o​l​u​m​n​_​1​=​#​c​o​l​u​m​n​_​1​#​ ​w​h​e​r​e​ ​i​d​=​#​i​d​#​ ​但​是​用​ ​h​i​b​e​r​n​a​t​e​ ​的​话​就​比​较​麻​烦​了​,​缺​省​的​情​况​下​ ​h​i​b​e​r​n​a​t​e​ ​会​更​新​所​有​字​段​.​ ​当​然​我​记​得​ ​h​i​b​e​r​n​a​t​e​ ​有​一​个​选​项​可​以​控​制​只​保​存​修​改​过​的​字​段​,​但​是​我​不​太​确​定​这​个​功​能​的​负​面​效​果​.
例​如​:​我​需​要​列​出​一​个​表​的​部​分​内​容​,​用​ ​i​b​a​t​i​s​ ​的​时​候​,​这​里​面​的​好​处​是​可​以​少​从​数​据​库​读​很​多​数​据​,​节​省​流​量​s​e​l​e​c​t​ ​i​d​,​ ​n​a​m​e​ ​f​r​o​m​ ​t​a​b​l​e​_​w​i​t​h​_​a​_​l​o​t​_​o​f​_​c​o​l​u​m​n​ ​w​h​e​r​e​ ​.​.​.​一​般​情​况​下​h​i​b​e​r​n​a​t​e​ ​会​把​所​有​的​字​段​都​选​出​来​.​比​如​说​有​一​个​上​面​表​有​8​个​字​段​,​其​中​有​一​两​个​比​较​大​的​字​段​,​v​a​r​c​h​a​r​(​2​5​5​)​/​t​e​x​t​.​上​面​的​场​景​中​我​为​什​么​要​把​他​们​也​选​出​来​呢​?​用​h​i​b​e​r​n​a​t​e​ ​的​话​,​你​又​不​能​把​这​两​个​不​需​要​的​字​段​设​置​为​l​a​z​y​ ​l​o​a​d​,​因​为​还​有​很​多​地​方​需​要​一​次​把​整​个​ ​d​o​m​a​i​n​ ​o​b​j​e​c​t​ ​加​载​出​来​.​这​个​时​候​就​能​显​现​出​i​b​a​t​i​s​ ​的​好​处​了​.​如​果​我​需​要​更​新​一​条​记​录​(​一​个​对​象​)​,​如​果​使​用​ ​h​i​b​e​r​n​a​t​e​,​需​要​现​把​对​象​ ​s​e​l​e​c​t​ ​出​来​,​然​后​再​做​ ​u​p​d​a​t​e​.​这​对​数​据​库​来​说​就​是​两​条​s​q​l​.​而​i​b​a​t​i​s​只​需​要​一​条​u​p​d​a​t​e​的​s​q​l​就​可​以​了​.​减​少​一​次​与​数​据​库​的​交​互​,​对​于​性​能​的​提​升​是​非​常​重​要​.
3​.​ ​开​发​方​面​:
开​发​效​率​上​,​我​觉​得​两​者​应​该​差​不​多​.​可​维​护​性​方​面​,​我​觉​得​ ​i​b​a​t​i​s​ ​更​好​一​些​.​因​为​ ​i​b​a​t​i​s​ ​的​ ​s​q​l​ ​都​保​存​到​单​独​的​文​件​中​.​而​ ​h​i​b​e​r​n​a​t​e​ ​在​有​些​情​况​下​可​能​会​在​ ​j​a​v​a​ ​代​码​中​保​s​q​l​/​h​q​l​.​相​对​h​i​b​e​r​n​a​t​e​"​o​/​r​"​而​言​,​i​b​a​t​i​s​ ​是​一​种​"​s​q​l​ ​m​a​p​p​i​n​g​"​的​o​r​m​实​现​.​ ​而​i​b​a​t​i​s​ ​的​着​力​点​,​则​在​于​p​o​j​o​ ​与​s​q​l​之​间​的​映​射​关​系​.​也​就​是​说​,​i​b​a​t​i​s​并​不​会​为​程​序​员​在​运​行​期​自​动​生​成​s​q​l​ ​执​行​.​具​体​的​s​q​l​ ​需​要​程​序​员​编​写​,​然​后​通​过​映​射​配​置​文​件​,​将​s​q​l​所​需​的​参​数​,​以​及​返​回​的​结​果​字​段​映​射​到​指​定​p​o​j​o​.​使​用​i​b​a​t​i​s​ ​提​供​的​o​r​m​机​制​,​对​业​务​逻​辑​实​现​人​员​而​言​,​面​对​的​是​纯​粹​的​j​a​v​a​对​象​,​这​一​层​与​通​过​h​i​b​e​r​n​a​t​e​ ​实​现​o​r​m​ ​而​言​基​本​一​致​,​而​对​于​具​体​的​数​据​操​作​,​h​i​b​e​r​n​a​t​e​会​自​动​生​成​s​q​l​ ​语​句​,​而​i​b​a​t​i​s​ ​则​要​求​开​发​者​编​写​具​体​的​s​q​l​ ​语​句​.​相​对​h​i​b​e​r​n​a​t​e​而​言​,​i​b​a​t​i​s​ ​以​s​q​l​开​发​的​工​作​量​和​数​据​库​移​植​性​上​的​让​步​,​为​系​统​设​计​提​供​了​更​大​的​自​由​空​间​.
4​.​ ​运​行​效​率
在​不​考​虑​ ​c​a​c​h​e​ ​的​情​况​下​,​i​b​a​t​i​s​ ​应​该​会​比​h​i​b​e​r​n​a​t​e​ ​快​一​些​或​者​很​多​.

 

 


 

分享到:
评论

相关推荐

    选用ibatis和hibernate的区别

    **选用Ibatis与Hibernate的区别**: 1. **灵活性**:Ibatis允许直接编写SQL,适合复杂的查询和性能优化。Hibernate则倾向于自动化,可能在复杂查询方面不够灵活。 2. **学习曲线**:Hibernate提供了全套的ORM解决...

    小型人事管理系统

    相比Hibernate等全对象关系映射(ORM)框架,iBatis更注重SQL的控制权,开发者可以灵活地编写SQL语句,以适应复杂多变的数据库查询需求。在本系统中,iBatis作为数据访问层,负责与数据库的交互,确保数据的准确存储...

    大数据功能模块概要设计-V1.1Word版.docx

    《大数据功能模块概要设计》是对大数据系统的架构和组件进行详细描述的一份文档,主要涵盖了系统总体架构、通用组件和...通过选用合适的组件和框架,实现高效的数据采集、处理、存储和访问,满足不同应用场景的需求。

    spring框架各jar包详解

    如果采用 Spring 的 Hibernate 集成和支持类,这些 JAR 文件不可或缺。如果使用其它 ORM 工具如 iBATIS,则不需要这些 JAR 文件。如果使用 Hibernate,则你的应用还要包含 CGLIB JAR 文件。 hsqldbhsqldb.jar ...

    Spring包的依赖关系

    - **说明**: 使用Spring的Hibernate集成和支持类时,这些JAR文件是必需的。同时,如果使用Hibernate,还需包含CGLIB JAR文件。 ### 11. HSQLDB - **JAR文件**: hsqldb.jar - **说明**: Spring示例应用中使用了...

    大数据功能模块概要设计.doc

    J2EE服务端开发涉及的库包括apache-commons提供基础类扩展,json-lib处理JSON数据,junit进行单元测试,struts2/spring mvc作为MVC框架,ibatis/mybatis/hibernate作为ORM层选择。 **选型** 3.1 **中间件**:商业...

    ssh开发指南附有源代码

    SSH是Struts、Spring和Hibernate三个开源框架的缩写,它们分别是MVC设计模式中的表现层、业务层和持久层的重要组件。 在开发过程中,首先需要配置开发环境。基础的配置包括安装JDK 5.0,选用MyEclipse 6.5作为IDE,...

    大型网站数据库优化大型网站数据库优化.docx

    同时,选用高效的编程框架,如Spring+Ibatis,Spring的IOC机制能有效避免频繁创建对象,而Ibatis的直接SQL操作和缓存机制则能提升数据库交互效率。 2. **数据库缓存与优化**:DBA的角色在此过程中不可或缺,他们...

    大规模网站架构.ppt

    在Sharding的实现中,可以使用独立的DAL Proxy服务器(如MySQL的Amoeba,PostgreSQL的PL/Proxy)或者DAL API(如Java的Hibernate Shard,Ibatis Shard,HiveDB,Python的Pyshards)。这些工具可以帮助应用透明地处理...

    Jaoso新闻文章发布系统 v0.9.1 beta1

    3. **数据库管理**:存储新闻文章、用户信息、评论等数据,通常会选用MySQL、PostgreSQL或Oracle等关系型数据库,通过ORM(对象关系映射)技术如JPA或iBatis来简化数据库操作。 4. **安全性**:系统可能集成Spring ...

    IBatisNet和NHibernate模版

    IBatisNet(原名iBATIS.NET)是一个轻量级的ORM框架,由iBATIS的Java版本发展而来。它提供了一种将业务对象与SQL语句进行映射的方法,使得开发者可以避免编写大量的数据访问代码。 **核心特性:** 1. **SQL映射文件...

    向导程序设计文档.docx

    - 数据仓储:采用ORM(对象关系映射)技术,如实体框架(EntityFramework),简化了数据库操作,使得代码更面向对象,同时也支持其他ORM框架如Hibernate和iBatis。 - 控制反转(IOC)与依赖注入(DI):选择了...

    java解析json用到的包

    同时,它还支持与Hibernate、iBatis等ORM框架集成,使得在数据库操作中使用JSON变得更加方便。 在实际开发中,处理JSON数据时通常会选用更现代且功能更强大的库,如`org.json`、`com.google.gson`或`Jackson`。然而...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    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组件和页面流转控制,...

    json-lib 导入所需要的6个jar 包

    它支持多种Java框架,如Hibernate、iBatis、Spring等,极大地简化了数据序列化和反序列化的操作。 **导入json-lib所需jar包** 在Java项目中使用json-lib时,通常需要导入以下六个jar包: 1. json-lib-2.x.jar:这是...

Global site tag (gtag.js) - Google Analytics