Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Зиновьев Алексей,Тамтэк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, давайте жить дружно!

664 views

Published on

  • Be the first to like this

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

×