SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Зиновьев Алексей,
Тамтэк
MyBatis & Hibernate,
давайте жить дружно
● аспирант ОмГУ, математик;
● Java-девелопер в компании Thumbtack;
● занимаюсь теорией графов, прогнозированием
пробок, исследованием транспортных систем;
● большой фанат различных Maps API;
● лидер GDG Omsk.
О себе
О чем этот доклад
Тот же
Ibatis,
только в
профиль
Тут будем разминаться
● Кто хоть раз использовал ORM ?
Тут будем разминаться
● Кто хоть раз использовал ORM ?
● Кто хоть раз использовал Hibernate ?
Тут будем разминаться
● Кто хоть раз использовал ORM ?
● Кто хоть раз использовал Hibernate ?
● Кто хоть раз использовал MyBatis ?
Тут будем разминаться
● Кто хоть раз использовал ORM ?
● Кто хоть раз использовал Hibernate ?
● Кто хоть раз использовал MyBatis ?
● Кто хоть раз плевал на все и писал
свой QueryEnterpriseSQLBuilder ?
Жил-был один проект
● Как бы плагин к одной
известной базе
● JDBC - лапша в коде
● Одна база readonly
● Требуется аналитическая
отчетность
● Немного Hibernate для пары
таблиц в собственной базе
● Сборка отчетов в коде
Почему на проекте появился
Hibernate
● несколько удобных сущностей, для которых
были на первых порах нужны только CRUD -
операции;
● сущности были древовидными, хороши для HQL;
● легкая разметка аннотациями существующей
модели;
● Criteria API для недругов SQL;
● архитектору просто нравился Hibernate.
Волшебная палочка Hiber?
● Пасует в сложных
запросах
● Сложные связи между
таблицами превращаются
в неожиданные объекты
● Плох для больших
выборок данных
● Не прост в изучении
● Необъяснимые падения
производительности
Шло время, изменялись
требования ...
● Росло финансирование
● На проекте менялись
программисты
● Появились и были
сформулированы цели
● Росло число методов в
DAO - классе (sic!)
● Код переполнялся
низкоуровневыми
List<List<List<?>>>
Цели
● Производительность
программиста
● Легко расширяемый
функционал
● Быстрая работа с БД
● Кэширование
● Уход от сборки данных
отчета в коде
● Минимальная скорость
добавления одного отчета
MyBatis Mac'iBatis
● конфигурирование в коде или в специальном
файле;
● выгрузка результата запроса в объект;
● стандартный кэш или собственный;
● динамическая безопасная сборка SQL (целых
секций) в зависимости от параметров, позволяет
сократить число запросов;
● возможность использования аннотаций или map
- файлов (аннотации менее популярны).
Обобщим?
App case #1
● Новый проект
● Часто меняющаяся схема
БД
● Неясная иерархия
объектов
● Пока нечего
анализировать
● Много write, мало read
● No JOINs
Ну вы поняли, что это не наш
пациент ...
App case #2
● Есть давно рабочая БД
● Нет контроля над схемой
● Сбор аналитики,
построение отчетов
● Хранимые процедуры
● Много read
● Нужны JOINs
● Приложение для
работающего бизнеса
Для чего удобен Hibernate
● Нужно что-то кэшировать
● Хорош в работе с
деревьями объектов
● Множество CRUD -
операций
● Есть стабильные, ясные
сущности
● Контроль над схемой БД
● Создание прототипа
Для чего удобен JDBC
● Критичные по
производительности
места
● Сложные запросы,
получающие простые
ответы
● Для обучения новичков
● Мсье знает толк...
Для чего удобен MyBatis
● хранения и разработки
сложных SQL - запросов;
● для замены JDBC;
● для нетривиальных
сущностей, которые
собираются из нескольких
таблиц;
● для урезанных версий
сущностей;
● для динамических
семейств SQL.
Проблемы интеграции
● Люди испытывают разные
чувства к SQL
● Спорные ситуации,
передел сфер влияния
● Мало удачных примеров
для MyBatis в сети
● Теперь надо учить две
технологии вместо одной?
Процесс внедрения
● Общественный договор
● Документирование сфер
влияния
● Диаграммы dev-процессов
(как на проекте добавить
новый отчет)
● Чувство прекрасного
Добавление нового отчета
(пример dev-процесса)
● добавляем 1 запрос типа select;
● добавляем 1 Result map (не обязательно);
● добавляем 1 класс, соответствующий строке
отчета;
● добавляем 1 функцию в DAO, получающюю
список ResultMap объектов по псевдониму.
Эта функция возвращает множество строк отчета.
Изменение логики запроса приводит лишь к
изменению SQL - запроса.
Простые шаги
Следует начать с того, чтобы промаркировать таблицы
данных следующим образом:
● READONLY - контент, который поставляется нам со
стороны;
● REPORT - таблицы, поставляющие данные для
аналитической отчетности;
● ENTITY - удобные для понимания сущности,
которые нужно будет редактировать;
● PART OF ENTITY <ENTITY_NAME> - часть удобной
сущности ( в скобках указана сущность).
Простые шаги
Все таблицы с меткой ENTITY можно прогнать сквозь
мясорубку хибернейтовского Reverse Engineering, создав по
ним классы - сущности.
Для сущностей распавшихся по таблицам, с меткой PART OF
ENTITY <ENTITY_NAME> мы руками создаем классы по
стандарту JPA или пишем map - файл для Hibernate сами,
или определяем foreign keys (если это возможно в БД) и
полагаемся на Reverse Engineering.
Для READONLY и REPORT стоит написать запрос, который
на выходе получает список строк отчета, которые маппятся в
коллекцию (List) объектов типа "строка отчета"
Hibernate + MyBatis
● Могут жить на одном
проекте
● Строгое разграничение
сфер
● Большие отчеты - MyBatis
● Entity - в Hibernate
● Высокая скорость
разработки
● ORM на проекте - шаг к
MVC
Контакты и полезные ссылки
● Руководство по Hibernate
● Статья в моем блоге по теме доклада
● Сайт MyBatis
● Моя почта: zaleslaw.sin@gmail.com
● Мой профиль в Google+
Да пребудет с вами DAO!
Вопросы?
Зиновьев Алексей,
Тамтэк
zaleslaw.sin@gmail.com

