Sprievodca po Ebean ORM

1. Úvod

Ebean je objektovo-relačný mapovací nástroj napísaný v Jave.

Podporuje štandardné poznámky JPA pre deklarujúce subjekty. Poskytuje však oveľa jednoduchšie API na pretrvávanie. Jedným z bodov, ktoré stojí za zmienku o architektúre Ebean, je skutočnosť, že je bez relácie, čo znamená, že úplne nespravuje entity.

Okrem toho tiež prichádza s API dotazu a podporuje písanie dotazov v natívnom SQL. Ebean podporuje všetkých významných poskytovateľov databáz, ako sú Oracle, Postgres, MySql, H2 atď.

V tomto tutoriáli sa pozrieme na to, ako môžeme vytvárať, pretrvávať a dopytovať entity pomocou Ebean a H2.

2. Inštalácia

Na začiatok si pozrime naše závislosti a základnú konfiguráciu.

2.1. Maven závislosti

Predtým, ako začneme, importujme požadované závislosti:

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

Najnovšie verzie Ebean, H2 a Logback nájdete na serveri Maven Central.

2.2. Vylepšenia

Ebean musí upraviť fazuľa entít tak, aby ich mohla spravovať server. Preto na túto prácu pridáme doplnok Maven:

 io.ebean ebean-maven-plugin 11.11.2 hlavné ladenie tried procesov = 1 vylepšenie 

Musíme tiež poskytnúť doplnok Maven s názvami balíkov, ktoré obsahujú entity a triedy, ktoré používajú transakcie. Za týmto účelom vytvoríme súbor ebean.mf:

entity-packages: com.baeldung.ebean.model transakčné balíčky: com.baeldung.ebean.app

2.3. Protokolovanie

Poďme tiež tvoriť logback.xml a na niektorých balíkoch nastaviť úrovne protokolovania na TRACE aby sme videli príkazy, ktoré sa vykonávajú:

3. Konfigurácia servera

Musíme vytvoriť EbeanServer inštancia na uloženie entít alebo spustenie dotazov v databáze. Existujú dva spôsoby, ako môžeme vytvoriť inštanciu servera - pomocou predvoleného súboru vlastností alebo programovo.

3.1. Používanie predvoleného súboru vlastností

Predvolený súbor vlastností môže byť typu vlastnosti alebo yaml. Ebean bude hľadať konfiguráciu v súboroch s menami application.properties, ebean.vlastnosti alebo aplikácia.yml.

Okrem poskytnutia podrobností o pripojení k databáze môžeme tiež dať príkazu Ebean, aby vytvoril a spustil príkazy DDL.

Teraz sa pozrime na ukážkovú konfiguráciu:

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. Vodič

3.2. Pomocou ServerConfig

Ďalej sa pozrime, ako môžeme programovo vytvoriť rovnaký server pomocou EbeanServerFactory a ServerConfig:

ServerConfig cfg = nový ServerConfig (); Vlastnosti vlastnosti = nové Vlastnosti (); 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 (vlastnosti); EbeanServer server = EbeanServerFactory.create (cfg);

3.3. Predvolená inštancia servera

Slobodný EbeanServer inštančné mapy do jednej databázy. V závislosti na našich požiadavkách sme mohli vytvoriť viac ako jeden EbeanServer inštancia rovnako.

Ak sa vytvorí iba jedna inštancia servera, predvolene sa zaregistruje ako predvolená inštancia servera. Je k nej prístupný kdekoľvek v aplikácii pomocou statickej metódy na Ebean trieda:

EbeanServer server = Ebean.getDefaultServer ();

V prípade, že existuje viac databáz, je možné zaregistrovať jednu z inštancií servera ako predvolenú:

cfg.setDefaultServer (true);

4. Vytváranie entít

Ebean poskytuje úplnú podporu pre anotácie JPA, ako aj ďalšie funkcie pomocou vlastných anotácií.

Vytvorme niekoľko entít pomocou anotácií JPA aj Ebean. Najskôr vytvoríme a BaseModel ktorá obsahuje vlastnosti, ktoré sú spoločné pre všetky entity:

