«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»

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

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

Чтобы создать новую запись «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. find

Начнем с 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. Execute Query/Update

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

«