Hibernate¨DÐÔÄÜÓÅ»¯Ö®»º´æ¹ÜÀí(Ò»)

2014-11-24 02:47:55 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 0

1.»º´æ¸ÅÊö

»º´æ(cache)ÔÚjavaÓ¦ÓóÌÐòÖÐÊÇÒ»×éÄÚ´æÖеļ¯ºÏʾÀý£¬Ëü±£´æ×ÅÓÀ¾ÃÐÔ´æ´¢Ô´(ÈçÓ²ÅÌÉϵÄÎļþ»òÊý¾Ý¿â)ÖÐÊý¾ÝµÄ±¸·Ý£¬ËüµÄ¶ÁдËٶȱȶÁдӲÅ̵ÄËٶȿ졣ӦÓóÌÐòÔÚÔËÐÐʱֱ½Ó¶Áд»º´æÖеÄÊý¾Ý£¬Ö»ÔÚÄ³Ð©ÌØ¶¨Ê±¿Ì°´ÕÕ»º´æÖеÄÊý¾ÝÀ´Í¬²½¸üÐÂÊý¾Ý´æ´¢Ô´¡£Èç¹û»º´æÖдæ·ÅµÄÊý¾ÝÁ¿·Ç³£´ó£¬Ò²»áÓÃÓ²ÅÌ×÷Ϊ»º´æµÄÎïÀí½éÖÊ

»º´æµÄ×÷ÓþÍÊǽµµÍÓ¦ÓóÌÐòÖ±½Ó¶ÁдÓÀ¾ÃÐÔÊý¾Ý´æ´¢Ô´µÄƵÂÊ£¬´Ó¶øÔöǿӦÓõÄÔËÐÐÐÔÄÜ

»º´æµÄʵÏÖ²»½öÐèÒª×÷ΪÎïÀí½éÖʵÄÓ²¼þ£¨Äڴ棩£¬Í¬Ê±»¹ÐèÒªÓÃÓÚ¹ÜÀí»º´æµÄ²¢·¢·ÃÎʺ͹ýÆÚµÈ²ßÂÔµÄÈí¼þ

2.»º´æ·¶Î§·ÖÀà

»º´æµÄ·¶Î§¾ö¶¨ÁË»º´æµÄÉùÃ÷ÖÜÆÚÒÔ¼°¿ÉÒÔ±»Ë­·ÃÎÊ¡£×ܹ²·ÖÈýÀà

1£©ÊÂÎñ·¶Î§


ÊÂÎñ·¶Î§µÄ»º´æÖ»Äܱ»µ±Ç°ÊÂÎñ·ÃÎÊ,ÿ¸öÊÂÎñ¶¼Óи÷×ԵĻº´æ,»º´æÄÚµÄÊý¾Ýͨ³£²ÉÓÃÏ໥¹ØÁªµÄ¶ÔÏóÐÎʽ.»º´æµÄÉúÃüÖÜÆÚÒÀÀµÓÚÊÂÎñµÄÉúÃüÖÜÆÚ,Ö»Óе±ÊÂÎñ½áÊøÊ±,»º´æµÄÉúÃüÖÜÆÚ²Å»á½áÊø.ÊÂÎñ·¶Î§µÄ»º´æÊ¹ÓÃÄÚ´æ×÷Ϊ´æ´¢½éÖÊ,Ò»¼¶»º´æ¾ÍÊôÓÚÊÂÎñ·¶Î§.


2£©Ó¦Ó÷¶Î§£¨Ò²½Ð½ø³Ì·¶Î§£©


Ó¦ÓóÌÐòµÄ»º´æ¿ÉÒÔ±»Ó¦Ó÷¶Î§ÄÚµÄËùÓÐÊÂÎñ¹²Ïí·ÃÎÊ.»º´æµÄÉúÃüÖÜÆÚÒÀÀµÓÚÓ¦ÓõÄÉúÃüÖÜÆÚ,Ö»Óе±Ó¦ÓýáÊøÊ±,»º´æµÄÉúÃüÖÜÆÚ²Å»á½áÊø.Ó¦Ó÷¶Î§µÄ»º´æ¿ÉÒÔʹÓÃÄÚ´æ»òÓ²ÅÌ×÷Ϊ´æ´¢½éÖÊ,¶þ¼¶»º´æ¾ÍÊôÓÚÓ¦Ó÷¶Î§.


3£©¼¯Èº·¶Î§


