Перейти к основному содержимому

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

· 4 мин. чтения

Задача: Сумма двух

Дано массив целых чисел и целая сумма. Нужно найти индексы двух чисел, сумма которых равна заданной ...

ANDROMEDA

1. Обзор

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

Мы, конечно, собираемся использовать Groovy, и — неявно — фреймворк также использует Hibernate для ORM, Spring Framework для внедрения зависимостей, SiteMash для макета и тем и т. д.

2. Конфигурация источника данных

Мы можем начать без указания какой-либо явной конфигурации источника данных — по умолчанию 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 generate-all User » .

Эти команды автоматически сгенерируют необходимое подключение для этого конкретного объекта домена.

Давайте теперь очень быстро рассмотрим использование этих операций, например, для нашего объекта домена пользователя .

Чтобы создать новую «пользовательскую» запись :

def user = new User(username: "test", password: "test123", email: "a@a.com", age: 14)
user.save()

Чтобы получить одну запись :

def user = User.get(1)

Этот 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. найтиПо

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. Заключение

Это было очень краткое введение в Grails и GORM, которое можно использовать в качестве руководства по началу работы с фреймворком.