@MappedSuperclass verejná abstraktná trieda BaseModel {@Id chránená dlhá identifikácia; @ Verzia chránená dlhá verzia; @WhenCreated chránené Okamžité createdOn; @WhenModified chránené okamžite upravené; // zakladatelia a zakladatelia}

Tu sme použili MappedSuperClass Anotácia JPA na definovanie BaseModel. A dve anotácie Ebean io.ebean.annotation.WhenCreated a io.ebean.annotation.WhenModified na účely auditu.

Ďalej vytvoríme dve entity Zákazník a Adresa ktoré sa rozširujú BaseModel:

@Entity public class Zákazník rozširuje BaseModel {public Customer (názov reťazca, adresa) {super (); this.name = meno; this.address = adresa; } súkromné ​​meno reťazca; @OneToOne (cascade = CascadeType.ALL) Adresa adresy; // zakladatelia a zakladatelia} 
@Entity public class Address extends BaseModel {public Address (String addressLine1, String addressLine2, String city) {super (); this.addressLine1 = addressLine1; this.addressLine2 = addressLine2; this.city = mesto; } private String addressLine1; private String addressLine2; súkromné ​​mesto String; // zakladatelia a zakladatelia}

V Zákazník, sme definovali mapovanie jeden na jedného pomocou Adresa a pridal nastavený typ kaskády na VŠETKY aby sa spolu s nadradenými entitami aktualizovali aj podradené entity.

5. Základné operácie CRUD

Predtým sme videli, ako nakonfigurovať EbeanServer a vytvorili dve entity. Teraz, poďme vykonať niekoľko základných operácií CRUD na nich.

Na zachovanie a prístup k údajom použijeme predvolenú inštanciu servera. The Ebean trieda tiež poskytuje statické metódy na pretrvávanie a prístup k údajom, ktoré proxy požiadavka na predvolenú inštanciu servera:

Adresa a1 = nová adresa („5, Wide Street“, null, „New York“); Zákazník c1 = nový zákazník („John Wide“, a1); EbeanServer server = Ebean.getDefaultServer (); server.save (c1); c1.setName ("Jane Wide"); c1.setAddress (null); server.save (c1); Zákazník nájdenýC1 = Ebean.find (Customer.class, c1.getId ()); Ebean.delete (foundC1);

Najskôr vytvoríme a Zákazník objekt a na uloženie pomocou predvolenej inštancie servera uložiť ().

Ďalej aktualizujeme podrobnosti o zákazníkovi a znova ich ukladáme pomocou uložiť ().

Nakoniec použijeme statickú metódu Nájsť() na Ebean načítať zákazníka a odstrániť ho pomocou odstrániť ().

6. Dotazy

Rozhrania Query API sa dajú použiť aj na vytvorenie grafu objektov s filtrami a predikátmi. Môžeme buď použiť Ebean alebo EbeanServer na vytváranie a vykonávanie dotazov.

Pozrime sa na dopyt, ktorý nájde a Zákazník podľa mesta a vráti a Zákazník a Adresa objekt, v ktorom sú vyplnené iba niektoré polia:

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

Tu, s Nájsť() naznačíme, že chceme nájsť entity typu Zákazník. Ďalej použijeme vyberte () určiť vlastnosti, ktoré sa majú vyplniť v Zákazník objekt.

Neskôr použijeme načítať () aby sme naznačili, že chceme načítať súbor Adresa predmet patriaci do Zákazník a že chceme načítať mesto lúka.

Nakoniec pridáme predikát a obmedzíme veľkosť výsledku na 1.

7. Transakcie

Ebean štandardne vykoná každý príkaz alebo dopyt v novej transakcii.

Aj keď to v niektorých prípadoch nemusí byť problém. Sú chvíle, kedy môžeme chcieť vykonať skupinu príkazov v rámci jednej transakcie.

V takýchto prípadoch, ak metódu anotujeme pomocou io.ebean.annotations.Transactional, všetky príkazy v rámci metódy sa vykonajú v rámci tej istej transakcie:

@Transactional public static void insertAndDeleteInsideTransaction () {Customer c1 = getCustomer (); EbeanServer server = Ebean.getDefaultServer (); server.save (c1); Zákazník našielC1 = server.find (Customer.class, c1.getId ()); server.delete (foundC1); }

8. Budovanie projektu

Nakoniec môžeme zostaviť projekt Maven pomocou príkazu:

zostaviť io.ebean: ebean-maven-plugin: vylepšiť

9. Záver

Ak to zhrnieme, pozreli sme sa na základné vlastnosti Ebean, ktoré možno použiť na pretrvávanie a dopytovanie entít v relačnej databáze.

Nakoniec je tento kód k dispozícii na Github.


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