Mais conteúdo relacionado

Mais procurados

Автоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1CАвтоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1C
Alexey Lustin
 

Mais procurados (8)

Егор Матешук. МаксимаТелеком. Не Spark’ом единым — полезные инструменты для с...
Егор Матешук. МаксимаТелеком. Не Spark’ом единым — полезные инструменты для с...Егор Матешук. МаксимаТелеком. Не Spark’ом единым — полезные инструменты для с...
Егор Матешук. МаксимаТелеком. Не Spark’ом единым — полезные инструменты для с...
 
"RT индексы в поиске Avito" Вячеслав Крюков (Avito)
"RT индексы в поиске Avito" Вячеслав Крюков (Avito)"RT индексы в поиске Avito" Вячеслав Крюков (Avito)
"RT индексы в поиске Avito" Вячеслав Крюков (Avito)
 
Apex OOP Patterns (Valery Dvornichenko)
Apex OOP Patterns (Valery Dvornichenko)Apex OOP Patterns (Valery Dvornichenko)
Apex OOP Patterns (Valery Dvornichenko)
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Прямая выгода BigData для бизнеса
Прямая выгода BigData для бизнесаПрямая выгода BigData для бизнеса
Прямая выгода BigData для бизнеса
 
.NET Native (Uneta 23.10.15)
.NET Native (Uneta 23.10.15).NET Native (Uneta 23.10.15)
.NET Native (Uneta 23.10.15)
 
Автоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1CАвтоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1C
 
Адаптация Git flow при коллективной разработке на 1с
Адаптация Git flow при коллективной разработке на 1сАдаптация Git flow при коллективной разработке на 1с
Адаптация Git flow при коллективной разработке на 1с
 

Destaque

Осознанность рефакторинга: Модель принятия инженерных решений
Осознанность рефакторинга: Модель принятия инженерных решенийОсознанность рефакторинга: Модель принятия инженерных решений
Осознанность рефакторинга: Модель принятия инженерных решений
Evgeniy Krivosheev
 

Destaque (9)

Tdd Workshop Disscussions
Tdd Workshop DisscussionsTdd Workshop Disscussions
Tdd Workshop Disscussions
 
Осознанность рефакторинга: Модель принятия инженерных решений
Осознанность рефакторинга: Модель принятия инженерных решенийОсознанность рефакторинга: Модель принятия инженерных решений
Осознанность рефакторинга: Модель принятия инженерных решений
 
