Sprievodca po údajových objektoch Java
1. Prehľad
Java Data Objects je API určené na uchovanie objektovo orientovaných údajov do akejkoľvek databázy a poskytuje užívateľsky príjemný dotazovací jazyk pomocou syntaxe Java.
V tomto článku sa pozrieme na to, ako používať JDO API na pretrvávanie našich objektov v databáze.
2. Závislosti a nastavenie Maven
Budeme používať rozhranie DataNucleus JDO API, ktoré je aktuálne a ponúka úplnú podporu rozhrania JDO 3.2 API.
Pridajme k našej nasledujúcej závislosti pom.xml spis:
org.datanucleus javax.jdo 3.2.0-m6 org.datanucleus datanucleus-core 5.1.0-m2 org.datanucleus datanucleus-api-jdo 5.1.0-m2 org.datanucleus datanucleus-rdbms 5.1.0-m2 org.datanucleus datanucleus -xml 5.0.0-vydanie
Najnovšie verzie závislostí nájdete tu: javax.jdo, datanucleus-core, datanucleus-api-jdo, datanucleus-rdbms a datanucleus-xml.
3. Model
Chystáme sa uložiť naše údaje do databázy a predtým, ako to urobíme, musíme vytvoriť triedu, ktorú bude JDO používať na ukladanie našich údajov.
Aby sme to dosiahli, musíme vytvoriť triedu s niektorými vlastnosťami a anotovať ju pomocou @PersistentCapable:
@PersistenceCapable verejná trieda Produkt {@PrimaryKey @Persistent (valueStrategy = IdGeneratorStrategy.INCREMENT) dlhé ID; Názov reťazca; Dvojnásobná cena = 0,0; // štandardné konštruktory, getre, setre}
Taktiež sme anotovali náš primárny kľúč a zvolenú stratégiu.
Len čo vytvoríme náš objekt, musíme spustiť vylepšovač, aby vygeneroval bytecode požadovaný JDO. Pomocou Mavenu môžeme spustiť tento príkaz:
mvn datanucleus: vylepšiť
Tento krok je povinný. V opačnom prípade dostaneme chybu kompilácie, že trieda nie je vylepšená.
Samozrejme, je to možné urobiť automaticky počas zostavovania Maven:
org.datanucleus datanucleus-maven-plugin 5.0.2 JDO $ {basedir} /datanucleus.properties $ {basedir} /log4j.properties vylepšené skutočné triedy procesov
Najnovšiu verziu pluginu nájdete tu: datanucleus-maven-plugin
4. Pretrvávajúce objekty
Získame prístup do databázy pomocou továrne JDO, ktorá nám poskytuje správcu transakcií, ktorý je zodpovedný za vykonávanie transakcií:
PersistenceManagerFactory pmf = nový JDOPersistenceManagerFactory (pumd, null); PersistenceManager pm = pmf.getPersistenceManager ();
Transakcie slúžia na umožnenie vrátenia platby v prípade chyby:
Transakcia tx = pm.currentTransaction ();
Naše transakcie uskutočňujeme vo vnútri a Skús chytiť blok:
Produkt produkt = nový produkt („Tablet“, 80,0); pm.makePersistent (produkt);
V našom konečne bloku definujeme tieto operácie, ktoré sa majú vykonať v prípade poruchy.
Ak z nejakého dôvodu nie je možné transakciu dokončiť, vykonáme vrátenie platby a tiež ukončíme spojenie s databázou pomocou pm.close ():
nakoniec {if (tx.isActive ()) {tx.rollback (); } pm.close (); }
Na pripojenie nášho programu k databáze musíme vytvoriť a jednotka perzistencie za behu, aby ste určili trvalé triedy, typ databázy a parametre pripojenia:
PersistenceUnitMetaData pumd = nové PersistenceUnitMetaData ("dynamická jednotka", "RESOURCE_LOCAL", null); pumd.addClassName ("com.baeldung.jdo.Product"); pumd.setExcludeUnlistedClasses (); pumd.addProperty ("javax.jdo.option.ConnectionDriverName", "org.h2.Driver"); pumd .addProperty ("javax.jdo.option.ConnectionURL", "jdbc: h2: mem: mypersistence"); pumd.addProperty ("javax.jdo.option.ConnectionUserName", "sa"); pumd.addProperty ("javax.jdo.option.ConnectionPassword", ""); pumd.addProperty ("datanucleus.autoCreateSchema", "true");
5. Čítanie objektov
Ak chcete čítať údaje z našej databázy v našom bloku transakcií, vytvoríme dotaz. Potom tieto položky uložíme do Java Zoznam kolekcia, ktorá bude obsahovať kópiu informácií z trvalej pamäte v pamäti.
Správca vytrvalosti nám poskytuje prístup k rozhraniu dotazov, ktoré nám umožňuje komunikovať s databázou:
Dopyt q = pm.newQuery ("VYBERTE Z" + Product.class.getName () + "KDE cena <1"); Zoznam produktov = (Zoznam) q.execute (); Iterátor iter = products.iterator (); while (iter.hasNext ()) {Produkt p = iter.next (); // zobraziť informácie o produkte}
6. Aktualizácia objektov
Na aktualizáciu objektov v databáze musíme nájsť objekty, ktoré chceme aktualizovať pomocou dotazu, potom aktualizujeme výsledky dotazu a vykonáme transakciu:
Dotaz na dopyt = pm.newQuery (Product.class, "name == \" Telefón \ ""); Výsledok zbierky = (Zbierka) query.execute (); Produkt produkt = (Produkt) result.iterator (). Next (); product.setName ("telefón Android");
7. Mazanie objektov
Podobne ako pri aktualizácii, najskôr vyhľadáme objekt a potom ho odstránime pomocou správcu perzistencie. V týchto situáciách JDO aktualizuje trvalé úložisko:
Dotaz na dopyt = pm.newQuery (Product.class, "name == \" Android Phone \ ""); Výsledok zbierky = (Zbierka) query.execute (); Produkt produkt = (Produkt) result.iterator (). Next (); pm.deletePersistent (produkt);
8. Dátové úložiská XML
Pomocou doplnku XML môžeme na uchovanie našich údajov použiť súbory XML.
Upresňujeme naše ConnectionURL s uvedením, že ide o súbor XML, a so zadaním názvu súboru: Dátové úložisko XML nepodporuje vlastnosť automatického prírastku, takže musíme vytvoriť ďalšiu triedu: The @XmlAttribute anotácia označuje, že sa to v súbore XML objaví ako atribút prvku. Vytvorme a zotrvajme na našom produkte: Produkt dostaneme uložený v súbore XML: Naše objekty môžeme obnoviť zo súboru XML pomocou dotazu: A potom pomocou iterátora interagujeme s každým objektom. JDOQL je objektový dotazovací jazyk určený na vykonávanie dotazov pomocou objektov Java. Pomocou deklaratívneho dotazu deklarujeme parametre a nastavujeme ich pomocou Javy, čím je zaistená bezpečnosť typu: JDO poskytuje mechanizmus na vykonávanie štandardných dotazov SQL: Používame javax.jdo.query.SQL ako jeden parameter pre objekt dotazu a druhým parametrom je samotný SQL. JDO poskytuje mechanizmus aj na vykonávanie dotazov JPA. Môžeme použiť úplnú syntax dotazovacieho jazyka JPA: V tomto výučbe: Ako vždy, kód z článku nájdete na Githube.pumdXML.addProperty ("javax.jdo.option.ConnectionURL", "xml: file: myPersistence.xml");
@PersistenceCapable () verejná trieda ProductXML {@XmlAttribute private long productNumber = 0; @PrimaryKey private Názov reťazca = null; súkromná dvojitá cena = 0,0; // štandardné getre a setre
ProductXML productXML = nový ProductXML (0, "Tablet", 80.0); pm.makePersistent (productXML);
Tableta 80,0
8.1. Obnovte objekty z dátového úložiska XML
Dopyt q = pm.newQuery ("VYBERTE Z" + ProductXML.class.getName ()); Zoznam produktov = (Zoznam) q.execute ();
9. Dotazy JDO
9.1. Deklaratívne JDOQL
Dopyt qDJDOQL = pm.newQuery (Product.class); qDJDOQL.setFilter ("name == 'Tablet' && price == price_value"); qDJDOQL.declareParameters ("dvojnásobná cena_hodnota"); Zoznam výsledkov qDJDOQL = qDJDOQL.setParameters (80.0) .executeList ();
9.2. SQL
Dotaz na dotaz = pm.newQuery ("javax.jdo.query.SQL", "SELECT * Z PRODUKTU"); query.setClass (Product.class); Zoznam výsledkov = query.executeList ();
9.3. JPQL
Dopyt q = pm.newQuery ("JPQL", "SELECT p OD" + Product.class.getName () + "p KDE p.name = 'laptop'"); Zoznam výsledkov = (Zoznam) q.execute ();
10. Zhrnutie