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: XML trgovina podataka ne podržava svojstvo automatskog povećanja, pa moramo stvoriti drugu klasu: The @XmlAttribute oznaka označava da će se to pojaviti u XML datoteci kao atribut elementa. Stvorimo i ustrajmo naš proizvod: Dobivamo proizvod pohranjen u XML datoteci: Naše objekte možemo oporaviti iz XML datoteke pomoću upita: A onda koristimo iterator za interakciju sa svakim objektom. JDOQL je objektno utemeljeni jezik upita dizajniran za izvođenje upita pomoću Java objekata. Koristeći deklarativni upit, deklariramo parametre i postavljamo ih pomoću Jave, to osigurava sigurnost tipa: JDO pruža mehanizam za izvršavanje standardnih SQL upita: Koristimo javax.jdo.query.SQL kao jedan parametar za objekt upita, a drugi parametar je sam SQL. JDO također pruža mehanizam za izvršavanje JPA upita. Možemo koristiti punu sintaksu jezika upita JPA: U ovom uputstvu mi: Kao i uvijek, kôd iz članka možete pronaći na Githubu.pumdXML.addProperty ("javax.jdo.option.ConnectionURL", "xml: datoteka: myPersistence.xml");
@PersistenceCapable () javna klasa ProductXML {@XmlAttribute private long productNumber = 0; @PrimaryKey private String name = null; privatna Dvostruka cijena = 0,0; // standardni geteri i postavljači
ProductXML productXML = novi ProductXML (0, "Tablet", 80,0); pm.makePersistent (productXML);
Tableta 80.0
8.1. Oporavak objekata iz XML pohrane podataka
Upit q = pm.newQuery ("SELECT FROM" + ProductXML.class.getName ()); Lista proizvoda = (Popis) q.execute ();
9. JDO upiti
9.1. Deklarativni JDOQL
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
Upit upita = pm.newQuery ("javax.jdo.query.SQL", "SELECT * FROM PRODUCT"); query.setClass (Product.class); Popis rezultata = query.executeList ();
9.3. JPQL
Upit q = pm.newQuery ("JPQL", "SELECT p FROM" + Product.class.getName () + "p WHERE p.name = 'Laptop'")); Rezultati popisa = (Popis) q.execute ();
10. Sažetak