A Grails egy nyílt forráskódú webes keretrendszer, mely a Java platformra illetve a Groovy nyelvre épül.
A fejlesztés 2005 júliusában kezdődött, a 0.1 verzió 2006. március 29-én jelent meg, az 1.0 verzió 2008. február 18-án.
A projekt eredeti neve 'Groovy on Rails' volt, de 2006 márciusában David Heinemeier Hansson, a Ruby on Rails alkotójának kérésére átkeresztelték az informálisan már egyébként is használt rövidebb Grails névre.
| grails-app/domain/Cow.groovy |
|---|
class Cow {
String name
String color
}
|
A Grails keretrendszer az MVC mintát használja.
A modell az adatokat reprezentálja. A domain osztályok konvenció szerint a grails-app/domain/ könyvtárban vannak.
A nézetek az adatokat jelenítik meg a felhasználók felé, illetve felhasználói interakciókat fogadnak. Mivel a Grails webes keretrendszer, a nézetek weboldalként jelennek meg. A Grails támogatja a JSP és a GSP technológiákat. Az elnevezési konvenciót követve a grails-app/views/cow/list.gsp fájlba kerül az a nézet, amely a CowController vezérlő list akciójához tartozik. Az elnevezések alapján a keretrendszer automatikusan elvégzi a hozzárendelést. Az alábbi példa egy GSP-ben írt nézetet mutat:
grails-app/views/cow/list.gsp |
|---|
<html>
<head>
<title>Teheneink teljes listája</title>
</head>
<body>
<h2>Teheneink teljes listája</h2>
<ul>
<g:each in="${cows}">
<li>${it.name} (${it.name})</li>
</g:each>
</ul>
</body>
</html>
|
| grails-app/controllers/CowController.groovy |
|---|
class CowController {
def list = {
[ cows: Cow.findAll() ]
}
}
|
A vezérlők állítják elő a nézetektől kapott felhasználói inputok alapján a megjelenítendő adatszerkezeteket a nézetek számára. A konvenció szerint a vezérlők a grails-app/controllers/ mappában vannak. A vezérlő tipikus művelete például az összes példány listázása.
A Grails-ben az alkalmazásfejlesztő csak a domain osztályokat definiálja, a perzisztencia a keretrendszer dolga. A Grails perzisztenciakezelője a GORM (Grails Object Relational Mapping), ami a Hibernate perzisztáló mechanizmusára épít. Minden osztályhoz automatikusan hozzárendeli az id és a version adatmezőket és generálja a perzisztáláshoz szükséges metódusokkal.
A GORM által kezelt domain osztályok rendelkeznek a következő statikus metódusokkal:
| metódus | magyarázat | példa |
|---|---|---|
count() |
Az adott osztályból tárolt rekordok száma az adatbázisban. | def cowCount = Cow.count()
|
exists() |
Igazat ad vissza, ha létezik adott típusú rekord. | def cowExists = Cow.exists(1)
|
find() |
Visszaadja a feltételnek megfelelő első rekordot. | def cow = Cow.find("from Cow c where c.color = ?", [ 'Lila' ])
|
findAll() |
Visszaadja a feltételnek megfelelő rekordok listáját. | def cows = Cow.findAll("from Cow c where c.color = ?", [ 'Lila' ])
|
findBy*() |
Visszaadja a mintának megfelelő első rekordot. | def cow = Cow.findByColor("lila")
|
findBy*Like() |
Visszaadja a mintának megfelelő első rekordot. | def cow = Cow.findByColorLike("li%")
|
findAllBy*() |
Visszaadja a mintának megfelelő rekordok listáját. | def cows = Cow.findAllByColor("lila")
|
findAllBy*Like() |
Visszaadja a mintának megfelelő rekordok listáját. | def cows = Cow.findAllByColorLike("li%")
|
findWhere() |
Visszaadja az első olyan rekordot, ami megfelel a feltételeknek. | def cow = Cow.findWhere(color:"lila")
|
| A lekérdezőnyelv szintaxisa HQL (Hibernate Query Language). | ||
A GORM által kezelt domain osztályok példányváltozói mindig rendelkeznek a következő perzisztáló metódusokkal:
| Metódus | Magyarázat | Példa |
|---|---|---|
save() |
Menti az adott rekordot adatbázisba. | cow.save()
|
delete() |
Törli az adott rekordot adatbázisból. | cow.delete()
|
refresh() |
Aktualizálja az adott rekord állapotát az adatbázisból. | cow.refresh()
|
ident() |
Visszaadja az rekord azonosítóját az adatbázisból. | cow.ident()
|