5¡¢ JPQL
JPQL£¨JavaPersistence Query Language£©£¬ÊÇ»ùÓÚʵÌåµÄ²éѯ£¬Ëù²éѯµÄÄÚÈݶ¼ÊÇʵÌå»òʵÌåÊôÐÔ¡£
5.1¡¢²éѯʵÌå
SELECT c FROM Customer c
JPQLÓï¾äÓëSQL»ù±¾ÀàËÆ£¬µ«ËüÊÇ»ùÓÚʵÌåµÄ²éѯ¡£ÔÚ³õ´ÎʹÓÃʱ£¬ÐèҪעÒâÒÔϼ¸¸öÎÊÌâ¡£
1) ʵÌåÃûºÍÊôÐÔÇø·Ö´óСд£»
2) JPQLÖеı£Áô¹Ø¼ü×Ö²»Çø·Ö´óСд£»
3) ±êʶʵÌåµÄ±ðÃû£¬Ò²²»Çø·Ö´óСд£»
4) ʵÌåµÄ±ðÃû¿ÉÒÔʹÓÃAS¹Ø¼ü×ÖÀ´±êʶ£¬AS¹Ø¼ü×ÖÒ²¿ÉÒÔÊ¡ÂÔ£»
5.2¡¢ÊµÌåÊôÐÔ
²éѯʱÈç¹ûʹÓÃÁËʵÌåµÄ±ðÃû£¬ÔÚSELECT²éѯʱ±ã¿ÉÒÔÒýÓøÃʵÌåµÄÊôÐÔ£¨¶ø²»ÊDZíµÄ×Ö¶ÎÃû£©£¬ÈçÏÂ:
SELECT c.name FROM Customer c
Èç¹û²éѯµÄʵÌåÊôÐÔÊÇÁíÒ»¸öʵÌ壨һ¶ÔÒ»¹ØÏµ£©£¬Ò²¿ÉÒÔͨ¹ýÊôÐÔºó¡°.¡±À´»ñµÃʵÌåµÄÊôÐÔ£¬ÈçÏÂ
SELECT c.address FROM Customer c
SELECT c.address.street FROM Customer c£¨¶à¼¶µ¼º½£©
?
5.3¡¢¹ØÁª²éѯ
JPAÌṩÁËÁ½ÖÖÏÔʾ¹ØÁªÊµÌåµÄ·½Ê½£¬·Ö±ðΪÄÚÁ¬½Ó£¨INNERJOIN£©ºÍ×óÍâÁ¬½Ó£¨LEFTOUTER JOIN£©¡£
Ê×ÏȻعËÏ´«Í³SQLÖеÄÄÚÁ¬½Ó¡¢ÍâÁ¬½Ó¡¢×óÁ¬½Ó¡¢ÓÒÁ¬½Ó·½Ê½¡£¼ÙÉèÓбítb_customerºÍ±ítb_order·Ö±ð¶ÔӦʵÌåCustomerºÍOrder£¬±íÖÐÊý¾ÝÈçÏÂ
tb_customerÊý¾Ý
| id |
name |
email |
address_id |
| 1 |
zhangsan |
zhangsan@163.com |
6 |
| 2 |
lisi |
lisi@163.com |
7 |
| 3 |
wangwu |
wangwu@163.com |
8 |
?
tb_orderÊý¾Ý
| id |
num |
customer_id |
create_date |
| 5 |
10002 |
1 |
? |
| 6 |
10003 |
1 |
? |
| 7 |
10004 |
5 |
? |
| 8 |
10005 |
1 |
? |
| 9 |
10006 |
3 |
? |
1) ÄÚÁ¬½Ó
ÄÚÁ¬½Ó²éѯҲ½Ð×ÔÈ»Á¬½Ó²éѯ£¬ËüÊÇÁ½¸ö±í¹ØÁªµÄ×îС¼¯ºÏ¡£Ò²¾ÍÊÇ˵£¬×ó±íÖеÄÊý¾ÝºÍÓÒ±íÖеÄÊý¾Ý¶¼´æÔÚʱ²Å»á¹ØÁª£¬²¢ÇÒÖ´ÐÐÄÚÁ¬½Ó²éѯʱ²»»á³öÏÖnullÖµ¡£ÈçÖ´ÐÐÏÂÃæµÄSQLÓï¾ä
SELECT * from tb_customer c INNER JOIN tb_order o ONc.id=o.customer_id
²éѯµÄ½á¹ûÈçÏÂ
| c.id |
c.name |
o.id |
o.num |
o.customer_id |
| 1 |
zhangsan |
5 |
10002 |
1 |
| 1 |
zhangsan |
6 |
10003 |
1 |
| 1 |
zhangsan |
8 |
10005 |
1 |
| 3 |
wangwu |
9 |
10006 |
3 |
×ó±íΪtb_customer£¬ÓÒ±íΪtb_oreder¡£×ó±íÖÐid=2µÄ¼Ç¼£¬ÔÚÓÒ±íÖв»´æÔÚ¡£ÓÒ±íÖÐid=7µÄ¼Ç¼£¬ÔÚ×ó±íÖÐÒ²²»´æÔÚ£¬ËùÒÔÔÚʹÓÃÄÚÁ¬½Ó²éѯʱ²»´æÔÚ×ÅÁ½ÏîÊý¾Ý¡£
2) ×óÁ¬½Ó
×óÁ¬½ÓÊÇÒÔ×ó±íΪ»ù´¡£¬Èç¹ûÓÒ±íµÄÊý¾ÝÓйØÁªÔòÏÔʾ£¬Èç¹ûÓÒ±íÖÐûÓÐÊý¾ÝÔòÏÔʾΪnull¡£Ò²¾ÍÊÇ˵×óÁ¬½Ó²éѯµÄÈ«²¿ÊÇ×ø±êµÄÊý¾Ý£¬¶øÓÒ±íµÄÊý¾Ý²»Ò»¶¨ÊÇÈ«²¿µÄ£¬ÈçÏÂ
SELECT * from tb_customer c LEFT JOIN tb_order o ONc.id=o.customer_id
| c.id |
c.name |
o.id |
o.num |
o.customer_id |
| 1 |
zhangsan |
5 |
10002 |
1 |
| 1 |
zhangsan |
6 |
10003 |
1 |
| 1 |
zhangsan |
8 |
10005 |
1 |
| 2 |
lisi |
null |
null |
null |
| 3 |
wangwu |
9 |
10006 |
3 |
?
3) ÓÒÁ¬½Ó²éѯ
ÓÒÁ¬½Ó²éѯÓë×óÁ¬½Ó²éѯÏà·´£¬ËüÊÇÒÔÓÒ±íΪ²éѯ»ù´¡¡£Èç¹û×ó±íÊý¾ÝÓйØÁªÔòÏÔʾ£¬Ã»ÓÐÔòÏÔʾnull¡£ÈçÏÂ
SELECT * from tb_customer c RIGHT JOIN tb_order o ONc.id=o.customer_id
| c.id |
c.name |
o.id |
o.num |
o.customer_id |
| 1 |
zhangsan |
5 |
10002 |
1 |
| 1 |
zhangsan |
6 |
10003 |
1 |
| null |
null |
7 |
10004 |
5 |
| 1 |
zhangsan |
8 |
10005 |
1 |
| 3 |
wangwu |
9 |
10006 |
3 |
4) ÍâÁ¬½Ó²éѯ
ÍâÁ¬½Ó²éѯÊÇÏà¶ÔÓÚÄÚÁ¬½Ó²éѯÀ´ËµµÄ£¬×ܵÄÀ´Ëµ×óÁ¬½Ó²éѯºÍÓÒÁ¬½Ó²éѯ¶¼ÊôÓÚÍâÁ¬½Ó²éѯ£¬Ö»²»¹ýÊÇ·½Ïò²»Í¬¶øÒÑ¡£
±íÁ¬½Ó²éѯµÄ¹ØÏµÈçÏÂͼËùʾ:

