Guide til Ebean ORM

1. Introduktion

Ebean er et objektrelationelt kortlægningsværktøj skrevet i Java.

Det understøtter standard JPA-annoteringer for erklærende enheder. Det giver dog en meget enklere API til vedvarende. Faktisk er et af de punkter, der er værd at nævne om Ebean-arkitekturen, at den er sessionløs, hvilket betyder, at den ikke styrer enheder fuldt ud.

Derudover kommer den også med et forespørgsels-API og understøtter skrivning af forespørgsler i native SQL. Ebean understøtter alle større databaseudbydere som Oracle, Postgres, MySql, H2 osv.

I denne vejledning ser vi på, hvordan vi kan oprette, vedligeholde og forespørge enheder ved hjælp af Ebean og H2.

2. Opsætning

For at komme i gang, lad os få vores afhængigheder samt nogle grundlæggende konfigurationer.

2.1. Maven afhængigheder

Lad os importere de krævede afhængigheder, inden vi begynder:

 io.ebean ebean 11.22.4 com.h2database h2 1.4.196 ch.qos.logback logback-classic 1.2.3 

De nyeste versioner af Ebean, H2 og Logback findes på Maven Central.

2.2. Forbedringer

Ebean skal ændre enhedsbønner, så de kan administreres af serveren. Således tilføjer vi et Maven-plugin for at udføre det job:

 io.ebean ebean-maven-plugin 11.11.2 vigtigste procesklasser debug = 1 forbedring 

Vi har også brug for at give Maven-pluginet navnene på de pakker, der indeholder de enheder og klasser, der bruger transaktioner. For at gøre det opretter vi filen ebean.mf:

enhedspakker: com.baeldung.ebean.model transaktionspakker: com.baeldung.ebean.app

2.3. Logning

Lad os også oprette logback.xml og indstil logningsniveauer på nogle pakker til SPOR så vi kan se de udsagn, der udføres:

3. Konfiguration af en server

Vi er nødt til at skabe en EbeanServer eksempel for at gemme enheder eller køre forespørgsler i en database. Der er to måder, hvorpå vi kan oprette en serverforekomst - ved hjælp af en standardegenskabsfil eller gør det programmatisk.

3.1. Brug af en standardegenskabsfil

Standardegenskabsfilen kan være af typen ejendomme eller yaml. Ebean vil søge efter konfiguration i filer med navne application.properties, ebean.properties eller ansøgning.yml.

Udover at levere databaseforbindelsesoplysningerne kan vi også instruere Ebean om at oprette og køre DDL-udsagn.

Lad os nu se på en eksempelkonfiguration:

ebean.db.ddl.generate = sand ebean.db.ddl.run = sand datakilde.db.brugernavn = sa datakilde.db.password = datakilde.db.databaseUrl = jdbc: h2: mem: kundedatakilde.db.databaseDriver = org.h2. driver

3.2. Brug af ServerConfig

Lad os derefter se på, hvordan vi kan oprette den samme server programmatisk ved hjælp af EbeanServerFactory og ServerConfig:

