1. Обзор
Это краткое введение в Grails 3 и GORM.
Мы, конечно, будем использовать Groovy и – неявно – фреймворк также использует Hibernate для ORM, фреймворк Spring для внедрения зависимостей, 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 } }
Обратите внимание , как мы указываем наши ограничения проверки прямо в модели , что делает вещи красивыми, чистыми и свободными от аннотаций.
Эти ограничения будут автоматически проверяться Граалями, когда объект сохраняется, и фреймворк выдаст соответствующие исключения проверки, если какое-либо из этих ограничений будет нарушено.
Мы также можем указать отображения GORM в свойстве mapping модели:
static mapping = { sort "userName" }
Теперь, если мы вызовем User.list() – мы получим результаты , отсортированные по имени пользователя .
Конечно, мы могли бы достичь того же результата, передав сортировку в API списка:
User.list(sort: "userName")
4. Операции CRUD
Когда мы смотрим на операции API, scaffolding играет очень интересную роль в начале; он позволяет создавать базовый API CRUD для класса домена, включая:
- Необходимые представления
- Действия контроллера для стандартных операций CRUD
- Два типа: Динамический и статический
Вот как это работает с динамическими строительными лесами:
class UserController { static scaffold = true }
Просто написав эту единственную строку, фреймворк создаст 7 методов во время выполнения: показать, отредактировать, удалить, создать, сохранить и обновить. Они будут опубликованы в качестве API для этой конкретной доменной сущности.
Пример статических лесов:
- Для создания представления с использованием лесов используйте: ” grails generate-views User “
- Для создания контроллера и представления со строительными лесами используйте: ” grails generate-controller User “
- Чтобы создать все в одной команде, используйте: ” grails generate-all User “
Эти команды автоматически сгенерируют необходимую сантехнику для этого конкретного объекта домена.
Давайте теперь очень быстро рассмотрим использование этих операций – например, для нашего объекта User domain.
Чтобы создать новую запись “пользователь” :
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. найти
Давайте начнем с 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. Выполнение запроса/Обновления
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 – для использования в качестве руководства по началу работы с фреймворком.