В прошлом посте начал вас знакомить с Groovy.
Да, работать с JDBC в Groovy просто, но какой в этом смысл если мы в 99% работаем с базой через ORM?
Давайте рассмотрим ситуацию когда мы работаем с базой, а ORM все еще не нужен?
- наше приложение достаточно мало, чтобы работать с данным прямо из базы без реляционной привязки
- нет сложных взамосвязей между сущностями
Получается, в случае пет проджекта или просто небольшого проекта нет особого преимущества в использовании ORM фреймворка.
А что же если все-таки хочется избежать написания CRUD sql запросов и работь непосредство через удобное API?
Можно сделать простенький ORM фреймворк, который позволит работать c БД без sql.
Наша сущность
class Person {
String id
String firstname
String lastname
}
соединение и DDL:
def server = startServer()
def sql = Sql.newInstance(dbSettings)
//при создании таблицы таки sql воспользуемся
sql.execute('''CREATE TABLE PERSON(
ID VARCHAR(8) PRIMARY KEY,
FIRSTNAME VARCHAR(100),
LASTNAME VARCHAR(100),
AGE INTEGER)
''');
Дальше будем и использовать DataSet. Как он работает? DataSet представляет собой мапу название столбец/значение. Доступ к данным легко получить по названию столбца без учета регистра. Сам запрос выполнится только пользе вызова each на нашем датасете.
Но сначала DataSet
нужно получить
def persons = new DataSet(sql, 'Person')
Передаем в конструктор название таблицы и соединение с базой
наполняем нашу таблицу(create):
persons.add(id : 'AA414133',
firstname: 'Jessy',
lastname: 'Pinkman',
age: 25
)
persons.add(id : 'BB414123',
firstname: 'Walter',
lastname: 'White',
age: 55)
persons.add(id : 'HH777123',
firstname: 'Conor',
lastname: 'McGregor',
age: 26)
делаем выборку с условием(retrieve)
persons.findAll {it.age > 25}
.each {printf('%-20s%s\n',
it.firstname,
it.lastname)}
получаем:
Walter White
Conor McGregor
добавим сортировку:
persons.findAll {it.age > 25}
.sort{it.firstname}
.each {printf('%-20s%s\n',
it.firstname,
it.lastname)}
тогда мы получим
Conor McGregor
Walter White
Вот и вся Groovy
магия
Источники:
Код можно взять здесь
Комментариев нет:
Отправить комментарий