Gids voor Java-gegevensobjecten

1. Overzicht

De Java Data Objects is een API die is ontworpen om objectgeoriënteerde gegevens in elke database te bewaren en een gebruiksvriendelijke zoektaal te bieden met behulp van de Java-syntaxis.

In dit artikel gaan we zien hoe we de JDO API kunnen gebruiken om onze objecten in een database te behouden.

2. Maven afhankelijkheden en instellingen

We gaan de DataNucleus JDO API gebruiken die up-to-date is en volledige ondersteuning biedt voor de JDO 3.2 API.

Laten we de volgende afhankelijkheid toevoegen aan onze pom.xml het dossier:

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

De laatste versies van de afhankelijkheden zijn hier te vinden: javax.jdo, datanucleus-core, datanucleus-api-jdo, datanucleus-rdbms en datanucleus-xml.

3. Model

We gaan onze gegevens opslaan in een database en voordat we dat kunnen doen, moeten we een klasse maken die door JDO zal worden gebruikt voor het opslaan van onze gegevens.

Om dat te doen, moeten we een klasse met enkele eigenschappen maken en deze annoteren met de @PersistentCapable:

@PersistenceCapable openbare klasse Product {@PrimaryKey @Persistent (valueStrategy = IdGeneratorStrategy.INCREMENT) lange id; String naam; Dubbele prijs = 0,0; // standaard constructeurs, getters, setters}

We hebben ook onze primaire sleutel en de gekozen strategie geannoteerd.

Zodra we ons object hebben gemaakt, moeten we de enhancer uitvoeren om de bytecode te genereren die vereist is voor JDO. Met Maven kunnen we deze opdracht uitvoeren:

mvn datanucleus: verbeteren

Deze stap is verplicht. Anders krijgen we een compilatietijdfout dat de klasse niet is verbeterd.

Het is natuurlijk mogelijk om dit automatisch te doen tijdens een Maven-build:

 org.datanucleus datanucleus-maven-plugin 5.0.2 JDO $ {basedir} /datanucleus.properties $ {basedir} /log4j.properties echte procesklassen verbeteren 

De laatste versie van de plug-in is hier te vinden: datanucleus-maven-plugin

4. Aanhoudende objecten

We krijgen toegang tot de database met behulp van een JDO-fabriek die ons de transactiebeheerder geeft die de transacties uitvoert:

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

Transacties worden gebruikt om een ​​rollback mogelijk te maken in geval van een fout:

Transactie tx = pm.currentTransaction ();

We maken onze transacties binnen een proberen te vangen blok:

Productproduct = nieuw product ("Tablet", 80.0); pm.makePersistent (product);

In onze Tenslotte block, definiëren we deze bewerkingen die moeten worden uitgevoerd in het geval van een storing.

Als de transactie om welke reden dan ook niet kan worden voltooid, maken we een rollback en sluiten we ook de verbinding met de database met pm.close ():

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

Om ons programma met de database te verbinden, moeten we een persistentie-eenheid tijdens runtime om de permanente klassen, het databasetype en de verbindingsparameters op te geven:

PersistenceUnitMetaData pumd = nieuwe PersistenceUnitMetaData ("dynamische eenheid", "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. Objecten lezen

Om gegevens uit onze database in ons transactieblok te lezen, maken we een query. Vervolgens slaan we deze items op in een Java Lijst collectie, die een in-memory kopie van de informatie uit de permanente opslag zal bevatten.

De persistentiemanager geeft ons toegang tot de query-interface waarmee we kunnen communiceren met de database:

Query q = pm.newQuery ("SELECTEER UIT" + Product.class.getName () + "WAAR prijs <1"); List products = (List) q.execute (); Iterator iter = producten.iterator (); while (iter.hasNext ()) {Product p = iter.next (); // toon de productinformatie} 

6. Objecten bijwerken

Om objecten in de database bij te werken, moeten we de objecten vinden die we willen bijwerken met behulp van een query, vervolgens werken we de resultaten van de query bij en plegen we de transactie:

Queryquery = pm.newQuery (Product.class, "name == \" Telefoon \ ""); Verzamelingsresultaat = (Verzameling) query.execute (); Product product = (Product) result.iterator (). Next (); product.setName ("Android-telefoon"); 

7. Objecten verwijderen

Net als bij de updateprocedure, zoeken we eerst naar het object en verwijderen het vervolgens met de persistentiemanager. In die situaties werkt JDO de permanente opslag bij:

Queryquery = pm.newQuery (Product.class, "name == \" Android-telefoon \ ""); Verzamelingsresultaat = (Verzameling) query.execute (); Product product = (Product) result.iterator (). Next (); pm.deletePersistent (product); 

8. XML-datastores

Met behulp van de XML-plug-in kunnen we XML-bestanden gebruiken om onze gegevens te bewaren.

We specificeren onze VerbindingURL aangeven dat het een XML-bestand is en de naam van het bestand specificeren:

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

Een XML-datastore ondersteunt de eigenschap auto-increment niet, dus we moeten een andere klasse maken:

@PersistenceCapable () openbare klasse ProductXML {@XmlAttribute privé lang productNumber = 0; @PrimaryKey private String name = null; privé dubbele prijs = 0,0; // standaard getters en setters

De @XmlAttribute annotatie geeft aan dat dit in het XML-bestand zal verschijnen als een attribuut van het element.

Laten we ons product maken en voortzetten:

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

We krijgen het product opgeslagen in het XML-bestand:

 Tablet 80.0 

8.1. Herstel objecten uit de XML-datastore

We kunnen onze objecten uit het XML-bestand herstellen met behulp van een query:

Query q = pm.newQuery ("SELECTEER UIT" + ProductXML.class.getName ()); List products = (List) q.execute ();

En dan gebruiken we de iterator om met elk object te communiceren.

9. JDO-zoekopdrachten

JDOQL is een objectgebaseerde querytaal die is ontworpen om query's uit te voeren met Java-objecten.

9.1. Declaratieve JDOQL

Met behulp van de declaratieve query declareren we de parameters en stellen we ze in met Java, dit zorgt voor typeveiligheid:

Query qDJDOQL = pm.newQuery (Product.class); qDJDOQL.setFilter ("naam == 'Tablet' && prijs == prijs_waarde"); qDJDOQL.declareParameters ("dubbele prijs_waarde"); Lijstresultaten qDJDOQL = qDJDOQL.setParameters (80.0) .executeList ();

9.2. SQL

JDO biedt een mechanisme voor het uitvoeren van standaard SQL-query's:

Queryquery = pm.newQuery ("javax.jdo.query.SQL", "SELECTEER * UIT PRODUCT"); query.setClass (Product.class); Lijstresultaten = query.executeList ();

We gebruiken javax.jdo.query.SQL als een parameter voor het query-object en de tweede parameter is de SQL zelf.

9.3. JPQL

JDO biedt ook een mechanisme voor het uitvoeren van JPA-query's. We kunnen de volledige syntaxis van de JPA-zoektaal gebruiken:

Query q = pm.newQuery ("JPQL", "SELECT p FROM" + Product.class.getName () + "p WAAR p.name = 'Laptop'"); Lijstresultaten = (Lijst) q.execute ();

10. Samenvatting

In deze tutorial hebben we:

  • heeft een eenvoudige CRUD-applicatie gemaakt die JDO gebruikt
  • opgeslagen en onze gegevens opgehaald als XML
  • onderzochte gemeenschappelijke zoekmechanismen

Zoals altijd kun je de code uit het artikel op Github vinden.


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