Вебинар начало
Вебинар началоВебинар начало
Вебинар начало
 
Google GIN
Google GINGoogle GIN
Google GIN
 
Введение в веб каркас Struts2
Введение в веб каркас Struts2Введение в веб каркас Struts2
Введение в веб каркас Struts2
 
Transactions and Concurrency Control Patterns
Transactions and Concurrency Control PatternsTransactions and Concurrency Control Patterns
Transactions and Concurrency Control Patterns
 
High-Performance JDBC Voxxed Bucharest 2016
High-Performance JDBC Voxxed Bucharest 2016High-Performance JDBC Voxxed Bucharest 2016
High-Performance JDBC Voxxed Bucharest 2016
 
High-Performance Hibernate Devoxx France 2016
High-Performance Hibernate Devoxx France 2016High-Performance Hibernate Devoxx France 2016
High-Performance Hibernate Devoxx France 2016
 
High Performance Hibernate JavaZone 2016
High Performance Hibernate JavaZone 2016High Performance Hibernate JavaZone 2016
High Performance Hibernate JavaZone 2016
 

Semelhante a CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!

кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
Vyacheslav Nikulin
 
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-featuresDevconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
Sergey Petrunya
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
Oleg Churkin
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
Stanfy
 

Semelhante a CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно! (20)

ORM battle. MyBatis vs Hibernate
ORM battle. MyBatis vs HibernateORM battle. MyBatis vs Hibernate
ORM battle. MyBatis vs Hibernate
 
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
Devconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-featuresDevconf2010 mariadb-extra-features
Devconf2010 mariadb-extra-features
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
 
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
 
Anton Shloma. Custom tables
Anton Shloma. Custom tablesAnton Shloma. Custom tables
Anton Shloma. Custom tables
 
Anton Shloma. Custom tables
Anton Shloma. Custom tablesAnton Shloma. Custom tables
Anton Shloma. Custom tables
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
StackLight (aka LMA)
StackLight (aka LMA)StackLight (aka LMA)
StackLight (aka LMA)
 
Слоистая архитектура
Слоистая архитектураСлоистая архитектура
Слоистая архитектура
 

Mais de CodeFest

