JDO là m t giao di n chu n giúp cho vi c l u tr các đ i t ng có ch a d li u vào trong m t c s d li u. Gói giao di n này cho phép s d ng các truy v n đ l y v các đ i t ng trong database, đ c, ghi d li u, và t ng tác v i m t c s d li u b ng cách s d ng các Transaction. M t ng d ng s d ng gói JDO có th làm vi c v i m t lo i database khác mà không c n m t lo i liên k t đ c bi t nào, bao g m c c s d li u quan h , c s d li u phân c p và c s d li u h ng đ i t ng. C ng nh các gói h tr khác, JDO đ n gi n hóa các gi i pháp l u tr khác nhau
Hình 2.8 Mô hình JDO
̇ C u hình s d ng
JDO có th truy c p datastore, chúng ta c n ph i làm nh ng đi u sau v i App Engine:
• Nh ng file jar c a JDO và plugin DataNucleus c a App Engine ph i đ c đ t trong th m c war/WEB-INF/lib/
• T o file c u hình tên jdoconfig.xml và đ t nó trong th m c war/WEB-INF/classes/META-INF/
• Khi biên d ch project ph i có m t b c biên d ch “đ c bi t” đ các l p d li u đ c biên d ch và k t h p chúng v i JDO.
N u chúng ta s d ng Google plugin dành cho Eclipse thì c 3 b c trên chúng ta đ u đ c Eclipse làm h . Ti p sau s đi vào chi ti t nh ng c u hình trong file jdoconfig.xml:
Hình 2.9 C u hình JDO trong Google App Engine
̇ nh ngh a d li u v i JDO
M i đ i t ng đ c l u tr b ng JDO là m t th c th trong Datastore c a GAE. Lo i c a th c th chính là tên c a class. khai báo m t class l u tr trong datastore v i JDO, ta thêm t khóa @PersistenceCapable tr c khai báo l p. Các thu c tính trong class ph i thêm t khóa @Persistent tr c khai báo thu c tính. M t l p d li u ph i có m t khóa chính trong class. t o khóa chính ph i thêm t khóa @PrimaryKey tr c khai báo thu c tính khóa chính. M t thu c tính trong class có th có m t ho c nhi u giá tr , JDO h tr các Collection đ ch a nhi u giá tr trong m t thu c tính. Các Collection mà JDO h tr là: • java.util.ArrayList<...> • java.util.HashSet<...> • java.util.LinkedHashSet<...> • java.util.LinkedList<...> • java.util.List<...> • java.util.Set<...> • java.util.SortedSet<...> • java.util.Stack<...>
• java.util.TreeSet<...>
• java.util.Vector<...>
N u ki u d li u đ c khai báo là List thì thu c tính đó s tr v ki u ArrayList, n u ki u là Set thì datastore s tr v HashSet, n u thu c tính đ c khai báo là SortedSet thì ki u datastore tr v là TreeSet.
̇ T o m i, L y v và xóa d li u trong JDO
Chúng ta t o m i đ i t ng v i các thu c tính và g i ph ng th c makePersistent() c a PersistenceManager đ t o m i d li u trong Datastore. ghi nhi u đ i t ng đ ng th i vào Datastore, g i ph ng th c makePersistentAll(...) v i m t t p Collection các objects
Các đ i t ng đ c l y v nh vào khóa chính c a đói t ng. GAE cung c p ph ng th c getObjectById()c a PersistenceManager đ l y v m t đ i t ng thông qua khóa chính. M t trong nh ng cách đ c p nh t d li u đó chính là l y v đ i t ng đó và g i hàm set đ gán l i giá tr cho các thu c tính trong đ i t ng c a datastore
xóa đ i t ng ra kh i datastore, g i hàm deletePersistent() c a PersistenceManager . Mu n xóa t t c các đ i t ng thu c class đó g i deletePersistentAll(...).
̇ Java Data Object Query Language (JDOQL)
JDO dùng m t ngôn th trong truy v n d li u đ c g i là Java Data Object Query Language(JDOQL) .JDOQL t ng t nh là SQL, nh ng nó thích ng h n v i database d ng h ng đ i t ng gi ng nh Database App Engine. App Engine không h tr câu l nh truy v n SQL trong JDO. t o m i query:
C u trúc ng pháp c a JDOQL:
SELECT [UNIQUE] [<result>] [INTO <result-class>] [FROM <candidate-class> [EXCLUDE SUBCLASSES]] [WHERE <filter>]
[VARIABLES <variable declarations>] [PARAMETERS <parameter declarations>] [<import declarations>]
[GROUP BY <grouping>] [ORDER BY <ordering>] [RANGE <start>, <end>]
̇ Các phép toán mà JDO h tr :
• <less than
• <=less than or equal to
• =equal to
• >greater than
• >=greater than or equal to
• !=not equal to
• contains() (t ng t nh IN trong SQL)
Ngoài ra query còn h tr các ph ng th c s p x p,l c k t qu trong m t kho ng là setOrdering() và setRange()