En introduksjon til Grails 3 og GORM

Utholdenhetstopp

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

Dette er en rask intro til Grails 3 og GORM.

Vi kommer selvfølgelig til å bruke Groovy og - implisitt - rammeverket bruker også Hibernate for ORM, Spring Framework for Dependency Injection, SiteMash for layout og temaer, etc.

2. Datakildekonfigurasjon

Vi kan starte uten å måtte spesifisere noen eksplisitt datakildekonfigurasjon - Grails bruker som standard HSQLDB-databasen for utviklings- og testmiljøer.

Men hvis du vil endre disse standardene, kan du definere den valgte datakilden i application.yml:

miljøer: utvikling: dataSource: driverClassName: "com.mysql.jdbc.Driver" url: "jdbc: mysql: // localhost: 8080 / test" dialekt: org.hibernate.dialect.MySQL5InnoDBDialect 

På samme måte kan vi lage flere miljøer her, ved siden av utvikling hvis vi trenger det.

3. Domene

Grails er i stand til å lage databasestrukturen for domeneklassene våre, basert på db Opprett egenskap i databasekonfigurasjonen.

La oss definere en av disse domeneklassene her:

Klassebruker {String brukernavn String passord String email String age static constraints = {userName blank: false, unique: true password size: 5..10, blank: false email email: true, blank: true}}

Legg merke til hvordan vi spesifiserer våre valideringsbegrensninger rett i modellen, som holder ting pent og rent og uten merknader.

Disse begrensningene vil bli sjekket av Grails automatisk når enheten fortsetter, og rammeverket vil gi passende validerings unntak hvis noen av disse begrensningene blir brutt.

Vi kan også spesifisere GORM-tilordninger i kartlegging egenskapen til modellen:

statisk kartlegging = {sort "userName"}

Nå hvis vi ringer User.list () - vi får tilbake resultater sortert etter brukernavn.

Vi kunne selvfølgelig oppnå det samme resultatet ved å sende sorteringen til listen API:

User.list (sort: "userName")

4. CRUD-operasjoner

Når vi ser på API-operasjoner, stillas spiller en veldig interessant rolle i begynnelsen; det lar deg generere grunnleggende et CRUD API for en domeneklasse, inkludert:

  • De nødvendige utsiktene
  • Kontrollerhandlinger for standard CRUD-operasjoner
  • To typer: Dynamisk og Statisk

Slik fungerer det med dynamisk stillas:

klasse UserController {statisk stillas = true}

Ved å bare skrive denne enkeltlinjen, vil rammeverket generere 7 metoder ved kjøretid: vise, redigere, slette, opprette, lagre og oppdatere. Disse vil bli publisert som API for den aktuelle domenenheten.

Eksempel på statisk stillas:

  • For å lage et syn med stillas, bruk: “grails genererer-visninger Bruker
  • For å lage kontrolleren og vise med stillas, bruk: “grails generere-kontroller bruker
  • For å lage alt i en kommando, bruk: “grails genererer alle brukere

Disse kommandoene vil automatisk generere den nødvendige rørleggerarbeidet for det bestemte domeneobjektet.

La oss nå se veldig raskt på å bruke disse operasjonene - for eksempel for våre Bruker domeneobjekt.

Til opprette ny brukeroppføring:

def bruker = ny bruker (brukernavn: "test", passord: "test123", e-post: "[e-postbeskyttet]", alder: 14) user.save ()

Til hente en enkelt plate:

def bruker = User.get (1) 

Dette API vil hente domenobjektet i redigerbar modus. For en skrivebeskyttet modus kan vi bruke lese API:

def user = User.read (1)

Til oppdater eksisterende post:

def user = User.get (1) user.userName = "testUpdate" user.age = 20 user.save () 

Og en enkel sletteoperasjon for en eksisterende post:

def user = User.get (1) user.delete ()

5. GORM-spørsmål

5.1. finne

La oss starte med finne API:

def user = User.find ("fra bruker som u hvor u.username = 'test'")

Vi kan også bruke en annen syntaks for å sende inn parameteren:

def user = User.find ("fra bruker som u hvor brukernavn?", ['test'])

Vi kan også bruke en navngitt parameter:

def user = User.find ("fra bruker som u hvor u.username =?", [brukernavn: 'test'])

5.2. findBy

Grails gir et dynamisk søkeanlegg som bruker domenegenskaper til å utføre et spørsmål ved kjøretid og returnere den første samsvarende posten:

def user = User.findByUsername ("test") user = User.findByUsernameAndAge ("test", 20) user = User.findByUsernameLike ("tes") user = User.findByUsernameAndAgeNotEquals ("test", "100")

Du finner flere uttrykk her.

5.3. Kriterier

Vi kan også hente data ved hjelp av noen fleksible kriterier:

def user = User.find {username == "test"} def user = User.createCriteria () def results = user.list {like ("userName", "te%") and {between ("age", 10, 20)} rekkefølge ("userName", "desc")}

Et raskt notat her - når du bruker et kriteriespørsmål, bruk “{}” i stedet for “()”.

5.4. Utfør spørring / oppdatering

GORM støtter også HQL-spørresyntaks - for leseoperasjoner:

def user = User.executeQuery ("velg u.userName fra User u hvor u.userName =?", ['test'])

I tillegg til skriveoperasjoner:

def user = User.executeUpdate ("slett bruker u hvor u.username =?", ['test'])

6. Konklusjon

Dette har vært en veldig rask intro til Grails og GORM - som skal brukes som en guide til å komme i gang med rammeverket.

Persistensbunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

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