Vejledning til Java-dataobjekter

1. Oversigt

Java Data Objects er en API designet til vedvarende objektorienterede data i enhver database og giver et brugervenligt forespørgselssprog ved hjælp af Java-syntaksen.

I denne artikel skal vi se, hvordan vi bruger JDO API til at fastholde vores objekter i en database.

2. Maven-afhængigheder og opsætning

Vi skal bruge DataNucleus JDO API, der er opdateret og tilbyder fuld support til JDO 3.2 API.

Lad os tilføje følgende afhængighed til vores pom.xml fil:

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

De nyeste versioner af afhængighederne kan findes her: javax.jdo, datanucleus-core, datanucleus-api-jdo, datanucleus-rdbms og datanucleus-xml.

3. Model

Vi skal gemme vores data i en database, og inden vi kan gøre det, skal vi oprette en klasse, der vil blive brugt af JDO til lagring af vores data.

For at gøre det skal vi oprette en klasse med nogle egenskaber og kommentere den med @PersistentCapable:

@PersistenceCapable public class Product {@PrimaryKey @Persistent (valueStrategy = IdGeneratorStrategy.INCREMENT) lang id; Strengnavn; Dobbelt pris = 0,0; // standard konstruktører, getters, setters}

Vi kommenterede også vores primære nøgle og den valgte strategi.

Når vi har oprettet vores objekt, er vi nødt til at køre forstærkeren for at generere den bytecode, der kræves af JDO. Ved hjælp af Maven kan vi køre denne kommando:

mvn datanucleus: forbedre

Dette trin er obligatorisk. Ellers får vi kompileringstid fejl, at klassen ikke forbedres.

Det er selvfølgelig muligt at gøre dette automatisk under en Maven-build:

 org.datanucleus datanucleus-maven-plugin 5.0.2 JDO $ {basedir} /datanucleus.properties $ {basedir} /log4j.properties ægte procesklasser forbedrer 

Den seneste version af pluginet kan findes her: datanucleus-maven-plugin

4. Vedvarende genstande

Vi får adgang til databasen ved hjælp af en JDO-fabrik, der giver os den transaktionsadministrator, der har ansvaret for at udføre transaktioner:

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

Transaktioner bruges til at tillade tilbageførsel i tilfælde af en fejl:

Transaktion tx = pm.strømTransaktion ();

Vi foretager vores transaktioner inden for en prøv / fange blok:

Produktprodukt = nyt produkt ("Tablet", 80.0); pm.makePersistent (produkt);

I vores langt om længe blok, definerer vi disse operationer, der skal udføres i tilfælde af en fejl.

Hvis transaktionen af ​​en eller anden grund ikke kan gennemføres, foretager vi en tilbageførsel, og vi lukker også forbindelsen til databasen med pm.close ():

endelig {if (tx.isActive ()) {tx.rollback (); } pm.close (); }

For at forbinde vores program til databasen skal vi oprette en vedholdenhed ved kørsel for at specificere de vedvarende klasser, databasetypen og forbindelsesparametrene:

PersistenceUnitMetaData pumd = ny PersistenceUnitMetaData ("dynamisk enhed", "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. Læseobjekter

For at læse data fra vores database inde i vores transaktionsblok opretter vi en forespørgsel. Derefter gemmer vi disse varer i en Java Liste samling, som indeholder en kopi i hukommelsen af ​​oplysningerne fra den vedvarende lagring.

Persistensmanageren giver os adgang til forespørgselsgrænsefladen, der giver os mulighed for at interagere med databasen:

Forespørgsel q = pm.newQuery ("VÆLG FRA" + Product.class.getName () + "WHERE pris <1"); Liste over produkter = (Liste) q. Udfør (); Iterator iter = products.iterator (); mens (iter.hasNext ()) {Produkt p = iter.next (); // vis produktoplysninger} 

6. Opdatering af objekter

For at opdatere objekter i databasen skal vi finde de objekter, vi vil opdatere ved hjælp af en forespørgsel, så opdaterer vi resultaterne af forespørgslen og begår transaktionen:

Forespørgsel = pm.newQuery (Product.class, "name == \" Phone \ ""); Samlingsresultat = (Samling) forespørgsel. Udfør (); Produktprodukt = (Produkt) resultat.iterator (). Næste (); product.setName ("Android-telefon"); 

7. Sletning af objekter

I lighed med opdateringsproceduren søger vi først efter objektet og sletter det derefter ved hjælp af persistensadministratoren. I disse situationer opdaterer JDO den vedvarende opbevaring:

Forespørgsel = pm.newQuery (Product.class, "name == \" Android Phone \ ""); Samlingsresultat = (Samling) forespørgsel. Udfør (); Produktprodukt = (Produkt) resultat.iterator (). Næste (); pm.deletePersistent (produkt); 

8. XML-datalagre

Ved hjælp af XML-pluginet kan vi bruge XML-filer til at vedvare vores data.

Vi specificerer vores ConnectionURL angiver, at der er en XML-fil og angiver filens navn:

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

En XML-datalager understøtter ikke egenskaben auto-increment, så vi er nødt til at oprette en anden klasse:

@PersistenceCapable () offentlig klasse ProductXML {@XmlAttribute private long productNumber = 0; @PrimaryKey private String name = null; privat dobbelt pris = 0,0; // standard getters og setters

Det @XmlAttribut annotation angiver, at dette vises i XML-filen som en attribut for elementet.

Lad os oprette og vedligeholde vores produkt:

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

Vi får produktet gemt i XML-filen:

 Tablet 80.0 

8.1. Gendan objekter fra XML-datalageret

Vi kan gendanne vores objekter fra XML-filen ved hjælp af en forespørgsel:

Forespørgsel q = pm.newQuery ("VÆLG FRA" + ProductXML.class.getName ()); Liste over produkter = (Liste) q. Udfør ();

Og så bruger vi iteratoren til at interagere med hvert objekt.

9. JDO-forespørgsler

JDOQL er et objektbaseret forespørgselssprog designet til at udføre forespørgsler ved hjælp af Java-objekter.

9.1. Deklarativ JDOQL

Ved hjælp af den deklarative forespørgsel erklærer vi parametrene og indstiller dem ved hjælp af Java, dette sikrer typesikkerhed:

Forespørgsel qDJDOQL = pm.newQuery (Product.class); qDJDOQL.setFilter ("navn == 'Tablet' && pris == pris_værdi"); qDJDOQL.declareParameters ("dobbelt pris_værdi"); ListeresultaterqDJDOQL = qDJDOQL.setParameters (80.0) .executeList ();

9.2. SQL

JDO giver en mekanisme til udførelse af standard SQL-forespørgsler:

Forespørgsel = pm.newQuery ("javax.jdo.query.SQL", "VÆLG * FRA PRODUKT"); query.setClass (Product.class); Listeresultater = forespørgsel.executeList ();

Vi bruger javax.jdo.query.SQL som en parameter for forespørgselsobjektet, og den anden parameter er selve SQL.

9.3. JPQL

JDO giver også en mekanisme til at udføre JPA-forespørgsler. Vi kan bruge den fulde syntaks af JPA-forespørgselssproget:

Forespørgsel q = pm.newQuery ("JPQL", "SELECT p FROM" + Product.class.getName () + "p WHERE p.name = 'Laptop'"); Listeresultater = (Liste) q. Udfør ();

10. Resume

I denne vejledning, vi:

  • oprettet et simpelt CRUD-program, der bruger JDO
  • gemt og hentet vores data som XML
  • undersøgte almindelige forespørgselsmekanismer

Som altid kan du finde koden fra artiklen på Github.


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