Зиновьев Алексей,ТамтэкMyBatis & Hibernate,давайте жить дружно
● аспирант ОмГУ, математик;● Java-девелопер в компании Thumbtack;● занимаюсь теорией графов, прогнозированиемпробок, иссле...
О чем этот докладТот жеIbatis,только впрофиль
Тут будем разминаться● Кто хоть раз использовал ORM ?
Тут будем разминаться● Кто хоть раз использовал ORM ?● Кто хоть раз использовал Hibernate ?
Тут будем разминаться● Кто хоть раз использовал ORM ?● Кто хоть раз использовал Hibernate ?● Кто хоть раз использовал MyBa...
Тут будем разминаться● Кто хоть раз использовал ORM ?● Кто хоть раз использовал Hibernate ?● Кто хоть раз использовал MyBa...
Жил-был один проект● Как бы плагин к однойизвестной базе● JDBC - лапша в коде● Одна база readonly● Требуется аналитическая...
Почему на проекте появилсяHibernate● несколько удобных сущностей, для которыхбыли на первых порах нужны только CRUD -опера...
Волшебная палочка Hiber?● Пасует в сложныхзапросах● Сложные связи междутаблицами превращаютсяв неожиданные объекты● Плох д...
Шло время, изменялисьтребования ...● Росло финансирование● На проекте менялисьпрограммисты● Появились и былисформулированы...
Цели● Производительностьпрограммиста● Легко расширяемыйфункционал● Быстрая работа с БД● Кэширование● Уход от сборки данных...
MyBatis MaciBatis● конфигурирование в коде или в специальномфайле;● выгрузка результата запроса в объект;● стандартный кэш...
Обобщим?
App case #1● Новый проект● Часто меняющаяся схемаБД● Неясная иерархияобъектов● Пока нечегоанализировать● Много write, мало...
Ну вы поняли, что это не нашпациент ...
App case #2● Есть давно рабочая БД● Нет контроля над схемой● Сбор аналитики,построение отчетов● Хранимые процедуры● Много ...
Для чего удобен Hibernate● Нужно что-то кэшировать● Хорош в работе сдеревьями объектов● Множество CRUD -операций● Есть ста...
Для чего удобен JDBC● Критичные попроизводительностиместа● Сложные запросы,получающие простыеответы● Для обучения новичков...
Для чего удобен MyBatis● хранения и разработкисложных SQL - запросов;● для замены JDBC;● для нетривиальныхсущностей, котор...
Проблемы интеграции● Люди испытывают разныечувства к SQL● Спорные ситуации,передел сфер влияния● Мало удачных примеровдля ...
Процесс внедрения● Общественный договор● Документирование сфервлияния● Диаграммы dev-процессов(как на проекте добавитьновы...
Добавление нового отчета(пример dev-процесса)● добавляем 1 запрос типа select;● добавляем 1 Result map (не обязательно);● ...
Простые шагиСледует начать с того, чтобы промаркировать таблицыданных следующим образом:● READONLY - контент, который пост...
Простые шагиВсе таблицы с меткой ENTITY можно прогнать сквозьмясорубку хибернейтовского Reverse Engineering, создав поним ...
Hibernate + MyBatis● Могут жить на одномпроекте● Строгое разграничениесфер● Большие отчеты - MyBatis● Entity - в Hibernate...
Контакты и полезные ссылки● Руководство по Hibernate● Статья в моем блоге по теме доклада● Сайт MyBatis● Моя почта: zalesl...
Да пребудет с вами DAO!
Вопросы?Зиновьев Алексей,Тамтэкzaleslaw.sin@gmail.com
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
Upcoming SlideShare
Loading in …5
×

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

470 views
417 views

Published on

1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
470
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

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

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

×