Ó봫ͳµÄSQLÓï¾äÏà±È£¬JPAÖ»ÌṩÁËÁ½ÖÖ·½Ê½µÄ±íÁ¬½Ó:ÄÚÁ¬½ÓºÍ×óÁ¬½Ó¡£
l ÄÚÁ¬½Ó
ÄÚÁ¬½ÓÊÇ×î³£ÓõÄÁ¬½Ó·½Ê½£¬Á¬½Óºó¹ØÁªÊý¾Ý²»»á³öÏÖnullÖµ£¬Óï·¨ÈçÏÂ:
[INNER] JOIN
SELECT c,o FROM Customer c JOIN c.orders o
l ×óÁ¬½Ó
×óÁ¬½ÓÒ²¿ÉÒÔ½Ð×ö×óÍâÁ¬½Ó£¬ËüÊÇÒÔ×ó±íΪ»ù´¡£¬¹ØÁªÓÒ±í¡£Á¬½ÓºóÓÒ±íÖеÄÊý¾Ý¿ÉÄÜΪnullÖµ£¬ÈçÏÂ
LEFT[OUTER] JOIN
SELECT c,o FROMCustomer c LEFT JOIN c.orders o
´Ëʱ£¬²éѯ½á¹ûÊÇËùÓеĿͻ§£¬¼´Ê¹¿Í»§Ã»Óж©µ¥£¬Ò²ÊÇ¿ÉÒÔ²éѯµ½µÄ¡£
l ץȡÁ¬½Ó
ʵÌåÊôÐԵļÓÔØÓÐÁ½ÖÖ·½Ê½£¬·ÖΪ¼´Ê±¼ÓÔØºÍÀÁ¼ÓÔØ¡£Í¬Ñù£¬¶ÔÓÚʵÌ幨ÁªµÄ²éѯ£¬Ò²¿ÉÒÔÉèÖòéѯʱµÄ¼ÓÔØ·½Ê½£¬Õâ¾ÍÊÇץȡÁ¬½Ó£¬ÈçÏÂ
[LEFT|INNER] JOIN FETCH
¼òµ¥µØËµÔÚJOIN¹Ø¼ü×Öºó¼ÓÉÏFETCH¹Ø¼ü×Ö£¬Ôò±íʾ²éѯΪץȡ²éѯ¡£ÊÂʵÉÏץȡÁ¬½ÓÖ÷ÒªÕë¶ÔʵÌåÊôÐÔΪÀÁ¼ÓÔØ·½Ê½µÄ£¬Ê¹ÓÃÄÚÁ¬½Ó²¢Ã»ÓмÓÔØ¹ØÁªµÄʵÌ壬ÈçÏÂ
SELECT c FROM Customer c JOIN c.orders o
´ËʱÔÚ¿Í»§¶Ëµ÷ÓÃgetOrders·½·¨½«Å׳öÒì³£¡£µ«Èô½«¹ØÁª²éѯÉèÖÃΪץȡ·½Ê½£¬ÈçÏÂ
SELECT c FROM Customer c JOIN FETCH
Ôò²éѯ½á¹ûµÄcustomer¶ÔÐÔÒѼÓÔØËù¹ØÁªµÄordersÊôÐÔ¡£
l ΨһÐÔ
µ±½øÐÐÁ¬½Ó²éѯʱ£¬Í¨³£»á²úÉúÒ»Ð©ÖØ¸´Êý¾Ý£¬ÈôҪȥµôÖØ¸´µÄÊý¾Ý£¬ÔÚ¹ØÁª²éѯʱ¿ÉÒÔʹÓÃDISTINCT¹Ø¼ü×Ö£¬ÈçÏÂ
SELECT DISTINCT c FROM Customer c JOIN c.orders o
5.4¡¢²Ù×÷·û
WHEREÌõ¼þ±í´ïʽ¿ÉÒÔ°üº¬±È½Ï²Ù×÷·ûºÍÂß¼²Ù×÷·û,ÈçÏÂ
l ±È½Ï²Ù×÷·û
=¡¢>¡¢>=¡¢<¡¢<=¡¢<>¡¢[NOT]BETWEEN¡¢[NOT]LIKE¡¢
[NOT] BETWEEN¡¢[NOT] IN¡¢IS [NOT] NULL¡¢IS [NOT]EMPTY¡¢[NOT]MEMBER OF
l Âß¼²Ù×÷·û
NOT¡¢AND¡¢OR
5.5¡¢BETWEEN
BETWEEN ²Ù×÷·ûÊDzéѯֵÔÚijһ¸öÖ¸¶¨·¶Î§ÄÚµÄËõд£¬Óï·¨ÈçÏÂ:
[NOT] BETWEEN ·¶Î§ÖµÒ» AND ·¶Î§Öµ¶þ
SELECT c FROM Customer WHRER c.asset BETWEEN 1000.0 and2000.0
5.6¡¢IN
IN²Ù×÷·û¿ÉÒÔ²éѯÔÚÖ¸¶¨µÄ¶à¸öÖµ£¬Óï·¨ÈçÏÂ:
[NOT] IN (Öµ{,Öµ}*|×Ó²éѯ)
5.7¡¢LIKE
LIKE ²Ù×÷·ûÓÃÀ´²éѯƥÅäÖ¸¶¨µÄ×Ö·û´®£¬Æ¥Åä×Ö·û´®µÄ¹Ø¼ü×Ö·ûÓÐÒÔÏÂÁ½ÖÖ:
1) Ï»Ïß¡°_¡±£º±íʾƥÅäijһ¸ö×Ö·û£»
2) °Ù·ÖºÅ:±íʾƥÅäÁã¸ö»ò¶à¸ö×Ö·û£»
Èç¹ûÒª²éѯµÄ×Ö·û´®´æÔÚ¡°_¡±»ò¡°%¡±,ÔòÐèÒªÔÚÆ¥ÅäµÄ×Ö·û´®Ç°×ªÒÆ×Ö·û¡°