1¡£Á¬½ÓÊý¾Ý¿âʹÓÃJDBC£¬ÎªÊ²Ã´ÓÖÌṩÁËJPA£¿HibernateÓëJPAµÄ¹Øϵ£¿
ʲôÊÇJPA
Java Persistence API
JPAͨ¹ýJDK 5.0×¢½â»òXMLÃèÊö¶ÔÏó£¹Øϵ±íµÄÓ³Éä¹Øϵ£¬²¢½«ÔËÐÐÆÚµÄʵÌå¶ÔÏó³Ö¾Ã»¯µ½Êý¾Ý¿âÖС£
SunÒýÈëеÄJPA ORM¹æ·¶³öÓÚÁ½¸öÔÒò£ºÆäÒ»£¬¼ò»¯ÏÖÓÐJava EEºÍJava SEÓ¦ÓõĶÔÏó³Ö¾Ã»¯µÄ¿ª·¢¹¤×÷£»Æä¶þ£¬SunÏ£ÍûÕûºÏ¶ÔORM¼¼Êõ£¬ÊµÏÖÌìϹéÒ»¡£
JPAÓÉEJB 3.0Èí¼þר¼Ò×鿪·¢£¬×÷ΪJSR-220ʵÏÖµÄÒ»²¿·Ö¡£µ«Ëü²»àóÓÚEJB 3.0£¬Äã¿ÉÒÔÔÚWebÓ¦Óá¢ÉõÖÁ×ÀÃæÓ¦ÓÃÖÐʹÓá£JPAµÄ×ÚÖ¼ÊÇΪPOJOÌṩ³Ö¾Ã»¯±ê×¼¹æ·¶£¬Óɴ˿ɼû£¬¾¹ýÕ⼸ÄêµÄʵ¼ù̽Ë÷£¬Äܹ»ÍÑÀëÈÝÆ÷¶ÀÁ¢ÔËÐУ¬·½±ã¿ª·¢ºÍ²âÊÔµÄÀíÄîÒѾÉîÈëÈËÐÄÁË¡£Ä¿Ç°Hibernate 3.2¡¢TopLink 10.1.3ÒÔ¼°OpenJPA¶¼ÌṩÁËJPAµÄʵÏÖ¡£
JPAµÄ×ÜÌå˼ÏëºÍÏÖÓÐHibernate¡¢TopLink£¬JDOµÈORM¿ò¼Ü´óÌåÒ»Ö¡£×ܵÄÀ´Ëµ£¬JPA°üÀ¨ÒÔÏÂ3·½ÃæµÄ¼¼Êõ£º
ORMÓ³ÉäÔªÊý¾Ý£¬JPAÖ§³ÖXMLºÍJDK 5.0×¢½âÁ½ÖÖÔªÊý¾ÝµÄÐÎʽ£¬ÔªÊý¾ÝÃèÊö¶ÔÏóºÍ±íÖ®¼äµÄÓ³Éä¹Øϵ£¬¿ò¼Ü¾Ý´Ë½«ÊµÌå¶ÔÏó³Ö¾Ã»¯µ½Êý¾Ý¿â±íÖУ»
JPA µÄAPI£¬ÓÃÀ´²Ù×÷ʵÌå¶ÔÏó£¬Ö´ÐÐCRUD²Ù×÷£¬¿ò¼ÜÔÚºǫ́ÌæÎÒÃÇÍê³ÉËùÓеÄÊÂÇ飬¿ª·¢Õß´Ó·±ËöµÄJDBCºÍSQL´úÂëÖнâÍѳöÀ´¡£
²éѯÓïÑÔ£¬ÕâÊdz־û¯²Ù×÷ÖкÜÖØÒªµÄÒ»¸ö·½Ã棬ͨ¹ýÃæÏò¶ÔÏó¶ø·ÇÃæÏòÊý¾Ý¿âµÄ²éѯÓïÑÔ²éѯÊý¾Ý£¬±ÜÃâ³ÌÐòµÄSQLÓï¾ä½ôÃÜñîºÏ¡£
Èý¡¢JPAµÄÓÅÊÆ
1 ±ê×¼»¯
JPA ÊÇ JCP ×éÖ¯·¢²¼µÄ Java EE ±ê×¼Ö®Ò»£¬Òò´ËÈκÎÉù³Æ·ûºÏ JPA ±ê×¼µÄ¿ò¼Ü¶¼×ñÑͬÑùµÄ¼Ü¹¹£¬ÌṩÏàͬµÄ·ÃÎÊ API£¬Õâ±£Ö¤ÁË»ùÓÚJPA¿ª·¢µÄÆóÒµÓ¦ÓÃÄܹ»¾¹ýÉÙÁ¿µÄÐ޸ľÍÄܹ»ÔÚ²»Í¬µÄJPA¿ò¼ÜÏÂÔËÐС£
2 ¶ÔÈÝÆ÷¼¶ÌØÐÔµÄÖ§³Ö
JPA ¿ò¼ÜÖÐÖ§³Ö´óÊý¾Ý¼¯¡¢ÊÂÎñ¡¢²¢·¢µÈÈÝÆ÷¼¶ÊÂÎñ£¬ÕâʹµÃ JPA ³¬Ô½Á˼òµ¥³Ö¾Ã»¯¿ò¼ÜµÄ¾ÖÏÞ£¬ÔÚÆóÒµÓ¦Ó÷¢»Ó¸ü´óµÄ×÷Óá£
3 ¼òµ¥Ò×Ó㬼¯³É·½±ã
JPAµÄÖ÷ҪĿ±êÖ®Ò»¾ÍÊÇÌṩ¸ü¼Ó¼òµ¥µÄ±à³ÌÄ£ÐÍ£ºÔÚJPA¿ò¼ÜÏ´´½¨ÊµÌåºÍ´´½¨Java ÀàÒ»Ñù¼òµ¥£¬Ã»ÓÐÈκεÄÔ¼ÊøºÍÏÞÖÆ£¬Ö»ÐèҪʹÓà javax.persistence.Entity½øÐÐ×¢ÊÍ£»JPAµÄ¿ò¼ÜºÍ½Ó¿ÚÒ²¶¼·Ç³£¼òµ¥£¬Ã»ÓÐÌ«¶àÌرðµÄ¹æÔòºÍÉè¼ÆģʽµÄÒªÇ󣬿ª·¢Õß¿ÉÒÔºÜÈÝÒ×µÄÕÆÎÕ¡£JPA»ùÓÚ·ÇÇÖÈëʽÔÔòÉè¼Æ£¬Òò´Ë¿ÉÒÔºÜÈÝÒ׵ĺÍÆäËü¿ò¼Ü»òÕßÈÝÆ÷¼¯³É¡£
4 ¿ÉæÇÃÀJDBCµÄ²éѯÄÜÁ¦
JPAµÄ²éѯÓïÑÔÊÇÃæÏò¶ÔÏó¶ø·ÇÃæÏòÊý¾Ý¿âµÄ£¬ËüÒÔÃæÏò¶ÔÏóµÄ×ÔÈ»Óï·¨¹¹Ôì²éѯÓï¾ä£¬¿ÉÒÔ¿´³ÉÊÇHibernate HQLµÄµÈ¼ÛÎï¡£JPA¶¨ÒåÁ˶ÀÌصÄJPQL£¨Java Persistence Query Language£©£¬JPQLÊÇEJB QLµÄÒ»ÖÖÀ©Õ¹£¬ËüÊÇÕë¶ÔʵÌåµÄÒ»ÖÖ²éѯÓïÑÔ£¬²Ù×÷¶ÔÏóÊÇʵÌ壬¶ø²»ÊǹØϵÊý¾Ý¿âµÄ±í£¬¶øÇÒÄܹ»Ö§³ÖÅúÁ¿¸üкÍÐ޸ġ¢JOIN¡¢GROUP BY¡¢HAVING µÈͨ³£Ö»ÓÐ SQL ²ÅÄܹ»ÌṩµÄ¸ß¼¶²éѯÌØÐÔ£¬ÉõÖÁ»¹Äܹ»Ö§³Ö×Ó²éѯ¡£
5 Ö§³ÖÃæÏò¶ÔÏóµÄ¸ß¼¶ÌØÐÔ
JPA ÖÐÄܹ»Ö§³ÖÃæÏò¶ÔÏóµÄ¸ß¼¶ÌØÐÔ£¬ÈçÀàÖ®¼äµÄ¼Ì³Ð¡¢¶à̬ºÍÀàÖ®¼äµÄ¸´ÔÓ¹Øϵ£¬ÕâÑùµÄÖ§³ÖÄܹ»Èÿª·¢Õß×î´óÏ޶ȵÄʹÓÃÃæÏò¶ÔÏóµÄÄ£ÐÍÉè¼ÆÆóÒµÓ¦Ó㬶ø²»ÐèÒª×ÔÐд¦ÀíÕâЩÌØÐÔÔÚ¹ØϵÊý¾Ý¿âµÄ³Ö¾Ã»¯¡£
ËÄ¡¢JPAµÄ¹©Ó¦ÉÌ
JPA µÄÄ¿±êÖ®Ò»ÊÇÖƶ¨Ò»¸ö¿ÉÒÔÓɺܶ๩ӦÉÌʵÏÖµÄAPI£¬²¢ÇÒ¿ª·¢ÈËÔ±¿ÉÒÔ±àÂëÀ´ÊµÏÖ¸ÃAPI£¬¶ø²»ÊÇʹÓÃ˽Óй©Ó¦ÉÌÌØÓеÄAPI¡£Òò´Ë¿ª·¢ÈËÔ±Ö»ÐèʹÓù©Ó¦ÉÌÌØÓеÄAPIÀ´»ñµÃJPA¹æ·¶Ã»Óнâ¾öµ«Ó¦ÓóÌÐòÖÐÐèÒªµÄ¹¦ÄÜ¡£¾¡¿ÉÄܵØʹÓÃJPA API£¬µ«Êǵ±ÐèÒª¹©Ó¦É̹«¿ªµ«Êǹ淶ÖÐûÓÐÌṩµÄ¹¦ÄÜʱ£¬ÔòʹÓù©Ó¦ÉÌÌØÓеÄAPI¡£
1 Hibernate
JPAÊÇÐèÒªProviderÀ´ÊµÏÖÆ书Äܵģ¬Hibernate¾ÍÊÇJPA ProviderÖкÜÇ¿µÄÒ»¸ö£¬Ä¿Ç°À´ËµÓ¦¸ÃÎÞÈËÄܳöÆäÓÒ¡£´Ó¹¦ÄÜÉÏÀ´Ëµ£¬JPAÏÖÔÚ¾ÍÊÇHibernate¹¦ÄܵÄÒ»¸ö×Ó¼¯¡£Hibernate ´Ó3.2¿ªÊ¼£¬¾Í¿ªÊ¼¼æÈÝJPA¡£Hibernate3.2»ñµÃÁËSun TCKµÄJPA(Java Persistence API) ¼æÈÝÈÏÖ¤¡£
Ö»ÒªÊìϤHibernate»òÕßÆäËûORM¿ò¼Ü£¬ÔÚʹÓÃJPAʱ»á·¢ÏÖÆäʵ·Ç³£ÈÝÒ×ÉÏÊÖ¡£ÀýÈçʵÌå¶ÔÏóµÄ״̬£¬ÔÚHibernateÓÐ×ÔÓÉ¡¢³Ö¾Ã¡¢ÓÎÀëÈýÖÖ£¬JPAÀïÓÐnew£¬managed£¬detached£¬removed£¬Ã÷ÑÛÈËÒ»¿´¾ÍÖªµÀ£¬ÕâЩ״̬¶¼ÊÇÒ»Ò»¶ÔÓ¦µÄ¡£ÔÙÈçflush·½·¨£¬¶¼ÊǶÔÓ¦µÄ£¬¶øÆäËûµÄÔÙÈç˵Query query = manager.createQuery(sql)£¬ËüÔÚHibernateÀïд·¨ÉÏÊÇsession£¬¶øÔÚJPAÖбä³ÉÁËmanager£¬ËùÒÔ´ÓHibernateµ½JPAµÄ´ú¼ÛÓ¦¸ÃÊǷdz£Ð¡µÄ
ͬÑù£¬JDO£¬Ò²¿ªÊ¼¼æÈÝJPA¡£ÔÚORMµÄÁìÓòÖУ¬¿´À´JPAÒѾÊÇÍõµÀ£¬¹æ·¶¾ÍÊǹ淶¡£ÔÚ¸÷´ó³§É̵ÄÖ§³ÖÏ£¬JPAµÄʹÓÿªÊ¼±äµÃ¹ã·º¡£
2 Spring
Spring + Hibernate ³£³£±»³ÆΪ Java Web Ó¦ÓÃÈËÆø×îÍúµÄ¿ò¼Ü×éºÏ¡£¶øÔÚ JCP ͨ¹ýµÄ Web Beans JSR £¬È´Óû½«JSF + EJB + JPA ¡¢À´×Ô JBoss Seam£¨Spring ³ýÍ⣩µÄһЩ×é¼þºÍEJB 3£¨Ä¿Ç°Äܹ»ÌṩÓлù±¾À¹½ØºÍÒÀÀµ×¢È빦Äܵļò»¯ Session Bean ¿ò¼Ü£©µÄÒ»¸ö Web ×éºÏ½øÐбê×¼»¯¡£Èç½ñµÄ Spring 2.0 Ϊ JPA ÌṩÁËÍêÕûµÄ EJB ÈÝÆ÷ÆõÔ¼£¬ÔÊÐí JPAÔÚÈκλ·¾³ÄÚ¿ÉÒÔÔÚ Spring ¹ÜÀíµÄ·þÎñ²ãʹÓ㨰üÀ¨ Spring µÄËùÓÐ AOP ºÍ DI ÔöÇ¿£©¡£Í¬Ê±£¬¹ØÓÚÏÂÒ»¸öWebÓ¦ÓÃ×éºÏ»áÊÇ EJB¡¢Spring + Hibernate »¹ÊÇ Spring + JPA µÄÂÛÕ½£¬ÔçÒѳä³âÓÚ¶ú¡£
ÔÚSpring 2.0.1ÖУ¬ÕýʽÌṩ¶ÔJPAµÄÖ§³Ö£¬ÕâÒ²´Ù³ÉÁËJPAµÄ·¢Õ¹£¬ÒªÖªµÀJPAµÄºÃ´¦ÔÚÓÚ¿ÉÒÔ·ÖÀëÓÚÈÝÆ÷ÔËÐУ¬±äµÃ¸ü¼ÓµÄ¼ò½à¡£
3 OpenJPA
OpenJPA ÊÇ Apache ×éÖ¯ÌṩµÄ¿ªÔ´ÏîÄ¿£¬ËüʵÏÖÁË EJB 3.0 ÖÐµÄ JPA ±ê×¼£¬Îª¿ª·¢ÕßÌṩ¹¦ÄÜÇ¿´ó¡¢Ê¹Óüòµ¥µÄ³Ö¾Ã»¯Êý¾Ý¹ÜÀí¿ò¼Ü¡£OpenJPA ·â×°Á˺͹ØϵÐÍÊý¾Ý¿â½»»¥µÄ²Ù×÷£¬Èÿª·¢Õß°Ñ×¢ÒâÁ¦¼¯ÖÐÔÚ±àдҵÎñÂß¼ÉÏ¡£OpenJPA ¿ÉÒÔ×÷Ϊ¶ÀÁ¢µÄ³Ö¾Ã²ã¿ò¼Ü·¢»Ó×÷Óã¬Ò²¿ÉÒÔÇáËɵÄÓëÆäËü Java EE Ó¦Óÿò¼Ü»òÕß·ûºÏ EJB 3.0 ±ê×¼µÄÈÝÆ÷¼¯³É¡£
4 ÆäËü
Ä¿Ç°Ö§³ÖµÄʵÏÖ°üÀ¨Toplink¡¢Hibernate EntitymanagerµÈ¡£TopLinkÒÔÇ°ÐèÒªÊÕ·Ñ£¬Èç½ñ¿ªÔ´ÁË¡£OpenJPAËäÈ»Ãâ·Ñ£¬µ«¹¦ÄÜ¡¢ÐÔÄÜ¡¢ÆÕ¼°ÐԵȷ½Ãæ¸ü¼ÓÐèÒª¼Ó´óÁ¦¶È¡£
¶ÔÓÚEJBÀ´Ëµ£¬ÊµÌåBeanÒ»Ö±ÊDZ»ÅúÆÀµÄ¶ÔÏó£¬ÓÉÓÚÆäÌ«¸´ÔÓºÍÅÓ´ó¡£JPAµÄ³öÏÖ£¬ºÜ´ó³Ì¶ÈµÄ·ÖÀëÁ˸´ÔÓÐÔ¡£ÕâÈÃEJBµÄÍƹãÒ²±äµÃÈÝÒס£
×ܶøÑÔÖ®£¬JPA¹æ·¶Ö÷Òª¹Ø×¢µÄ½öÊÇAPIµÄÐÐΪ·½Ã棬¶øÓɸ÷ÖÖʵÏÖÍê³É´ó¶àÊýÐÔÄÜÓйصĵ÷ÓÅ¡£¾¡¹ÜÈç´Ë£¬ËùÓпɿ¿µÄʵÏÖ¶¼Ó¦¸ÃÓµÓÐijÖÖÊý¾Ý»º´æ£¬ÒÔ×÷ΪѡÔñ¡£µ«Ô¸²»¾ÃµÄ½«À´£¬JPAÄܳÉΪÕæÕýµÄ±ê×¼¡£
Î塢С½á
EJB 3.0ºÍJPA ºÁÎÞÒÉÎʽ«ÊÇJava EE 5µÄÖ÷ÒªÂôµã¡£ÔÚijЩÁìÓòÖУ¬ËüÃǸøJavaÉçÇø´øÀ´Á˾ºÕùÓÅÊÆ£¬²¢Ê¹J