Vodič kroz Java podatke o objektima

1. Pregled

Java Data Objects API je dizajniran za trajno zadržavanje objektno orijentiranih podataka u bilo kojoj bazi podataka i pruža user-friendly jezik upita koristeći Java sintaksu.

U ovom ćemo članku vidjeti kako koristiti JDO API za trajno zadržavanje naših objekata u bazi podataka.

2. Ovisnosti i postavke Mavena

Koristit ćemo DataNucleus JDO API koji je ažuran i nudi punu podršku za JDO 3.2 API.

Dodajmo sljedeću ovisnost na našu pom.xml datoteka:

 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-izdanje 

Najnovije verzije ovisnosti možete pronaći ovdje: javax.jdo, datanucleus-core, datanucleus-api-jdo, datanucleus-rdbms i datanucleus-xml.

3. Model

Spremit ćemo svoje podatke u bazu podataka, a prije nego što to uspijemo moramo stvoriti klasu koju će JDO koristiti za pohranu naših podataka.

Da bismo to učinili, moramo stvoriti klasu s nekim svojstvima i označiti je s @PersistentCapable:

Proizvod javne klase @PersistenceCapable {@PrimaryKey @Persistent (valueStrategy = IdGeneratorStrategy.INCREMENT) long id; Naziv niza; Dvostruka cijena = 0,0; // standardni konstruktori, getteri, postavljači}

Također smo zabilježili svoj primarni ključ i odabranu strategiju.

Jednom kada kreiramo svoj objekt, moramo pokrenuti pojačivač kako bismo generirali bajt kod potreban JDO. Pomoću Mavena možemo pokrenuti ovu naredbu:

mvn datanucleus: poboljšati

Ovaj je korak obvezan. Inače ćemo dobiti pogrešku vremena kompajliranja da klasa nije poboljšana.

Naravno, moguće je to učiniti automatski tijekom gradnje Mavena:

 org.datanucleus datanucleus-maven-plugin 5.0.2 JDO $ {basedir} /datanucleus.properties $ {basedir} /log4j.properties istinske klase procesa poboljšavaju 

Najnoviju verziju dodatka možete pronaći ovdje: datanucleus-maven-plugin

4. Postojani predmeti

Pristup bazi podataka dobivamo pomoću tvornice JDO koja nam daje upravitelja transakcija koji je zadužen za obavljanje transakcija:

PersistenceManagerFactory pmf = novi JDOPersistenceManagerFactory (pumd, null); PersistenceManager pm = pmf.getPersistenceManager (); 

Transakcije se koriste za omogućavanje vraćanja u slučaju pogreške:

Transakcija tx = pm.currentTransaction ();

Transakcije obavljamo u a pokušaj uhvatiti blok:

Proizvod proizvoda = novi proizvod ("Tablet", 80,0); pm.makePersistent (proizvod);

U našem konačno blok, definiramo ove operacije koje će se raditi u slučaju kvara.

Ako se iz bilo kojeg razloga transakcija ne može dovršiti, izvršimo povrat, a vezu s bazom podataka također zatvaramo pomoću pm.close ():

konačno {if (tx.isActive ()) {tx.rollback (); } pm.close (); }

Da bismo povezali naš program s bazom podataka, moramo stvoriti jedinica postojanosti tijekom izvođenja da odredite trajne klase, vrstu baze podataka i parametre veze:

PersistenceUnitMetaData pumd = novo PersistenceUnitMetaData ("dynamic-unit", "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. Čitanje predmeta

Da bismo pročitali podatke iz naše baze podataka u našem bloku transakcija, kreiramo upit. Zatim te predmete pohranjujemo u Javu Popis zbirka, koja će sadržavati kopiju podataka iz trajne pohrane u memoriji.

Upravitelj postojanosti daje nam pristup sučelju upita koje nam omogućuje interakciju s bazom podataka:

Upit q = pm.newQuery ("ODABERI OD" + Product.class.getName () + "WHERE cijena <1"); Lista proizvoda = (Popis) q.execute (); Iterator iter = products.iterator (); while (iter.hasNext ()) {Product p = iter.next (); // pokazati podatke o proizvodu} 

6. Ažuriranje objekata

Da bismo ažurirali objekte u bazi podataka, moramo pronaći objekte koje želimo ažurirati pomoću upita, a zatim ažuriramo rezultate upita i počinimo transakciju:

Upit upita = pm.newQuery (Product.class, "name == \" Telefon \ ""); Rezultat zbirke = (Zbirka) query.execute (); Proizvod proizvoda = (Product) result.iterator (). Next (); product.setName ("Android telefon"); 

7. Brisanje objekata

Slično postupku ažuriranja, prvo tražimo objekt, a zatim ga brišemo pomoću upravitelja trajnosti. U tim situacijama JDO ažurira trajnu pohranu:

Upit upita = pm.newQuery (Product.class, "name == \" Android telefon \ ""); Rezultat zbirke = (Zbirka) query.execute (); Proizvod proizvoda = (Product) result.iterator (). Next (); pm.deletePersistent (proizvod); 

8. XML pohrane podataka

Korištenjem XML dodatka možemo koristiti XML datoteke za zadržavanje podataka.

Mi preciziramo naše ConnectionURL naznačujući da je XML datoteka i navodeći naziv datoteke:

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

XML trgovina podataka ne podržava svojstvo automatskog povećanja, pa moramo stvoriti drugu klasu:

@PersistenceCapable () javna klasa ProductXML {@XmlAttribute private long productNumber = 0; @PrimaryKey private String name = null; privatna Dvostruka cijena = 0,0; // standardni geteri i postavljači

The @XmlAttribute oznaka označava da će se to pojaviti u XML datoteci kao atribut elementa.

Stvorimo i ustrajmo naš proizvod:

ProductXML productXML = novi ProductXML (0, "Tablet", 80,0); pm.makePersistent (productXML);

Dobivamo proizvod pohranjen u XML datoteci:

 Tableta 80.0 

8.1. Oporavak objekata iz XML pohrane podataka

Naše objekte možemo oporaviti iz XML datoteke pomoću upita:

Upit q = pm.newQuery ("SELECT FROM" + ProductXML.class.getName ()); Lista proizvoda = (Popis) q.execute ();

A onda koristimo iterator za interakciju sa svakim objektom.

9. JDO upiti

JDOQL je objektno utemeljeni jezik upita dizajniran za izvođenje upita pomoću Java objekata.

9.1. Deklarativni JDOQL

Koristeći deklarativni upit, deklariramo parametre i postavljamo ih pomoću Jave, to osigurava sigurnost tipa:

Upit qDJDOQL = pm.newQuery (Product.class); qDJDOQL.setFilter ("name == 'Tablet' && price == price_value"); qDJDOQL.declareParameters ("dvostruka vrijednost_vrijednosti"); Navesti rezultateqDJDOQL = qDJDOQL.setParameters (80.0) .executeList ();

9.2. SQL

JDO pruža mehanizam za izvršavanje standardnih SQL upita:

Upit upita = pm.newQuery ("javax.jdo.query.SQL", "SELECT * FROM PRODUCT"); query.setClass (Product.class); Popis rezultata = query.executeList ();

Koristimo javax.jdo.query.SQL kao jedan parametar za objekt upita, a drugi parametar je sam SQL.

9.3. JPQL

JDO također pruža mehanizam za izvršavanje JPA upita. Možemo koristiti punu sintaksu jezika upita JPA:

Upit q = pm.newQuery ("JPQL", "SELECT p FROM" + Product.class.getName () + "p WHERE p.name = 'Laptop'")); Rezultati popisa = (Popis) q.execute ();

10. Sažetak

U ovom uputstvu mi:

  • stvorio jednostavnu CRUD aplikaciju koja koristi JDO
  • spremio i dohvatio naše podatke kao XML
  • ispitao uobičajene mehanizme upita

Kao i uvijek, kôd iz članka možete pronaći na Githubu.


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