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: En XML-datalager understøtter ikke egenskaben auto-increment, så vi er nødt til at oprette en anden klasse: Det @XmlAttribut annotation angiver, at dette vises i XML-filen som en attribut for elementet. Lad os oprette og vedligeholde vores produkt: Vi får produktet gemt i XML-filen: Vi kan gendanne vores objekter fra XML-filen ved hjælp af en forespørgsel: Og så bruger vi iteratoren til at interagere med hvert objekt. JDOQL er et objektbaseret forespørgselssprog designet til at udføre forespørgsler ved hjælp af Java-objekter. Ved hjælp af den deklarative forespørgsel erklærer vi parametrene og indstiller dem ved hjælp af Java, dette sikrer typesikkerhed: JDO giver en mekanisme til udførelse af standard SQL-forespørgsler: Vi bruger javax.jdo.query.SQL som en parameter for forespørgselsobjektet, og den anden parameter er selve SQL. JDO giver også en mekanisme til at udføre JPA-forespørgsler. Vi kan bruge den fulde syntaks af JPA-forespørgselssproget: I denne vejledning, vi: Som altid kan du finde koden fra artiklen på Github.pumdXML.addProperty ("javax.jdo.option.ConnectionURL", "xml: fil: myPersistence.xml");
@PersistenceCapable () offentlig klasse ProductXML {@XmlAttribute private long productNumber = 0; @PrimaryKey private String name = null; privat dobbelt pris = 0,0; // standard getters og setters
ProductXML productXML = nyt ProductXML (0, "Tablet", 80.0); pm.makePersistent (productXML);
Tablet 80.0
8.1. Gendan objekter fra XML-datalageret
Forespørgsel q = pm.newQuery ("VÆLG FRA" + ProductXML.class.getName ()); Liste over produkter = (Liste) q. Udfør ();
9. JDO-forespørgsler
9.1. Deklarativ JDOQL
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
Forespørgsel = pm.newQuery ("javax.jdo.query.SQL", "VÆLG * FRA PRODUKT"); query.setClass (Product.class); Listeresultater = forespørgsel.executeList ();
9.3. JPQL
Forespørgsel q = pm.newQuery ("JPQL", "SELECT p FROM" + Product.class.getName () + "p WHERE p.name = 'Laptop'"); Listeresultater = (Liste) q. Udfør ();
10. Resume