??xml version="1.0" encoding="utf-8" standalone="yes"?>国产免费av在线,欧美激情综合五月色丁香小说,四虎亚洲精品http://www.aygfsteel.com/szhswl/category/27819.html宋针q的个hI间zh-cnTue, 25 Dec 2007 15:09:17 GMTTue, 25 Dec 2007 15:09:17 GMT60选用ibatis和hibernate的区?/title><link>http://www.aygfsteel.com/szhswl/articles/169817.html</link><dc:creator>宋针q?/dc:creator><author>宋针q?/author><pubDate>Sun, 23 Dec 2007 09:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/szhswl/articles/169817.html</guid><wfw:comment>http://www.aygfsteel.com/szhswl/comments/169817.html</wfw:comment><comments>http://www.aygfsteel.com/szhswl/articles/169817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/szhswl/comments/commentRss/169817.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/szhswl/services/trackbacks/169817.html</trackback:ping><description><![CDATA[<p>Hibernate?br /> Hibernate是一个开放源代码的对象关pL框Ӟ它对JDBCq行了非常轻量的对象封装,使得JavaE序员可以随心所Ʋ的使用对象~程思维来操U|据库。Hibernate可以应用在Q何用JDBC的场合,既可以在Java的客LE序使用Q也可以在Servlet/JSP的Web应用中用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMPQ完成数据持久化的重仅R?<br /> 一、基本功?br /> Hibernate作ؓ数据持久化的中间Ӟ以让数据库在业务逻辑层开发中d眠。它通过可扩展标记语aQXMLQ实Ccd数据表之间的映射QɽE序员在业务逻辑的开发中面向数据库而改为面向对象开发。整个目开发分工更加明,提高了程序开发的效率?<br /> configuration对象Q?<br /> Configuration c负责管理Hibernate 的配|信息。Hibernate q行旉?br />  获取一些底层实现的基本信息Q其中几个关键属性包括:<br />  1Q?数据库URL<br />  2Q?数据库用?br />  3Q?数据库用户密?br />  4Q?数据库JDBC驱动c?br />  5Q?数据库dialectQ用于对特定数据库提供支持,其中包含了针对特定数据库Ҏ的实现Q如Hibernate数据cd到特定数据库数据cd的映等?<br /> 以上信息一般情况下由hibernate.cfg.xml或者hibernate.properties文g来配|,实现与不同数据库的连接?<br /> Session对象Q?<br /> Session是持久层操作的基Q相当于JDBC中的Connection:<br />  实例通过SessionFactory实例构徏:<br />  Configuration config = new Configuration().configure();<br />  SessionFactory sessionFactory = config.buildSessionFactory();<br />  Session session = sessionFactory.openSession();<br />  之后我们可以调用Session所提供的save、find、flush{方法完成持久层操作。因此Session对象也封装了所有对数据库的操作来实现HibernateҎ据库的操U功能,如: <br /> Save()Ҏ实现增加和保存; <br /> Delete()Ҏ实现数据的删除; <br /> Update()Ҏ实现数据更新和修改; <br /> Find()Ҏ实现数据的检索; <br /> Hibernate会根据不同的操作自动生成相应的SQL语句Q从而实CE序员对PO对象的操作{化ؓҎ据库关系表的操作?<br /> 二、用步?br /> 1Q编写Hibernate配置文g <br />        Hibernate配置文g有两U,分别是hibernate.cfg.xml文g和hibernate.properties,推荐使用hibernate.cfg.xml?<br /> 2QPO和映文?<br /> 使用middlegen和hibernate-extensions从数据库导出PO的映文Ӟq在hibernate.cfg.xml当中声明?<br /> 3Q编写DAO <br />        Ҏ一张关p表~写一个DAOQ提供一l增、删、改、查Ҏ供业务逻辑Ҏ据库操作使用?<br /> 更多的细节请大家参阅hibernate的网站获取详l的信息。ƈ在各自的实践和开发中加深体会?br /> Ibatis?br /> 相对Hibernate和Apache OJB {?一站式"ORM解决Ҏ而言Qibatis 是一U?半自动化"的ORM实现。所?半自?Q可能理解上有点生ӆ。纵观目前主的ORMQ无论Hibernate q是Apache OJBQ都Ҏ据库l构提供了较为完整的装Q提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系Q即可通过Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟l掌握,Hibernate/OJB 会根据制定的存储逻辑Q自动生成对应的SQL q调用JDBC 接口加以执行?<br /> Ibatis最直接的好处就是不但ؓE序员提供了对象与关pL据库之间的映,同时提供操作Ҏ与SQL间的直接影射Q设计者可以直接ؓ一个方法指定一条SQL语句Q从而取得更加准的数据Q同时ؓ优化查询、连接查询提供了方便?<br /> 一、基本功?br /> 作ؓ又一个轻量的ORM中间Ӟibatis除了提供了对数据库基本的增、删、改、查外还提供了连接管理,~存支持Q线E支持,Q分布式Q事物管理等一套教为完整的数据库管理功能?<br /> SqlMapClient对象是ibatis持久层操作的基础Q相当于hibernate中的sessionQ提供对SQL映射的方法?<br /> insert()Ҏ实现Ҏ入SQL语句的映; <br /> delete()Ҏ实现对删除SQL语句的映; <br /> update()Ҏ实现Ҏ新SQL语句的媄; <br /> queryForList()、queryForMap()、queryForObject()、queryForPaginatedList(){方法提供了一l查询SQL语句的媄;<br /> 二、用步?br /> 1Qibatis SQL Map 配置文g <br />        文g中对所用数据库的连接做了基本配|,包括数据库驱动类型、用户名、密码,以及q接池的相关理数据?<br /> 2QPO和映文?<br />        和hibernate一PPO作ؓ数据库关p表的媄,也需要响应的映射配置文gQ可以手写,也可以借助hibernate的相兛_L成POQ不会媄响PO在ibatis中的使用。与hibernate不同的是Qibatis的映文件中没有对PO中每个属性做响应的描qͼ而是指定了一pd与PO有关的SQL相关操作Q也体现了ibatis良好的灵zL与可扩展性?<br /> 3Q编写DAO <br />        在DAO中,可以使用SqlMapClient提供的方法来对应的指定对PO操作的SQL语句Q从而业务逻辑层的开发仍然是面向对象的操作?/p> <p>选择Hibernateq是iBATIS都有它的道理Q?br /> Hibernate的特点:<br /> Hibernate功能强大Q数据库无关性好QO/R映射能力强,如果你对Hibernate相当_N,而且对Hibernateq行了适当的封装,那么你的目整个持久层代码会相当单,需要写的代码很,开发速度很快Q非常爽。以数据库字D一一对应映射得到的PO和Hibernteq种对象化映得到的PO是截然不同的Q本质区别在于这UPO是扁q_的,不像Hibernate映射的PO是可以表辄体的对象l承Q聚合等{关pȝQ这会直接影响C的整个Y件系l的设计思\。HibernateҎ据库l构提供了较为完整的装QHibernate的O/R Mapping实现了POJO 和数据库表之间的映射Q以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系Q即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟l掌握, Hibernate/OJB 会根据制定的存储逻辑Q自动生成对应的SQL q调用JDBC 接口加以执行。Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射Q在性能和对象模型之间如何权衡取得^衡,以及怎样用好Hibernate斚w需要你的经验和能力都很强才行,但是Hibernate现在已经是主O/R Mapping框架Q从文档的丰富性,产品的完善性,版本的开发速度都要ZiBATIS?br /> iBATIS的特点:<br /> iBATIS入门单,卛_即用Q提供了数据库查询的自动对象l定功能Q而且延箋了很好的SQL使用l验Q对于没有那么高的对象模型要求的目来说Q相当完。iBATIS的缺点就是框架还是比较简陋,功能有~失Q虽然简化了数据l定代码Q但是整个底层数据库查询实际q是要自己写的,工作量也比较大,而且不太Ҏ适应快速数据库修改。当pȝ属于二次开?无法Ҏ据库l构做到控制和修?那iBATIS的灵zL将比Hibernate更适合。系l数据处理量巨大Q性能要求极ؓ苛刻Q这往往意味着我们必须通过l过高度优化的SQL语句Q或存储q程Q才能达到系l性能设计指标。在q种情况下iBATIS会有更好的可控性和表现?br /> 对于实际的开发进行的比较Q?br /> 1Q?iBATIS需要手写sql语句Q也可以生成一部分QHibernate则基本上可以自动生成Q偶会写一些Hql。同L需?iBATIS的工作量比Hibernate要大很多。类似的Q如果涉及到数据库字D늚修改QHibernate修改的地方很,而iBATIS要把那些sql mapping的地方一一修改?br /> 2. iBatis 可以q行l粒度的优化<br /> 比如说我有一个表Q这个表有几个或者几十个字段Q我需要更新其中的一个字D,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是?Hibernate 的话比较麻烦了,~省的情况下 hibernate 会更新所有字Dc?当然我记?hibernate 有一个选项可以控制只保存修改过的字D,但是我不太确定这个功能的负面效果?<br /> 例如Q我需要列Z个表的部分内容,?iBatis 的时候,q里面的好处是可以少从数据库d多数据,节省量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...一般情况下Hibernate 会把所有的字段都选出来。比如说有一个上面表?个字D,其中有一两个比较大的字段Qvarchar(255)/text。上面的场景中我Z么要把他们也选出来呢Q用hibernate 的话Q你又不能把q两个不需要的字段讄为lazy loadQ因有很多地斚w要一ơ把整个 domain object 加蝲出来。这个时候就能显现出ibatis 的好处了。如果我需要更C条记录(一个对象)Q如果?hibernateQ需要现把对?select 出来Q然后再?update。这Ҏ据库来说是两条sql。而iBatis只需要一条update的sql可以了。减一ơ与数据库的交互Q对于性能的提升是非常重要?br /> 3. 开发方面:<br /> 开发效率上Q我觉得两者应该差不多。可l护性方面,我觉?iBatis 更好一些。因?iBatis ?sql 都保存到单独的文件中。?Hibernate 在有些情况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言QiBATIS 是一U?#8220;Sql Mapping”的ORM实现?而iBATIS 的着力点Q则在于POJO 与SQL之间的映关pR也是_iBATISq不会ؓE序员在q行期自动生成SQL 执行。具体的SQL 需要程序员~写Q然后通过映射配置文gQ将SQL所需的参敎ͼ以及q回的结果字D|到指定POJO。用iBATIS 提供的ORM机制Q对业务逻辑实现人员而言Q面对的是纯_的Java对象Q这一层与通过Hibernate 实现ORM 而言基本一_而对于具体的数据操作QHibernate会自动生成SQL 语句Q而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言QiBATIS 以SQL开发的工作量和数据库移植性上的让步,为系l设计提供了更大的自q间?br /> 4. q行效率 <br /> 在不考虑 cache 的情况下QiBatis 应该会比hibernate 快一些或者很多?br /> </p> <img src ="http://www.aygfsteel.com/szhswl/aggbug/169817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/szhswl/" target="_blank">宋针q?/a> 2007-12-23 17:11 <a href="http://www.aygfsteel.com/szhswl/articles/169817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">̶</a>| <a href="http://" target="_blank">«ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Ӫɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӽ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˫Ѽɽ</a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϽϽ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">ػ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">կ</a>| <a href="http://" target="_blank">޻</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̩˳</a>| <a href="http://" target="_blank">̷</a>| <a href="http://" target="_blank">书</a>| <a href="http://" target="_blank">Ԫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϰ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>