ServerConfig cfg = ny ServerConfig (); Egenskaber egenskaber = nye egenskaber (); egenskaber.put ("ebean.db.ddl.generate", "true"); egenskaber.put ("ebean.db.ddl.run", "sand"); egenskaber.put ("datasource.db.username", "sa"); egenskaber.put ("datasource.db.password", ""); egenskaber.put ("datasource.db.databaseUrl", "jdbc: h2: mem: app2"; properties.put ("datasource.db.databaseDriver", "org.h2.Driver"); cfg.loadFromProperties (egenskaber); EbeanServer-server = EbeanServerFactory.create (cfg);

3.3. Standard serverforekomst

En enkelt EbeanServer eksempel kort til en enkelt database. Afhængigt af vores krav kunne vi oprette mere end en EbeanServer eksempel også.

Hvis der kun oprettes en enkelt serverforekomst, er den som standard registreret som standardserverforekomst. Det kan tilgås hvor som helst i applikationen ved hjælp af en statisk metode på Ebean klasse:

EbeanServer-server = Ebean.getDefaultServer ();

Hvis der er flere databaser, er det muligt at registrere en af ​​serverforekomsterne som standard:

cfg.setDefaultServer (sand);

4. Oprettelse af enheder

Ebean yder fuld understøttelse af JPA-kommentarer såvel som yderligere funktioner ved hjælp af sine egne kommentarer.

Lad os oprette få enheder ved hjælp af både JPA og Ebean-kommentarer. Først opretter vi en BaseModel som indeholder egenskaber, der er almindelige på tværs af enheder:

@MappedSuperclass offentlig abstrakt klasse BaseModel {@Id beskyttet langt id; @Version beskyttet lang version; @WhenCreated beskyttet øjeblikkelig createdOn; @WhenModified beskyttet Øjeblikkelig modifiedOn; // getters og setters}

Her har vi brugt MappedSuperClass JPA-kommentar for at definere BaseModel. Og to Ebean-kommentarer io.bean.annotation.WhenCreated og io.ebean.annotation.WhenModified til revision.

Dernæst opretter vi to enheder Kunde og Adresse som strækker sig BaseModel:

@Entity offentlig klasse Kunde udvider BaseModel {offentlig kunde (strengnavn, adresse adresse) {super (); dette.navn = navn; denne.adresse = adresse; } privat strengnavn; @OneToOne (kaskade = CascadeType.ALL) Adresse adresse; // getters og setters} 
@Entity public class Adresse udvider BaseModel {public Address (String addressLine1, String addressLine2, String city) {super (); this.addressLine1 = addressLine1; this.addressLine2 = addressLine2; this.city = by; } privat streng adresseLine1; privat streng adresseLine2; private String by; // getters og setters}

I Kunde, vi har defineret en en til en kortlægning med Adresse og tilføjet sæt kaskadetype til ALLE således at underordnede enheder også opdateres sammen med overordnede enheder.

5. Grundlæggende CRUD-operationer

Tidligere har vi set, hvordan vi konfigurerer EbeanServer og skabte to enheder. Nu, lad os udføre nogle grundlæggende CRUD-operationer på dem.

Vi bruger standardserverinstansen til at vedvare og få adgang til dataene. Det Ebean klasse giver også statiske metoder til at vedvare og få adgang til data, som proxyer anmodningen til standardserverinstans:

Adresse a1 = ny adresse ("5, Wide Street", null, "New York"); Kunde c1 = ny kunde ("John Wide", a1); EbeanServer-server = Ebean.getDefaultServer (); server.save (c1); c1.setName ("Jane Wide"); c1.setAddress (null); server.save (c1); Kunde fundetC1 = Ebean.find (Customer.class, c1.getId ()); Ebean.delete (fundetC1);

Først opretter vi en Kunde objekt og brugte standardserverinstansen til at gemme den ved hjælp af Gemme().

Dernæst opdaterer vi kundeoplysningerne og gemmer dem igen ved hjælp af Gemme().

Endelig bruger vi den statiske metode finde()Ebean at hente kunden og slette den ved hjælp af slet ().

6. Forespørgsler

Forespørgsels-API'er kan også bruges til at oprette en objektgraf med filtre og prædikater. Vi kan enten bruge Ebean eller EbeanServer at oprette og udføre forespørgsler.

Lad os se på en forespørgsel, der finder en Kunde efter by og vender tilbage a Kunde og Adresse objekt med kun nogle felter udfyldt:

Kundekunde = Ebean.find (Customer.class) .select ("name") .fetch ("address", "city") .where () .eq ("city", "San Jose") .findOne ();

Her, med finde() vi angiver, at vi vil finde enheder af typen Kunde. Dernæst bruger vi Vælg() for at specificere de egenskaber, der skal udfyldes i Kunde objekt.

Senere bruger vi hente () for at angive, at vi vil hente Adresse objekt, der hører til Kunde og at vi ønsker at hente by Mark.

Endelig tilføjer vi et predikat og begrænser størrelsen på resultatet til 1.

7. Transaktioner

Ebean udfører som standard hver sætning eller forespørgsel i en ny transaktion.

Selv om dette måske ikke er et problem i nogle tilfælde. Der er tidspunkter, hvor vi måske vil udføre et sæt udsagn inden for en enkelt transaktion.

I sådanne tilfælde, hvis vi kommenterer metoden med io.ebean.annotations.Transactional, alle udsagn inden for metoden vil blive udført inden for den samme transaktion:

@Transactional public static ugyldig insertAndDeleteInsideTransaction () {Customer c1 = getCustomer (); EbeanServer-server = Ebean.getDefaultServer (); server.save (c1); Kunde fundetC1 = server.find (Customer.class, c1.getId ()); server.delete (fundetC1); }

8. Opbygning af projektet

Endelig kan vi bygge Maven-projektet ved hjælp af kommandoen:

kompilere io.ebean: ebean-maven-plugin: forbedre

9. Konklusion

For at opsummere har vi set på de grundlæggende funktioner i Ebean, som kan bruges til at vedligeholde og forespørge enheder i en relationsdatabase.

Endelig er denne kode tilgængelig på Github.