Guide til Ebean ORM

1. Introduksjon

Ebean er et objektrelasjonelt kartleggingsverktøy skrevet i Java.

Den støtter standard JPA-merknader for å erklære enheter. Imidlertid gir det en mye enklere API for vedvarende. Faktisk er et av poengene det er verdt å nevne om Ebean-arkitekturen at den er sesjonsfri, noe som betyr at den ikke fullstendig administrerer enheter.

I tillegg til det, kommer det også med et søke-API og støtter skriving av spørsmål i innfødt SQL. Ebean støtter alle større databaseleverandører som Oracle, Postgres, MySql, H2 etc.

I denne opplæringen tar vi en titt på hvordan vi kan opprette, vedvare og spørre enheter ved hjelp av Ebean og H2.

2. Oppsett

For å komme i gang, la oss få våre avhengigheter, samt noen grunnleggende konfigurasjoner.

2.1. Maven avhengigheter

La oss importere de nødvendige avhengighetene før vi begynner:

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

De siste versjonene av Ebean, H2 og Logback finner du på Maven Central.

2.2. Forbedringer

Ebean må endre enhetsbønner slik at de kan administreres av serveren. Dermed legger vi til et Maven-plugin for å gjøre den jobben:

 io.ebean ebean-maven-plugin 11.11.2 hovedprosessklasser feilsøking = 1 forbedring 

Vi må også gi Maven-pluginet navnene på pakkene som inneholder enhetene og klassene som bruker transaksjoner. For å gjøre det oppretter vi filen ebean.mf:

enhetspakker: com.baeldung.ebean.model transaksjonspakker: com.baeldung.ebean.app

2.3. Hogst

La oss også lage logback.xml og sett loggningsnivåer på noen pakker til SPOR slik at vi kan se utsagnene som utføres:

3. Konfigurere en server

Vi må lage en EbeanServer forekomst for å lagre enheter eller kjøre spørsmål i en database. Det er to måter vi kan opprette en serverforekomst på - ved hjelp av en standardegenskapsfil eller gjør det programmatisk.

3.1. Bruke en standardegenskapsfil

Standardegenskapsfilen kan være av type eiendommer eller yaml. Ebean vil søke etter konfigurasjon i filer med navn application.properties, ebean.properties eller application.yml.

Bortsett fra å gi informasjon om databaseforbindelsen, kan vi også instruere Ebean om å opprette og kjøre DDL-setninger.

La oss nå se på en eksempelkonfigurasjon:

ebean.db.ddl.generate = true ebean.db.ddl.run = true datasource.db.username = sa datasource.db.password = datasource.db.databaseUrl = jdbc: h2: mem: customer datasource.db.databaseDriver = org.h2. driver

3.2. Bruke ServerConfig

La oss deretter se på hvordan vi kan opprette den samme serveren programmatisk ved hjelp av EbeanServerFactory og ServerConfig:

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

3.3. Standard serverforekomst

En eneste EbeanServer forekomstskart til en enkelt database. Avhengig av våre krav, kan vi lage mer enn en EbeanServer eksempel også.

Hvis bare en enkelt serverforekomst er opprettet, er den som standard registrert som standard serverforekomst. Den kan nås hvor som helst i applikasjonen ved hjelp av en statisk metode på Ebean klasse:

EbeanServer server = Ebean.getDefaultServer ();

I tilfelle det er flere databaser, er det mulig å registrere en av serverforekomster som standard:

cfg.setDefaultServer (true);

4. Opprette enheter

Ebean gir full støtte for JPA-merknader samt tilleggsfunksjoner ved hjelp av egne kommentarer.

La oss lage få enheter ved hjelp av både JPA- og Ebean-merknader. Først oppretter vi en BaseModel som inneholder egenskaper som er vanlige på tvers av enheter:

@MappedSuperclass offentlig abstrakt klasse BaseModel {@Id-beskyttet lang id; @Version beskyttet langversjon; @WhenCreated beskyttet Øyeblikkelig createdOn; @WhenModified beskyttet Øyeblikkelig modifiedOn; // getters og setters}

Her har vi brukt MappedSuperClass JPA-kommentar for å definere BaseModel. Og to Ebean-merknader io.bean.annotation.WhenCreated og io.bean.annotation.WhenModified for revisjonsformål.

Deretter oppretter vi to enheter Kunde og Adresse som strekker seg BaseModel:

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

I Kunde, har vi definert en en til en kartlegging med Adresse og lagt til satt kaskadetype til ALLE slik at underordnede enheter også blir oppdatert sammen med overordnede enheter.

5. Grunnleggende CRUD-operasjoner

Tidligere har vi sett hvordan du konfigurerer EbeanServer og opprettet to enheter. Nå, la oss utføre noen grunnleggende CRUD-operasjoner på dem.

Vi bruker standard serverforekomst for å vedvare og få tilgang til dataene. De Ebean klasse gir også statiske metoder for å vedvare og få tilgang til data som proxyer forespørselen til standard serverforekomst:

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); Kunden funnetC1 = Ebean.find (Customer.class, c1.getId ()); Ebean.delete (funnetC1);

Først lager vi en Kunde objekt og brukte standard serverforekomst for å lagre den ved hjelp av lagre().

Deretter oppdaterer vi kundeopplysningene og lagrer den igjen ved hjelp av lagre().

Til slutt bruker vi den statiske metoden finne()Ebean å hente kunden og slette den ved hjelp av slett ().

6. Spørringer

Query API-er kan også brukes til å lage en objektgraf med filtre og predikater. Vi kan enten bruke Ebean eller EbeanServer for å opprette og utføre spørringer.

La oss se på et spørsmål som finner en Kunde etter by og returnerer a Kunde og Adresse objekt med bare noen felt fylt ut:

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

Her, med finne() vi indikerer at vi ønsker å finne enheter av typen Kunde. Deretter bruker vi å velge() for å spesifisere egenskapene som skal fylles ut i Kunde gjenstand.

Senere bruker vi hente () for å indikere at vi vil hente Adresse gjenstand som tilhører Kunde og at vi ønsker å hente by felt.

Til slutt legger vi til et predikat og begrenser størrelsen på resultatet til 1.

7. Transaksjoner

Ebean utfører hver uttalelse eller spørsmål i en ny transaksjon som standard.

Selv om dette ikke kan være et problem i noen tilfeller. Det er tider når vi kanskje vil utføre et sett med uttalelser innen en enkelt transaksjon.

I slike tilfeller, hvis vi kommenterer metoden med io.bean.annotations.Transactional, alle utsagnene i metoden vil bli utført i samme transaksjon:

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

8. Bygg prosjektet

Til slutt kan vi bygge Maven-prosjektet ved hjelp av kommandoen:

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

9. Konklusjon

For å oppsummere har vi sett på de grunnleggende funksjonene i Ebean som kan brukes til å vedvare og spørre enheter i en relasjonsdatabase.

Endelig er denne koden tilgjengelig på Github.


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