小谈选用 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? ?快?一?些?或?者?很?多?.
?
?
?