Въведение в Grails 3 и GORM

Устойчивост отгоре

Току що обявих новия курс Learn Spring , фокусиран върху основите на Spring 5 и Spring Boot 2:

>> ПРЕГЛЕД НА КУРСА

1. Общ преглед

Това е кратко въведение в Grails 3 и GORM.

Разбира се, ще използваме Groovy и - по подразбиране - рамката също използва Hibernate за ORM, Spring Framework за впръскване на зависимост, SiteMash за оформление и теми и т.н.

2. Конфигуриране на DataSource

Можем да започнем, без да се налага да посочваме някаква изрична конфигурация на източника на данни - по подразбиране Grails използва базата данни HSQLDB за среди за разработка и тестване.

Но ако искате да промените тези настройки по подразбиране, можете да дефинирате избрания източник на данни в application.yml :

environments: development: dataSource: driverClassName : "com.mysql.jdbc.Driver" url : "jdbc:mysql://localhost:8080/test" dialect : org.hibernate.dialect.MySQL5InnoDBDialect 

По същия начин тук можем да създадем множество среди, до разработка, ако е необходимо.

3. Домейн

Grails е способен да създаде структурата на базата данни за нашите класове на домейни, базирана на свойството dbCreate в конфигурацията на базата данни.

Нека дефинираме един от тези класове на домейни тук:

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

Обърнете внимание как определяме нашите ограничения за валидиране точно в модела , който поддържа нещата приятни и чисти и без анотации.

Тези ограничения ще бъдат проверени от Grails автоматично, когато обектът се запазва и рамката ще изведе подходящи изключения за проверка, ако някое от тези ограничения е нарушено.

Също така можем да посочим GORM картографирания в свойството за картографиране на модела:

static mapping = { sort "userName" }

Сега, ако се обадим на User.list () - ще получим обратно резултатите, сортирани по потребителско име .

Разбира се, бихме могли да постигнем същия резултат, като предадем сортирането към API на списъка:

User.list(sort: "userName")

4. CRUD операции

Когато разглеждаме операциите на API, скелето играе много интересна роля в началото; той ви позволява да генерирате основен CRUD API за клас на домейн, включително:

  • Необходимите гледки
  • Действия на контролера за стандартните CRUD операции
  • Два типа: динамичен и статичен

Ето как работи това с динамично скеле:

class UserController { static scaffold = true }

Само като напишете този единичен ред, рамката ще генерира 7 метода по време на изпълнение: показване, редактиране, изтриване, създаване, записване и актуализиране. Те ще бъдат публикувани като API за конкретния обект на домейна.

Пример за статично скеле:

  • За да създадете изглед с помощта на скеле: „ grails generate-views User
  • За да създадете контролера и изгледа със скеле, използвайте: „ grails generate-controller user
  • За да създадете всичко в една команда, използвайте: „ grails gene-all User

Тези команди ще генерират автоматично необходимия водопровод за конкретния обект на домейна.

Нека сега да разгледаме много бързо използването на тези операции - например за нашия обект на потребителски домейн.

За да създадете нов “потребителски” запис :

def user = new User(username: "test", password: "test123", email: "[email protected]", age: 14) user.save()

За да извлечете един запис :

def user = User.get(1) 

Този get API ще извлече обекта на домейна в режим за редактиране. За режим само за четене можем да използваме API за четене :

def user = User.read(1)

За да актуализирате съществуващия запис :

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

И проста операция за изтриване на съществуващ запис:

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

5. GORM заявки

5.1. намирам

Нека започнем с API за намиране :

def user = User.find("from User as u where u.username = 'test' ")

Също така можем да използваме различен синтаксис за предаване на параметъра:

def user = User.find("from User as u where u.username?", ['test'])

Можем да използваме и посочен параметър:

def user = User.find("from User as u where u.username=?", [username: 'test'])

5.2. findBy

Grails предоставя средство за динамично търсене, което използва свойства на домейна за изпълнение на заявка по време на изпълнение и връщане на първия съвпадащ запис:

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

Можете да намерите повече изрази тук.

5.3. Критерии

Също така можем да извличаме данни, като използваме някои гъвкави критерии:

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

Бърза бележка тук - когато използвате заявка за критерии, използвайте „{}“ вместо „()“.

5.4. Изпълнете заявка / актуализация

GORM също поддържа синтаксиса на HQL заявката - за операции на четене:

def user = User.executeQuery( "select u.userName from User u where u.userName = ?", ['test'])

Освен операции за запис:

def user = User.executeUpdate("delete User u where u.username =?", ['test'])

6. Conclusion

This has been a very quick intro to Grails and GORM – to be used as a guide to getting started with the framework.

Persistence bottom

I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:

>> CHECK OUT THE COURSE