ÔÚ¼¯Èº»·¾³ÖÐ,»º´æ±»Ò»¸ö»úÆ÷»ò¶à¸ö»úÆ÷µÄ½ø³Ì¹²Ïí,»º´æÖеÄÊý¾Ý±»¸´ÖƵ½¼¯Èº»·¾³ÖеÄÿ¸ö½ø³Ì½Úµã,½ø³Ì¼äͨ¹ýÔ¶³ÌͨÐÅÀ´±£Ö¤»º´æÖеÄÊý¾ÝµÄÒ»ÖÂ,»º´æÖеÄÊý¾Ýͨ³£²ÉÓöÔÏóµÄËÉÉ¢Êý¾ÝÐÎʽ.


¶Ô´ó¶àÊýÓ¦ÓÃÀ´Ëµ£¬Ó¦¸ÃÉ÷ÖØµØ¿¼ÂÇÊÇ·ñÐèҪʹÓü¯Èº·¶Î§µÄ»º´æ£¬ÒòΪ·ÃÎʵÄËٶȲ»Ò»¶¨»Ø±ÜÖ±½Ó·ÃÎÊÊý¾Ý¿âÊý¾ÝµÄËÙ¶È¿ìºÜ¶à


3.»º´æµÄ²¢·¢·ÃÎʲßÂÔ

µ±¶à¸ö²¢·¢µÄʧÎóͬʱ·ÃÎʳ־û¯²ãµÄ»º´æµÄÏàͬÊý¾Ýʱ£¬»áÒý·¢Æð²¢·¢ÎÊÌ⣬±ØÐë²ÉÓñØÒªµÄʧÎó¸ôÀë´ëÊ©

ÔÚ½ø³Ì·¶Î§»ò¼¯Èº·¶Î§µÄ»º´æ£¬»á³öÏÖ²¢·¢ÎÊÌ⣬Òò´Ë¿ÉÒÔÉ趨һÏÂËÄÖÖÀàÐ͵IJ¢·¢·ÃÎʲßÂÔ£¬Ã¿Ò»ÖÖ²ßÂÔ¶ÔÓ¦Ò»ÖÖÊÂÎñ¸ôÀë¼¶±ð¡£ÊÂÎñÐͲ¢·¢·ÃÎʲßÂÔÊÇÊÂÎñ¸ôÀë¼¶±ð×î¸ß£¬Ö»¶ÁÐ͵ĸôÀë¼¶±ð×îµÍ¡£ÊÂÎñ¸ôÀë¼¶±ðÔ½¸ß£¬²¢·¢ÐÔÄܾÍÔ½µÍ


¡¡1£©ÊÂÎñÐÍ£º½ö½öÔÚÊܹÜÀí»·¾³ÖÐÊÊÓá£ËüÌṩÁËRepeatable ReadÊÂÎñ¸ôÀë¼¶±ð¡£¶ÔÓÚ¾­³£±»¶Áµ«ºÜÉÙÐ޸ĵÄÊý¾Ý£¬¿ÉÒÔ²ÉÓÃÕâÖÖ¸ôÀëÀàÐÍ£¬ÒòΪËü¿ÉÒÔ·ÀÖ¹Ôà¶ÁºÍ²»¿ÉÖØ¸´¶ÁÕâÀàµÄ²¢·¢ÎÊÌâ¡£


¡¡2£©¶ÁдÐÍ£ºÌṩÁËRead CommittedÊÂÎñ¸ôÀë¼¶±ð¡£½ö½öÔڷǼ¯ÈºµÄ»·¾³ÖÐÊÊÓ᣶ÔÓÚ¾­³£±»¶Áµ«ºÜÉÙÐ޸ĵÄÊý¾Ý£¬¿ÉÒÔ²ÉÓÃÕâÖÖ¸ôÀëÀàÐÍ£¬ÒòΪËü¿ÉÒÔ·ÀÖ¹Ôà¶ÁÕâÀàµÄ²¢·¢ÎÊÌâ¡£


