ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩亚洲精品电影,久久久99爱,91在线网站http://www.aygfsteel.com/kevinzheng/zh-cnThu, 24 Jul 2025 07:52:44 GMTThu, 24 Jul 2025 07:52:44 GMT60- Hibernateä¸å¦‚ä½•é«˜æ•ˆå¤„ç†æ“v釿•°æ?/title><link>http://www.aygfsteel.com/kevinzheng/archive/2008/12/19/247401.html</link><dc:creator>kevinzheng</dc:creator><author>kevinzheng</author><pubDate>Fri, 19 Dec 2008 14:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/kevinzheng/archive/2008/12/19/247401.html</guid><wfw:comment>http://www.aygfsteel.com/kevinzheng/comments/247401.html</wfw:comment><comments>http://www.aygfsteel.com/kevinzheng/archive/2008/12/19/247401.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kevinzheng/comments/commentRss/247401.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kevinzheng/services/trackbacks/247401.html</trackback:ping><description><![CDATA[<p>最˜q‘一直常常看到别人javaeye¾|‘站上看到别人在问在hibernateæ€Žä¹ˆæ ·å¤„ç†æ“v釿•°æ®ï¼Œæ€Žä¹ˆæ äh高性能åQŒæœ¬äººåœ¨CSDNåšå®¢ä¸Šçœ‹åˆ°è¿™½‹‡å¥½çš„æ–‡ç« ,òq¶ç»“åˆæœ¬äºÞZ¸€ä¸€éªŒè¯ ¼‹®å®žå¦‚作者所è¯?故拿出æ¥å’Œå¤§å®¶åˆ†äº«ã€‚希望对åˆå¦HIBERNATEæ¡†æž¶çš„æœ‹å‹æœ‰æ‰€å¸®åŠ©ã€?<br />
Hibernate扚w‡å¤„熋¹·é‡å…¶å®žä»Žæ€§èƒ½ä¸Šè€ƒè™‘åQŒå®ƒæ˜¯å¾ˆä¸å¯å–çš„åQŒæµªè´¹äº†å¾ˆå¤§çš„内å˜ã€‚从它的机制上讲åQŒHibernate它是先把½W¦åˆæ¡äšgçš„æ•°æ®æŸ¥å‡ºæ¥åQŒæ”¾åˆ°å†…å˜å½“ä¸ï¼Œç„¶åŽå†è¿›è¡Œæ“作。实际ä‹Éç”¨ä¸‹æ¥æ€§èƒ½éžå¸¸ä¸ç†æƒ»I¼Œåœ¨ç¬”者的实际使用ä¸é‡‡ç”¨ä¸‹é¢çš„½W¬ä¸‰¿Uä¼˜åŒ–æ–¹æ¡ˆçš„æ•°æ®æ˜¯ï¼š100000æ¡æ•°æ®æ’入数æ®åº“åQ?nbsp;需è¦çº¦30分钟åQŒå‘µå‘µï¼Œæ™•倒。(本äh10分钟æ’å…¥1000000æ¡æ•°æ®ï¼ˆå—段比较ž®ï¼‰æˆ‘的爱机是å®åŸºAspire 4920åQ?<br />
æ€È»“ä¸‹æ¥æœ‰ä¸‰¿Uæ¥å¤„ç†ä»¥è§£å†Ïx€§èƒ½é—®é¢˜åQ?</p>
<p> 1åQšç»•˜q‡Hibernate API åQŒç›´æŽ¥é€šè¿‡ JDBC API æ¥åšåQŒè¿™ä¸ªæ–¹æ³•性能上是比较好的。也是最快的ã€?</p>
<p> 2åQšè¿ç”¨å˜å‚¨è¿‡½E‹ã€?</p>
<p><br />
3åQšè¿˜æ˜¯ç”¨Hibernate API æ¥è¿›è¡Œå¸¸è§„的扚w‡å¤„ç†åQŒå¯ä»¥ä¹Ÿæœ‰å˜åQŒå˜ž®±å˜åœ¨ï¼Œæˆ‘们å¯ä»¥åœ¨æŸ¥æ‰‘Ö‡ºä¸€å®šçš„é‡çš„æ—¶å€™ï¼ŒåŠæ—¶çš„å°†˜q™äº›æ•°æ®åšå®Œæ“作ž®?</p>
<p><br />
åˆ æŽ‰åQŒsession.flushåQˆï¼‰åQ›session.evictåQˆXX对象集)åQ?˜q™æ ·ä¹Ÿå¯ä»¥æŒ½æ•‘一ç‚ÒŽ€§èƒ½æŸå¤±ã€‚è¿™ä¸?#8220;一定的é‡?#8221;è¦å°±è¦æ ¹æ®å®žé™…情况åšå®šé‡å‚è€ƒäº†ã€‚ä¸€èˆ¬äØ“30-60å·¦å³åQŒä½†æ•ˆæžœä»ç„¶ä¸ç†æƒŸë€?</p>
<p> 1åQšç»•˜q‡Hibernate API åQŒç›´æŽ¥é€šè¿‡ JDBC API æ¥åšåQŒè¿™ä¸ªæ–¹æ³•性能上是比较好的åQŒä¹Ÿæ˜¯æœ€å¿«çš„。(实例ä¸?æ›´æ–°æ“作åQ?</p>
<p> </p>
<p> Transaction tx=session.beginTransactionåQˆï¼‰åQ?//注æ„用的是hibernate事务处ç†è¾¹ç•Œ </p>
<p><br />
Connection conn=session.connectionåQˆï¼‰åQ?</p>
<p><br />
PreparedStatement stmt=conn.preparedStatementåQ?update CUSTOMER as C set C.sarlary=c.sarlary+1 where c.sarlary>1000"åQ‰ï¼› </p>
<p> </p>
<p> stmt.excuteUpdateåQˆï¼‰åQ?</p>
<p> tx.commitåQˆï¼‰åQ?//注æ„用的是hibernate事务处ç†è¾¹ç•Œ </p>
<p><br />
˜q™å°½E‹åºä¸ï¼Œé‡‡ç”¨çš„æ˜¯ç›´æŽ¥è°ƒç”¨JDBC çš„API æ¥è®¿é—®æ•°æ®åº“åQŒæ•ˆçŽ‡å¾ˆé«˜ã€‚é¿å…了Hibernate 先查询出æ¥åŠ è½½åˆ°å†…å˜åQŒå†˜q›è¡Œæ“作引å‘的性能问题 </p>
<p> </p>
<p> �</p>
<p> 2åQšè¿ç”¨å˜å‚¨è¿‡½E‹ã€‚但˜q™ç§æ–¹å¼è€ƒè™‘到易æ¤å’Œ½E‹åºéƒ¨çÖv的方便性,ä¸å¾è®®ä‹É用。(实例ä¸?æ›´æ–°æ“作åQ?</p>
<p> </p>
<p> 如果底层数æ®åº“(如OracleåQ‰æ”¯æŒå˜å‚¨è¿‡½E‹ï¼Œä¹Ÿå¯ä»¥é€šè¿‡å˜å‚¨˜q‡ç¨‹æ¥æ‰§è¡Œæ‰¹é‡æ›´æ–°ã€‚å˜å‚¨è¿‡½E‹ç›´æŽ¥åœ¨æ•°æ®åº“丘q行åQŒé€Ÿåº¦æ›´åŠ å¿«ã€‚åœ¨Oracleæ•?</p>
<p> æ®åº“ä¸å¯ä»¥å®šä¹‰ä¸€ä¸ªå为batchUpdateCustomeråQˆï¼‰çš„å˜å‚¨è¿‡½E‹ï¼Œä»£ç 如下åQ?</p>
<p> </p>
<p> 代ç 内容create or replace procedure batchUpdateCustomeråQˆp_age in numberåQ?as begin update CUSTOMERS set AGE=AGE+1 where AGE>p_ageåQ›endåQ?</p>
<p> 以上å˜å‚¨˜q‡ç¨‹æœ‰ä¸€ä¸ªå‚æ•°p_ageåQŒä»£è¡¨å®¢æˆïLš„òq´é¾„åQŒåº”用程åºå¯æŒ‰ç…§ä»¥ä¸‹æ–¹å¼è°ƒç”¨å˜å‚¨˜q‡ç¨‹åQ?</p>
<p> 代ç 内容 </p>
<p><br />
tx = session.beginTransactionåQˆï¼‰åQ?</p>
<p><br />
Connection con=session.connectionåQˆï¼‰åQ?</p>
<p><br />
String procedure = "{call batchUpdateCustomeråQˆï¼ŸåQ?}"åQ?</p>
<p><br />
CallableStatement cstmt = con.prepareCallåQˆprocedureåQ‰ï¼› </p>
<p> cstmt.setIntåQ?åQ?åQ‰ï¼› //æŠŠå¹´é¾„å‚æ•°è®¾ä¸? </p>
<p> cstmt.executeUpdateåQˆï¼‰åQ?</p>
<p> tx.commitåQˆï¼‰åQ?</p>
<p><br />
从上é¢ç¨‹åºçœ‹å‡ºï¼Œåº”用½E‹åºä¹Ÿå¿…™åÈ»•˜q‡Hibernate APIåQŒç›´æŽ¥é€šè¿‡JDBC APIæ¥è°ƒç”¨å˜å‚¨è¿‡½E‹ã€?</p>
<p> </p>
<p><br />
3åQšè¿˜æ˜¯ç”¨Hibernate API æ¥è¿›è¡Œå¸¸è§„的扚w‡å¤„ç†åQŒå¯ä»¥ä¹Ÿæœ‰å˜åQŒå˜ž®±å˜åœ¨ï¼Œæˆ‘们å¯ä»¥åœ¨æŸ¥æ‰‘Ö‡ºä¸€å®šçš„é‡çš„æ—¶å€™ï¼ŒåŠæ—¶çš„å°†˜q™äº›æ•°æ®åšå®Œæ“作ž®?</p>
<p> åˆ æŽ‰åQŒsession.flushåQˆï¼‰åQ›session.evictåQˆXX对象集)åQ?˜q™æ ·ä¹Ÿå¯ä»¥æŒ½æ•‘一ç‚ÒŽ€§èƒ½æŸå¤±ã€‚è¿™ä¸?#8220;一定的é‡?#8221;è¦å°±è¦æ ¹æ®å®žé™…情况åšå®šé‡å‚考了…… </p>
<p> </p>
<p> åQˆå®žä¾‹äØ“ ä¿å˜æ“作åQ?</p>
<p><br />
ä¸šåŠ¡é€»è¾‘ä¸ºï¼šæˆ‘ä»¬è¦æƒ³æ•°æ®åº“æ’å…?0 0000 æ¡æ•°æ?</p>
<p> </p>
<p> tx=session.beginTransactionåQˆï¼‰åQ?</p>
<p> foråQˆint i=0åQ›i<100000åQ›i++åQ?</p>
<p><br />
{ </p>
<p> Customer custom=new CustomeråQˆï¼‰åQ?</p>
<p> </p>
<p> custom.setNameåQ?user"+iåQ‰ï¼› </p>
<p><br />
session.saveåQˆcustomåQ‰ï¼› </p>
<p> </p>
<p> ifåQˆi%50==0åQ?// 以æ¯50个数æ®ä½œä¸ÞZ¸€ä¸ªå¤„ç†å•元,也就是我上é¢è¯´çš„“一定的é‡?#8221;åQŒè¿™ä¸ªé‡æ˜¯è¦é…Œæƒ…考虑çš?</p>
<p> </p>
<p> { </p>
<p> session.flushåQˆï¼‰åQ?</p>
<p> session.clearåQˆï¼‰åQ?</p>
<p> </p>
<p> } </p>
<p> } </p>
<p> </p>
<p> ˜q™æ ·å¯ä»¥æŠŠç³»¾lŸç»´æŒåœ¨ä¸€ä¸ªç¨³å®šçš„范围…… </p>
<p> 在项目的开å‘过½E‹ä¹‹ä¸ï¼Œç”׃ºŽ™å¹ç›®éœ€æ±‚ï¼Œæˆ‘ä»¬å¸¸å¸¸éœ€è¦æŠŠå¤§æ‰¹é‡çš„æ•°æ®æ’入到数æ®åº“。数é‡çñ”有万¾U§ã€å万çñ”ã€ç™¾ä¸‡çñ”ã€ç”šè‡›_ƒä¸‡çñ”åˆ«çš„ã€‚å¦‚æ¤æ•°é‡çñ”别的数æ®ç”¨Hibernateåšæ’å…¥æ“作,ž®±å¯èƒ½ä¼šå‘生异常åQŒå¸¸è§çš„异常是OutOfMemoryErroråQˆå†…å˜æº¢å‡ºå¼‚常)ã€?</p>
<p> 首先åQŒæˆ‘ä»¬ç®€å•æ¥å›žé¡¾ä¸€ä¸‹Hibernateæ’å…¥æ“作的机制。Hibernateè¦å¯¹å®ƒå†…部缓å˜è¿›è¡Œç»´æŠ¤ï¼Œå½“我们执行æ’å…¥æ“作时åQŒå°±ä¼šæŠŠè¦æ“作的对象全部攑ֈ°è‡ªèínçš„å†…éƒ¨ç¼“å˜æ¥˜q›è¡Œ½Ž¡ç†ã€?</p>
<p> 谈到Hibernate的缓å˜ï¼ŒHibernate有内部缓å˜ä¸ŽäºŒçñ”¾~“å˜ä¹‹è¯´ã€‚由于Hibernate对这两秾~“å˜æœ‰ç€ä¸åŒçš„ç®¡ç†æœºåˆÓž¼Œå¯¹äºŽäºŒçñ”¾~“å˜åQŒæˆ‘们å¯ä»¥å¯¹å®ƒçš„大尘q›è¡Œç›¸å…³é…ç½®åQŒè€Œå¯¹äºŽå†…部缓å˜ï¼ŒHibernatež®±é‡‡å–了“放ä“Q自浔的æ€åº¦äº†ï¼Œå¯¹å®ƒçš„容é‡åƈ没有é™åˆ¶ã€‚现在症¾l“找åˆîCº†åQŒæˆ‘们嚋¹·é‡æ•°æ®æ’入的时候,生战q™ä¹ˆå¤šçš„对象ž®×ƒ¼šè¢«çº³å…¥å†…部缓å˜ï¼ˆå†…部¾~“å˜æ˜¯åœ¨å†…å˜ä¸åš¾~“å˜çš„)åQŒè¿™æ ·ä½ 的系¾lŸå†…å˜å°±ä¼šä¸€ç‚¹ä¸€ç‚¹çš„被蚕食,如果最åŽç³»¾lŸè¢«æŒ?#8220;ç‚?#8221;了,也就在情ç†ä¹‹ä¸äº†ã€?</p>
<p> 我们æƒÏxƒ³å¦‚何较好的处ç†è¿™ä¸ªé—®é¢˜å‘¢åQŸæœ‰çš„开呿¡ä»¶åˆå¿…须使用Hibernateæ¥å¤„ç†ï¼Œå½“然有的™å¹ç›®æ¯”较ç‰|´»åQŒå¯ä»¥åŽ»å¯ÀL±‚其他的方法ã€?</p>
<p><br />
½W”者在˜q™é‡ŒæŽ¨èä¸¤ç§æ–ÒŽ³•åQšï¼ˆ1åQ‰ï¼šä¼˜åŒ–HibernateåQŒç¨‹åºä¸Šé‡‡ç”¨åˆ†æ®µæ’å…¥åŠæ—¶æ¸…除¾~“å˜çš„æ–¹æ³•ã€?</p>
<p> åQ?åQ‰ï¼š¾l•过Hibernate API åQŒç›´æŽ¥é€šè¿‡ JDBC API æ¥åšæ‰šw‡æ’å…¥åQŒè¿™ä¸ªæ–¹æ³•性能上是最 好的åQŒä¹Ÿæ˜¯æœ€å¿«çš„ã€?</p>
<p> 对于上述ä¸çš„æ–ÒŽ³•1åQŒå…¶åŸºæœ¬æ˜¯æ€èµ\为:优化HibernateåQŒåœ¨é…置文äšgä¸è®¾¾|®hibernate.jdbc.batch_size傿•°åQŒæ¥æŒ‡å®šæ¯æ¬¡æäº¤SQL的数é‡ï¼›½E‹åºä¸Šé‡‡ç”¨åˆ†ŒD‰|’å…¥åŠæ—¶æ¸…除缓å˜çš„æ–ÒŽ³•åQˆSession实现了异æ¥write-behindåQŒå®ƒå…许Hibernate昑ּ地写æ“作的批处ç†åQ‰ï¼Œä¹Ÿå°±æ˜¯æ¯æ’入一定é‡çš„æ•°æ®åŽåŠæ—¶çš„æŠŠå®ƒä»¬ä»Žå†…部缓å˜ä¸æ¸…除掉,释放å 用的内å˜ã€?</p>
<p> 讄¡½®hibernate.jdbc.batch_size傿•°åQŒå¯å‚考如下酾|®ã€?</p>
<p><br />
<hibernate-configuration> <session-factory>…… </p>
<p> </p>
<p> <property name=“ hibernate.jdbc.batch_size”>50</property>…… </p>
<p><br />
<session-factory> <hibernate-configuration> </p>
<p> é…ç½®hibernate.jdbc.batch_size傿•°çš„åŽŸå› å°±æ˜¯å°½é‡å°‘è¯ÀL•°æ®åº“åQŒhibernate.jdbc.batch_size傿•°å€ÆD¶Šå¤§ï¼Œè¯ÀL•°æ®åº“的次数越ž®‘,速度‘Šå¿«ã€‚从上é¢çš„é…¾|®å¯ä»¥çœ‹å‡ºï¼ŒHibernate是ç‰åˆ°ç¨‹åºç§¯ç´¯åˆ°äº?0个SQL之åŽå†æ‰¹é‡æäº¤ã€?</p>
<p> ½W”者也在想åQŒhibernate.jdbc.batch_size傿•°å€ég¹Ÿå¯èƒ½ä¸æ˜¯è®„¡½®å¾—越大越好,从性能角度上讲˜q˜æœ‰å¾…商榗÷€‚è¿™è¦è€ƒè™‘实际情况åQŒé…Œæƒ…设¾|®ï¼Œä¸€èˆ¬æƒ…形设¾|?0ã€?0ž®±å¯ä»¥æ»¡‘³éœ€æ±‚了ã€?</p>
<p> ½E‹åºå®žçŽ°æ–šw¢åQŒç¬”者以æ’å…¥10000æ¡æ•°æ®äؓ例ååQŒå¦‚ </p>
<p> </p>
<p> Session session=HibernateUtil.currentSessionåQˆï¼‰åQ?</p>
<p> Transatcion tx=session.beginTransactionåQˆï¼‰åQ?</p>
<p> foråQˆint i=0åQ›i<10000åQ›i++åQ?</p>
<p> </p>
<p> { </p>
<p> Student st=new StudentåQˆï¼‰åQ?</p>
<p> </p>
<p> st.setNameåQ?#8220;feifei”åQ‰ï¼› </p>
<p> </p>
<p> session.saveåQˆståQ‰ï¼› </p>
<p> ifåQˆi%50==0åQ?//以æ¯50个数æ®ä½œä¸ÞZ¸€ä¸ªå¤„ç†å•å…?</p>
<p> { </p>
<p> session.flushåQˆï¼‰åQ?//ä¿æŒä¸Žæ•°æ®åº“æ•°æ®çš„åŒæ?</p>
<p><br />
session.clearåQˆï¼‰åQ?//清除内部¾~“å˜çš„全部数æ®ï¼ŒåŠæ—¶é‡Šæ”¾å‡ºå ç”¨çš„å†…å˜ </p>
<p> } </p>
<p> } </p>
<p> </p>
<p> tx.commitåQˆï¼‰åQ?</p>
<p> …… </p>
<p> </p>
<p><br />
在一定的数æ®è§„模下,˜q™ç§å𿳕å¯ä»¥æŠŠç³»¾lŸå†…å˜èµ„æºç»´æŒåœ¨ä¸€ä¸ªç›¸å¯¹ç¨³å®šçš„范围ã€?</p>
<p> </p>
<p> 注æ„åQšå‰é¢æåˆîCºŒ¾U§ç¼“å˜ï¼Œ½W”者在˜q™é‡Œæœ‰å¿…è¦å†æä¸€ä¸‹ã€‚如果å¯ç”¨äº†äºŒçñ”¾~“å˜åQŒä»Žæœºåˆ¶ä¸Šè®²Hibernateä¸ÞZº†¾l´æŠ¤äºŒçñ”¾~“å˜åQŒæˆ‘ä»¬åœ¨åšæ’å…¥ã€æ›´æ–°ã€åˆ 除æ“作时åQŒHibernate都会往二çñ”¾~“å˜å……入相应的数æ®ã€‚性能上就会有很大æŸå¤±åQŒæ‰€ä»¥ç¬”者å¾è®®åœ¨æ‰¹å¤„ç†æƒ…况下¼›ç”¨äºŒçñ”¾~“å˜ã€?</p>
<p><br />
对于æ–ÒŽ³•2åQŒé‡‡ç”¨ä¼ ¾lŸçš„JDBC的批处ç†åQŒä‹É用JDBC APIæ¥å¤„ç†ã€?</p>
<p> 些方法请å‚ç…§java 批处ç†è‡ªæ‰§è¡ŒSQL </p>
<p><br />
看看上é¢çš„代ç ï¼Œæ˜¯ä¸æ˜¯æ€»è§‰å¾—有ä¸å¦¥çš„地方?对,没å‘çŽîC¹ˆåQè¿™˜q˜æ˜¯JDBCçš„ä¼ ¾lŸç¼–½E‹ï¼Œæ²¡æœ‰ä¸€ç‚¹Hibernate味é“ã€?</p>
<p> </p>
<p> å¯ä»¥å¯¹ä»¥ä¸Šçš„代ç 修改æˆä¸‹é¢è¿™æ øP¼š </p>
<p> </p>
<p> Transaction tx=session.beginTransactionåQˆï¼‰åQ?//使用Hibernateäº‹åŠ¡å¤„ç† </p>
<p> 边界Connection conn=session.connectionåQˆï¼‰åQ?</p>
<p> PrepareStatement stmt=conn.prepareStatementåQ?#8220;insert into T_STUDENTåQˆnameåQ?valuesåQˆï¼ŸåQ?#8221;åQ‰ï¼› </p>
<p> foråQˆint j=0åQ›j++åQ›j<200åQ‰{ </p>
<p><br />
foråQˆint i=0åQ›i++åQ›j<50åQ?</p>
<p> </p>
<p> { </p>
<p> stmt.setStringåQ?åQ?#8220;feifei”åQ‰ï¼› </p>
<p><br />
} </p>
<p> } </p>
<p> stmt.executeUpdateåQˆï¼‰åQ?</p>
<p> </p>
<p> tx.commitåQˆï¼‰åQ?//使用 Hibernate事务处ç†è¾¹ç•Œ </p>
<p> …… </p>
<p><br />
˜q™æ ·æ”¹åЍž®±å¾ˆæœ‰Hibernate的味é“了。笔者绘q‡æµ‹è¯•,采用JDBC APIæ¥åšæ‰šw‡å¤„ç†åQŒæ€§èƒ½ä¸Šæ¯”使用Hibernate APIè¦é«˜ž®†è¿‘10å€ï¼Œæ€§èƒ½ä¸ŠJDBC å 优˜q™æ˜¯æ— ç–‘çš„ã€?</p>
<p><br />
扚w‡æ›´æ–°ä¸Žåˆ é™?</p>
<p> Hibernate2ä¸ï¼Œå¯¹äºŽæ‰šw‡æ›´æ–°æ“作åQŒHibernate是将½W¦åˆè¦æ±‚çš„æ•°æ®æŸ¥å‡ºæ¥åQŒç„¶åŽå†åšæ›´æ–°æ“作。批é‡åˆ é™¤ä¹Ÿæ˜¯è¿™æ øP¼Œå…ˆæŠŠ½W¦åˆæ¡äšgçš„æ•°æ®æŸ¥å‡ºæ¥åQŒç„¶åŽå†åšåˆ 除æ“作ã€?</p>
<p> ˜q™æ ·æœ‰ä¸¤ä¸ªå¤§¾~ºç‚¹åQšï¼ˆ1åQ‰ï¼šå 用大é‡çš„内å˜ã€?</p>
<p> åQ?åQ‰ï¼šå¤„熋¹·é‡æ•°æ®çš„æ—¶å€™ï¼Œæ‰§è¡Œupdate/deleteè¯å¥ž®±æ˜¯‹¹·é‡äº†ï¼Œè€Œä¸”一æ¡update/deleteè¯å¥åªèƒ½æ“作一个对象,˜q™æ ·é¢‘ç¹çš„æ“ä½œæ•°æ®åº“åQŒæ€§èƒ½ä½Žä¸‹åº”è¯¥æ˜¯å¯æƒŒ™€ŒçŸ¥çš„了ã€?</p>
<p> Hibernate3 å‘布åŽï¼Œå¯Òމ¹é‡æ›´æ–?åˆ é™¤æ“作引入了bulk update/deleteåQŒå…¶åŽŸç†ž®±æ˜¯é€šè¿‡ä¸€æ¡HQLè¯å¥å®Œæˆæ‰šw‡æ›´æ–°/åˆ é™¤æ“作åQŒå¾ˆ¾cÖM¼¼JDBCçš„æ‰¹é‡æ›´æ–?åˆ é™¤æ“作。在性能上,比Hibernate2çš„æ‰¹é‡æ›´æ–?åˆ é™¤æœ‰å¾ˆå¤§çš„æå‡ã€?</p>
<p> Transaction tx=session.beginSessionåQˆï¼‰åQ?</p>
<p> String HQL=“delete STUDENT”åQ?</p>
<p> Query query=session.createQueryåQˆHQLåQ‰ï¼› </p>
<p><br />
int size=query.executeUpdateåQˆï¼‰åQ?</p>
<p> </p>
<p> tx.commitåQˆï¼‰åQ?</p>
<p> </p>
<p> …… </p>
<p> 控制å°è¾“å‡ÞZº†ä¹Ÿå°±ä¸€æ¡åˆ 除è¯å¥HibernateåQšdelete from T_STUDENTåQŒè¯å¥æ‰§è¡Œå°‘了,性能上也与ä‹É用JDBCç›¸å·®æ— å‡ åQŒæ˜¯ä¸€ä¸ªæå‡æ€§èƒ½å¾ˆå¥½çš„æ–¹æ³•ã€‚å½“ç„¶äØ“äº†æœ‰æ›´å¥½çš„æ€§èƒ½åQŒç¬”者å¾è®®æ‰¹é‡æ›´æ–îC¸Žåˆ 除æ“作˜q˜æ˜¯ä½¿ç”¨JDBCåQŒæ–¹æ³•以åŠåŸºæœ¬çš„知识点与上é¢çš„æ‰¹é‡æ’入方æ³?基本相åŒåQŒè¿™é‡Œå°±ä¸åœ¨å†—è¿°ã€?</p>
<p> ½W”è€…è¿™é‡Œå†æä¾›ä¸€ä¸ªæ–¹æ³•ï¼Œž®±æ˜¯ä»Žæ•°æ®åº“端æ¥è€ƒè™‘æå‡æ€§èƒ½åQŒåœ¨Hibernate½E‹åºç«¯è°ƒç”¨å˜å‚¨è¿‡½E‹ã€‚å˜å‚¨è¿‡½E‹åœ¨æ•°æ®åº“端˜q行åQŒé€Ÿåº¦æ›´å¿«ã€‚以扚w‡æ›´æ–°ä¸ÞZ¾‹åQŒç»™å‡ºå‚考代ç ã€?</p>
<p> 首先在数æ®åº“端å¾ç«‹å为batchUpdateStudentå˜å‚¨˜q‡ç¨‹åQ?</p>
<p> create or replace produre batchUpdateStudentåQˆa in numberåQ?as </p>
<p> </p>
<p> begin </p>
<p><br />
update STUDENT set AGE=AGE+1 where AGE>aåQ?</p>
<p><br />
endåQ?</p>
<p> 调用代ç 如下åQ?</p>
<p> </p>
<p> Transaction tx=session.beginSessionåQˆï¼‰åQ?</p>
<p><br />
Connection conn=session.connectionåQˆï¼‰åQ?</p>
<p><br />
String pd=“……{call batchUpdateStudentåQˆï¼ŸåQ‰}”åQ?</p>
<p><br />
CallableStatement cstmt=conn.PrepareCallåQˆpdåQ‰ï¼› </p>
<p> cstmt.setIntåQ?åQ?0åQ‰ï¼› //æŠŠå¹´é¾„è¿™ä¸ªå‚æ•°è®¾ä¸?0 </p>
<p> tx.commitåQˆï¼‰åQ?</p>
<p> 观察上é¢çš„代ç ,也是¾l•过Hibernate APIåQŒä‹Éç”?JDBC APIæ¥è°ƒç”¨å˜å‚¨è¿‡½E‹ï¼Œä½¿ç”¨çš„还是Hibernate的事务边界。å˜å‚¨è¿‡½E‹æ— 疑是æé«˜æ‰šw‡å¤„ç†æ€§èƒ½çš„一个好æ–ÒŽ³•åQŒç›´æŽ¥è¿è¡Œä¸Žæ•°æ®åº“端åQŒæŸ¿U程度上讲把批处ç†çš„压力转接¾l™äº†æ•°æ®åº“ã€?</p>
<p><br />
三:¾~–åŽè¯?</p>
<p> 本文探讨了Hibernateçš„æ‰¹å¤„ç†æ“作åQŒå‡ºå‘点都是在æé«˜æ€§èƒ½ä¸Šè€ƒè™‘äº†ï¼Œä¹Ÿåªæ˜¯æä¾›äº†æå‡æ€§èƒ½çš„ä¸€ä¸ªå°æ–šw¢ã€?</p>
<p> ä¸ç®¡é‡‡å–ä»€ä¹ˆæ ·çš„æ–¹æ³•ï¼Œæ¥æå‡æ€§èƒ½éƒ½è¦æ ÒŽ®å®žé™…的情冉|¥è€ƒè™‘åQŒäؓ用户æä¾›ä¸€ä¸ªæ»¡‘³éœ€æ±‚的而且高效½E›_®šçš„ç³»¾lŸæ‰æ˜¯é‡ä¸ä¹‹ä¸ã€?/p>
<p> </p>
<img src ="http://www.aygfsteel.com/kevinzheng/aggbug/247401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kevinzheng/" target="_blank">kevinzheng</a> 2008-12-19 22:03 <a href="http://www.aygfsteel.com/kevinzheng/archive/2008/12/19/247401.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>