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

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

Точно так же мы можем создать несколько сред здесь, рядом с development , если нам нужно.

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 в свойстве mapping модели:

static mapping = { sort "userName" }

Теперь, если мы вызовем User.list () - мы вернем результаты , отсортированные по username .

Конечно, мы могли бы достичь того же результата, передав сортировку в API списка:

User.list(sort: "userName")

4. Операции CRUD

Когда мы смотрим на операции API, scaffolding играет очень интересную роль в начале; он позволяет генерировать базовый API-интерфейс CRUD для класса домена, в том числе:

  • Необходимые виды

  • Действия контроллера для стандартных операций CRUD

  • Два типа: динамический и статический

Вот как это работает с динамическими лесами: + ``

class UserController {
    static scaffold = true
}

Просто написав эту единственную строку, фреймворк будет генерировать 7 методов во время выполнения: показывать, редактировать, удалять, создавать, сохранять и обновлять. Они будут опубликованы как API для этого конкретного объекта домена.

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

  • Чтобы создать представление с помощью скаффолдинга, используйте: « grails generate-views User «

  • Для создания контроллера и просмотра с использованием лесов используйте: «__grails

Сгенерировать контроллер «Пользователь » ** Чтобы создать все в одной команде, используйте: « grails generate-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 read :

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 find :

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")

Вы можете найти другие выражения here .

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 - для использования в качестве руководства для начала работы с фреймворком.