Работа с базами данных из Groovy
Работа с базами данных из Groovy
GORM (Grails ORM) - ORM, используемый во фреймворке Grails. Прост в использовании, интегрирован с Spring, применяется в веб-приложениях на Grails.
GORM — это реализация паттерна Active Record для Groovy, позволяющая легко работать с базами данных. Он скрывает сложность SQL и Hibernate под простым и интуитивно понятным API.
GORM построен на основе Hibernate Core, поддерживает реляционные БД (PostgreSQL, MySQL, H2 и др.), интегрирован с Spring Boot. Работает как в Grails, так и автономно в standalone-приложениях.
Как работать с GORM?
- Создание доменных классов (Domain Classes)
class Book {
String title
String author
BigDecimal price
Date releaseDate
static constraints = {
title blank: false, maxSize: 100
author nullable: true
}
}
Каждый такой класс автоматически становится таблицей в БД (book), а поля — столбцами.
- Основные операции CRUD
Создание:
def book = new Book(title: "Groovy in Action", author: "Dierk König", price: 49.99)
book.save()
Чтение:
def book = Book.get(1) // По ID
def books = Book.findAllByAuthor("Dierk König")
Обновление:
def book = Book.get(1)
book.price = 39.99
book.save()
Удаление:
def book = Book.get(1)
book.delete()
- Динамические методы поиска
GORM предоставляет множество удобных методов:
Book.findByTitle("Groovy in Action")
Book.findAllByPriceLessThan(50.0)
Book.countByAuthor("Dierk König")
Book.findAllByReleaseDateBetween(startDate, endDate)
- Связи между доменами
Пример связи один ко многим:
class Author {
String name
static hasMany = [books: Book]
}
class Book {
String title
static belongsTo = [author: Author]
}
Теперь можно делать:
def author = new Author(name: "Dierk König").save()
def book = new Book(title: "Groovy in Action").save()
author.addToBooks(book).save()
// Получить все книги автора
author.books.each { println it.title }
Можно явно указать, как будет выглядеть таблица в БД:
class Book {
String title
static mapping = {
table 'books'
title column: 'book_title', length: 255
}
}
Работа с транзакциями
Book.withTransaction { status ->
def book = new Book(title: "New Book")
if (book.save()) {
// ...
} else {
status.setRollbackOnly()
}
}
GORM можно использовать и без Grails, например, в Spring Boot приложениях.
Для этого нужно добавить зависимость в build.gradle и использовать доменные классы и сервисы в контроллерах или сервисах Spring.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Groovy — это кейс эволюции технологии в условиях доминирующей платформы. Из неё можно извлечь несколько обобщаемых принципов. Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Набор советов, правил, принципов и обычаев в разработке на этом языке. Макросы на уровне языка (начиная с Groovy 2.5) — groovy.transform.Macro позволяет инжектить код, основываясь на анализе AST. Типизация, набор правил определения типа данных значений языка. Арифметические операторы в Groovy предназначены для выполнения математических операций над числами. К ним относятся — + — сложение. Применяется к числам, а также к строкам, где он выполняет… В языке Groovy циклы реализованы как через классические управляющие конструкции, унаследованные от Java и других императивных языков, так и через более выразительные, декларативные подходы,… В этом примере greet — это переменная, содержащая замыкание. Замыкание принимает один параметр name и выводит приветствие. Вызов greet(Groovy) выполняет код внутри замыкания. Нет проверяемых исключений — компилятор Groovy игнорирует механизм throws, принятый в Java. Groovy позволяет работать с переменными без явного указания типа (def), что делает его гибким для скриптов. Кавычки, точки, запятые, скобки и прочие знаки препинания. Groovy использует все ключевые слова Java и добавляет собственные для упрощения синтаксиса. Справочник разделён на логические группы для удобства использования.История языка Groovy
Что требуется знать перед началом изучения языка программирования Groovy
Рекомендации по разработке на Groovy
Основы языка Groovy
Типы данных и объявление переменных
Операторы и выражения в Groovy
Циклы и управляющие конструкции
Объектно-ориентированное программирование в Groovy
Иерархия исключений в Groovy
Особенности и расширения языка Groovy
Синтаксис и пунктуация в Groovy
Ключевые слова языка Groovy