¡¡3£©·ÇÑϸñ¶ÁдÐÍ£º²»±£Ö¤»º´æÓëÊý¾Ý¿âÖÐÊý¾ÝµÄÒ»ÖÂÐÔ¡£Èç¹û´æÔÚÁ½¸öÊÂÎñͬʱ·ÃÎÊ»º´æÖÐÏàͬÊý¾ÝµÄ¿ÉÄÜ£¬±ØÐëΪ¸ÃÊý¾ÝÅäÖÃÒ»¸öºÜ¶ÌµÄÊý¾Ý¹ýÆÚʱ¼ä£¬´Ó¶ø¾¡Á¿±ÜÃâÔà¶Á¡£¶ÔÓÚ¼«ÉÙ±»Ð޸쬲¢ÇÒÔÊÐíż¶ûÔà¶ÁµÄÊý¾Ý£¬¿ÉÒÔ²ÉÓÃÕâÖÖ²¢·¢·ÃÎʲßÂÔ¡£ ¡¡¡¡


4£©Ö»¶ÁÐÍ£º¶ÔÓÚ´ÓÀ´²»»áÐ޸ĵÄÊý¾Ý£¬Èç²Î¿¼Êý¾Ý£¬¿ÉÒÔʹÓÃÕâÖÖ²¢·¢·ÃÎʲßÂÔ¡£


HibernateÖеĻº´æ

hibernateÖÐÌṩÁ½¼¶»º´æ£¬µÚÒ»¼¶±ðÊÇSession¼¶±ðµÄ»º´æ£¬ËüÊÇÊôÓÚÊÂÎñ·¶Î§µÄ»º´æ£¬µÚ¶þ¼¶±ðµÄ»º´æÊÇSessionFactory¼¶±ðµÄ»º´æ£¬ËüÊÇÊôÓÚ½ø³öÄØ¸ö·¶Î§»ò¼¯Èº·¶Î§µÄ»º´æ¡£ÕâÒ»¼¶±ðµÄ»º´æ¿ÉÒÔ½øÐÐÅäÖú͸ü¸Ä£¬²¢ÇÒ¿ÉÒÔ½øÐж¯Ì¬µÄ¼ÓÔØºÍÐ¶ÔØ¡£Hibernate»¹Îª²éѯ½á¹ûÌṩÁËÒ»¸ö²éѯ»º´æ£¬ËüÒÀÀµÓÚµÚ¶þ¼¶»º´æ


Ò»¼¶»º´æµÄ¹ÜÀí:

HibernateµÄÒ»¼¶»º´æÊÇÓÉSessionÌṩµÄ£¬Òò´ËËüÖ»´æÔÚÓÚSessionµÄÉúÃüÖÜÆÚÖУ¬µ±³ÌÐòµ÷ÓÃsave(),update(),saveorupdate()µÈ·½·¨ ¼°µ÷Óòéѯ½Ó¿Úlist,filter,iterateʱ£¬Èçsession»º´æÖл¹²»´æÔÚÏàÓ¦µÄ¶ÔÏó£¬Hibernate»á°Ñ¸Ã¶ÔÏó¼ÓÈëµ½Ò»¼¶»º´æÖУ¬
µ±Session¹Ø±ÕµÄʱºò¸ÃSessionËù¹ÜÀíµÄÒ»¼¶»º´æÒ²»áÁ¢¼´±»Çå³ý
HibernateµÄÒ»¼¶»º´æÊÇSessionËùÄÚÖõ쬲»Äܱ»Ð¶ÔØ£¬Ò²²»ÄܽøÐÐÈκÎÅäÖÃ

Ò»¼¶»º´æ²ÉÓõÄÊÇkey-valueµÄMap·½Ê½À´ÊµÏֵģ¬ÔÚ»º´æÊµÌå¶ÔÏóʱ£¬¶ÔÏóµÄÖ÷¹Ø¼ü×ÖIDÊÇMapµÄkey£¬ÊµÌå¶ÔÏó¾ÍÊǶÔÓ¦µÄÖµ¡£ËùÒÔ˵£¬Ò»¼¶»º´æÊÇÒÔʵÌå¶ÔÏóΪµ¥Î»½øÐд洢µÄ£¬ÔÚ·ÃÎʵÄʱºòʹÓõÄÊÇÖ÷¹Ø¼ü×ÖID
ËäÈ»£¬Hibernate¶ÔÒ»¼¶»º´æÊ¹ÓõÄÊÇ×Ô¶¯Î¬»¤µÄ¹¦ÄÜ£¬Ã»ÓÐÌṩÈκÎÅäÖù¦ÄÜ£¬µ«ÊÇ¿ÉÒÔͨ¹ýSessionÖÐËùÌṩµÄ·½·¨À´¶ÔÒ»¼¶»º´æµÄ¹ÜÀí½øÐÐÊÖ¹¤¸ÉÔ¤¡£SessionÖÐËùÌṩµÄ¸ÉÔ¤·½·¨°üÀ¨ÒÔÏÂÁ½ÖÖ
¡ñevict() £ºÓÃÓÚ½«Ä³¸ö¶ÔÏó´ÓSessionµÄÒ»¼¶»º´æÖÐÇå³ý
evict()·½·¨ÊÊÓÃÓÚÒÔ϶þÖÖÇé¿ö£º
£±£©²»ÐèÒª¸Ã¶ÔÏó½øÐÐͬ²½µÄÊý¾Ý¸üÐÂ
£²£©ÔÚÅúÁ¿½øÐиüÐÂÓëɾ³ýʱ£¬µ±¸üÐÂɾ³ýÿһ¸ö¶ÔÏóºó£¬ÒªÊͶԴ˶ÔÏóËùÕ¼ÓõÄÄڴ森