Mais de CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!

  • 1. Зиновьев Алексей, Тамтэк MyBatis & Hibernate, давайте жить дружно
  • 2. ● аспирант ОмГУ, математик; ● Java-девелопер в компании Thumbtack; ● занимаюсь теорией графов, прогнозированием пробок, исследованием транспортных систем; ● большой фанат различных Maps API; ● лидер GDG Omsk. О себе
  • 3. О чем этот доклад Тот же Ibatis, только в профиль
  • 4. Тут будем разминаться ● Кто хоть раз использовал ORM ?
  • 5. Тут будем разминаться ● Кто хоть раз использовал ORM ? ● Кто хоть раз использовал Hibernate ?
  • 6. Тут будем разминаться ● Кто хоть раз использовал ORM ? ● Кто хоть раз использовал Hibernate ? ● Кто хоть раз использовал MyBatis ?
  • 7. Тут будем разминаться ● Кто хоть раз использовал ORM ? ● Кто хоть раз использовал Hibernate ? ● Кто хоть раз использовал MyBatis ? ● Кто хоть раз плевал на все и писал свой QueryEnterpriseSQLBuilder ?
  • 8. Жил-был один проект ● Как бы плагин к одной известной базе ● JDBC - лапша в коде ● Одна база readonly ● Требуется аналитическая отчетность ● Немного Hibernate для пары таблиц в собственной базе ● Сборка отчетов в коде
  • 9. Почему на проекте появился Hibernate ● несколько удобных сущностей, для которых были на первых порах нужны только CRUD - операции; ● сущности были древовидными, хороши для HQL; ● легкая разметка аннотациями существующей модели; ● Criteria API для недругов SQL; ● архитектору просто нравился Hibernate.
  • 10. Волшебная палочка Hiber? ● Пасует в сложных запросах ● Сложные связи между таблицами превращаются в неожиданные объекты ● Плох для больших выборок данных ● Не прост в изучении ● Необъяснимые падения производительности
  • 11. Шло время, изменялись требования ... ● Росло финансирование ● На проекте менялись программисты ● Появились и были сформулированы цели ● Росло число методов в DAO - классе (sic!) ● Код переполнялся низкоуровневыми List<List<List<?>>>
  • 12. Цели ● Производительность программиста ● Легко расширяемый функционал ● Быстрая работа с БД ● Кэширование ● Уход от сборки данных отчета в коде ● Минимальная скорость добавления одного отчета
  • 13. MyBatis Mac'iBatis ● конфигурирование в коде или в специальном файле; ● выгрузка результата запроса в объект; ● стандартный кэш или собственный; ● динамическая безопасная сборка SQL (целых секций) в зависимости от параметров, позволяет сократить число запросов; ● возможность использования аннотаций или map - файлов (аннотации менее популярны).
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 23. App case #1 ● Новый проект ● Часто меняющаяся схема БД ● Неясная иерархия объектов ● Пока нечего анализировать ● Много write, мало read ● No JOINs
  • 24. Ну вы поняли, что это не наш пациент ...
  • 25. App case #2 ● Есть давно рабочая БД ● Нет контроля над схемой ● Сбор аналитики, построение отчетов ● Хранимые процедуры ● Много read ● Нужны JOINs ● Приложение для работающего бизнеса
  • 26. Для чего удобен Hibernate ● Нужно что-то кэшировать ● Хорош в работе с деревьями объектов ● Множество CRUD - операций ● Есть стабильные, ясные сущности ● Контроль над схемой БД ● Создание прототипа
  • 27. Для чего удобен JDBC ● Критичные по производительности места ● Сложные запросы, получающие простые ответы ● Для обучения новичков ● Мсье знает толк...
  • 28. Для чего удобен MyBatis ● хранения и разработки сложных SQL - запросов; ● для замены JDBC; ● для нетривиальных сущностей, которые собираются из нескольких таблиц; ● для урезанных версий сущностей; ● для динамических семейств SQL.
  • 29. Проблемы интеграции ● Люди испытывают разные чувства к SQL ● Спорные ситуации, передел сфер влияния ● Мало удачных примеров для MyBatis в сети ● Теперь надо учить две технологии вместо одной?
  • 30. Процесс внедрения ● Общественный договор ● Документирование сфер влияния ● Диаграммы dev-процессов (как на проекте добавить новый отчет) ● Чувство прекрасного
  • 31. Добавление нового отчета (пример dev-процесса) ● добавляем 1 запрос типа select; ● добавляем 1 Result map (не обязательно); ● добавляем 1 класс, соответствующий строке отчета; ● добавляем 1 функцию в DAO, получающюю список ResultMap объектов по псевдониму. Эта функция возвращает множество строк отчета. Изменение логики запроса приводит лишь к изменению SQL - запроса.
  • 32. Простые шаги Следует начать с того, чтобы промаркировать таблицы данных следующим образом: ● READONLY - контент, который поставляется нам со стороны; ● REPORT - таблицы, поставляющие данные для аналитической отчетности; ● ENTITY - удобные для понимания сущности, которые нужно будет редактировать; ● PART OF ENTITY <ENTITY_NAME> - часть удобной сущности ( в скобках указана сущность).
  • 33. Простые шаги Все таблицы с меткой ENTITY можно прогнать сквозь мясорубку хибернейтовского Reverse Engineering, создав по ним классы - сущности. Для сущностей распавшихся по таблицам, с меткой PART OF ENTITY <ENTITY_NAME> мы руками создаем классы по стандарту JPA или пишем map - файл для Hibernate сами, или определяем foreign keys (если это возможно в БД) и полагаемся на Reverse Engineering. Для READONLY и REPORT стоит написать запрос, который на выходе получает список строк отчета, которые маппятся в коллекцию (List) объектов типа "строка отчета"
  • 34. Hibernate + MyBatis ● Могут жить на одном проекте ● Строгое разграничение сфер ● Большие отчеты - MyBatis ● Entity - в Hibernate ● Высокая скорость разработки ● ORM на проекте - шаг к MVC
  • 35. Контакты и полезные ссылки ● Руководство по Hibernate ● Статья в моем блоге по теме доклада ● Сайт MyBatis ● Моя почта: zaleslaw.sin@gmail.com ● Мой профиль в Google+
  • 36. Да пребудет с вами DAO!