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:

pumdXML.addProperty ("javax.jdo.option.ConnectionURL", "xml: file: myPersistence.xml");

Dátové úložisko XML nepodporuje vlastnosť automatického prírastku, takže musíme vytvoriť ďalšiu triedu:

@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

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:

ProductXML productXML = nový ProductXML (0, "Tablet", 80.0); pm.makePersistent (productXML);

Produkt dostaneme uložený v súbore XML:

 Tableta 80,0 

8.1. Obnovte objekty z dátového úložiska XML

Naše objekty môžeme obnoviť zo súboru XML pomocou dotazu:

Dopyt q = pm.newQuery ("VYBERTE Z" + ProductXML.class.getName ()); Zoznam produktov = (Zoznam) q.execute ();

A potom pomocou iterátora interagujeme s každým objektom.

9. Dotazy JDO

JDOQL je objektový dotazovací jazyk určený na vykonávanie dotazov pomocou objektov Java.

9.1. Deklaratívne JDOQL

Pomocou deklaratívneho dotazu deklarujeme parametre a nastavujeme ich pomocou Javy, čím je zaistená bezpečnosť typu:

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

JDO poskytuje mechanizmus na vykonávanie štandardných dotazov SQL:

Dotaz na dotaz = pm.newQuery ("javax.jdo.query.SQL", "SELECT * Z PRODUKTU"); query.setClass (Product.class); Zoznam výsledkov = query.executeList ();

Používame javax.jdo.query.SQL ako jeden parameter pre objekt dotazu a druhým parametrom je samotný SQL.

9.3. JPQL

JDO poskytuje mechanizmus aj na vykonávanie dotazov JPA. Môžeme použiť úplnú syntax dotazovacieho jazyka JPA:

Dopyt q = pm.newQuery ("JPQL", "SELECT p OD" + Product.class.getName () + "p KDE p.name = 'laptop'"); Zoznam výsledkov = (Zoznam) q.execute ();

10. Zhrnutie

V tomto výučbe:

  • vytvoril jednoduchú aplikáciu CRUD, ktorá používa JDO
  • uložili a načítali naše údaje ako XML
  • skúmali spoločné mechanizmy dotazovania

Ako vždy, kód z článku nájdete na Githube.


$config[zx-auto] not found$config[zx-overlay] not found