¡ñclear() £ºÓÃÓÚ½«Ò»¼¶»º´æÖеÄËùÓжÔÏóÈ«²¿Çå³ý¡£



ÔÚ½øÐдóÅúÁ¿Êý¾ÝÒ»´ÎÐÔ¸üеÄʱºò£¬»áÕ¼Ó÷dz£¶àµÄÄÚ´æÀ´»º´æ±»¸üеĶÔÏó¡£Õâʱ¾ÍÓ¦¸Ã½×¶ÎÐԵص÷ÓÃclear()·½·¨À´Çå¿ÕÒ»¼¶»º´æÖеĶÔÏ󣬿ØÖÆÒ»¼¶»º´æµÄ´óС£¬ÒÔ±ÜÃâ²úÉúÄÚ´æÒç³öµÄÇé¿ö¡£
Hibernate´óÅúÁ¿¸üÐÂʱ»º´æµÄ´¦Àí·½·¨:
(¼ÙÉèÎÒÃÇuser±íµÄageÓÐ5000Ìõ´óÓÚ0µÄ¼Ç¼,)
Session session =SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Itertaor users=session.find("from User u where u.age>0").itertaor();//HSLÓï¾ä¾Í²»×ö½âÊÍÁË
while(user.hasNext()){
User user =(User)users.next();
user.setAge(user.getAge()+1);
//½«±¾Åú²åÈëµÄ¶ÔÏóÁ¢¼´Ð´ÈëÊý¾Ý¿â²¢ÊÍ·ÅÄÚ´æ
session.flush();
session.clear();
}
tx.commit();
session.close();
ÓÃHibernate´¦Àí´óÅúÊý¾Ýʱ..¶¼±ØÐëÏÈÖ´ÐÐ5000´ÎµÄupdateÓï¾ä,È»ºó²ÅÄܸüÐÂ5000¸öuser ¶ÔÏó..
ÕâÑù¾ÍÓ°Ïìµ½Á˲Ù×÷ÉϵÄÐÔÄÜ....ÔÚÏîÄ¿µ±ÎÒÃÇÓöµ½ÐÔÄÜÓë¿Õ¼äµÄÎÊÌâʱ,,,ÒªÒÔÐÔÄÜΪÖ÷..ÕâÒ²¾ÍÊÇ˵ҪÎþÉü¿Õ¼ä

ËùÒÔ³ÌÐò×îºÃÌø¹ýHibernate API ¶øÖ±½Óͨ¹ýJDBC APIÀ´Ö´À´...

ÎÒÃǸÄÒ»ÏÂÉÏÃæµÄ´úÂë:
Session session=SessionFactory.openSession();
Transaction tx =session.beginTransaction();
Connection conn =session.connection();
PreparedStatement pstmt = conn.prepareStatement("update users set age=age+1 "+"where age >0");
pstmt.executeUpdate();
tx.commit();
Ëä˵ÕâÊÇͨ¹ýJDBC API¸ã×÷µÄ..µ«±¾ÖÊÉÏ»¹ÊÇͨ¹ýHibernater TransactionµÄÊÂÎñÕâ¸ö½Ó¿ÚÀ´ÉùÃ÷ÊÂÎñµÄ±ß½çµÄ...

Æäʵ×îºÃµÄ½â¾ö·½·¨¾ÍÊÇÒÔ´´½¨´æ´¢¹ý³Ì,,ÓõײãµÄÊý¾Ý¿âÔËÐÐ.