2012-12-01 03 Битва orm: hibernate vs mybatis. Давайте жить дружно!
DESCRIPTION
Рассказ об опыте использования двух разных ORM на одном Java-проекте, освещение их преимуществ, недостатков и границ применимостиTRANSCRIPT
![Page 1: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/1.jpg)
MyBatis & Hibernate, давайте жить дружно
Докладчик: Алексей Зиновьев
![Page 2: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/2.jpg)
О себе
● аспирант ОмГУ, математик;● занимаюсь теорией графов,
прогнозированием пробок, исследованием транспортных систем;
● большой фанат различных Maps API;● лидер GDG Omsk.
![Page 3: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/3.jpg)
О чем этот доклад
Тот же Ibatis, только в профиль
![Page 4: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/4.jpg)
Тут будем разминаться
● Кто хоть раз использовал ORM
![Page 5: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/5.jpg)
Тут будем разминаться
● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate
![Page 6: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/6.jpg)
Тут будем разминаться
● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate● Кто хоть раз использовал MyBatis
![Page 7: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/7.jpg)
Тут будем разминаться
● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate● Кто хоть раз использовал MyBatis● Кто хоть раз плевал на все и писал свой
QueryEnterpriseSQLBuilder
![Page 8: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/8.jpg)
Цели
● Производительность программиста
● Масштабируемое приложение
● Быстрая работа с БД● Кэширование● Легкоподдерживаемое
приложение
![Page 9: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/9.jpg)
Жил-был один проект
● JDBC - лапша в коде● Одна база readonly● Требуется аналитическая
отчетность● Немного Hibernate для
пары таблиц● Сборка отчетов прямо в
коде
![Page 10: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/10.jpg)
● накопление очереди SQL- запросов и массированное выполнение (впрочем есть flush);
● HQL - собственный язык запросов;● возможность использования аннотаций или map -
файлов.● Reverse Engineering; ● настройка каскадного удаления;● 3 - уровневый кэш;● Criteria API для недругов SQL.
Hibernate. Ликбез
![Page 11: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/11.jpg)
![Page 12: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/12.jpg)
![Page 13: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/13.jpg)
![Page 14: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/14.jpg)
Hibernate - это не волшебная кнопка● Пасует в сложных
запросах● Сложные связи между
таблицами превращаются в неожиданные объекты
● Плох для больших выборок данных
● Не прост в изучении
![Page 15: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/15.jpg)
● конфигурирование в коде или в специальном файле;
● удобные псевдонимы для имен классов;
● корректное разделение и хранение ваших SQL по произвольному числу особенных файлов;
● динамическая безопасная сборка SQL (целых секций) в зависимости от параметров, позволяет сократить число запросов;
● возможность использования аннотаций или map - файлов. Причем аннотации менее популярны.
MyBatis. Ликбез
![Page 16: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/16.jpg)
![Page 17: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/17.jpg)
![Page 18: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/18.jpg)
![Page 19: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/19.jpg)
App case #1
● Новый проект● Часто меняющаяся
схема БД● Неясная иерархия
объектов● Пока нечего
анализировать● Много write, мало read● No JOINs
![Page 20: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/20.jpg)
App case #2
● Есть давно рабочая БД● Сбор аналитики,
построение отчетов● Хранимые процедуры● Много read● Нужны JOINs● Приложение для
работающего бизнеса
![Page 21: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/21.jpg)
Для чего удобен JDBC ● Критичные по
производительности места
● Сложные запросы, получающие простые ответы
● Для обучения новичков● Мсье знает толк...
![Page 22: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/22.jpg)
Для чего удобен Hibernate● Нужно что - то
кэшировать● Множество CRUD -
операций● Есть стабильные, ясные
сущности● Beans для клиент -
сервера● Создание прототипа
![Page 23: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/23.jpg)
Для чего удобен MyBatis● хранения и разработки
сложных SQL - запросов;● для замены JDBC;● для нетривиальных
сущностей, которые собираются из нескольких таблиц;
● для урезанных версий сущностей;
● для динамических семейств SQL.
![Page 24: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/24.jpg)
Добавление отчета● добавляем 1 запрос типа select;● добавляем 1 Result map;● добавляем 1 функцию в DAO,
получающюю список ResultMap объектов по псевдониму.
Эта функция возвращает множество строк отчета. Изменение логики запроса приводит лишь к изменению SQL - запроса.
![Page 25: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/25.jpg)
Процесс внедрения
● Люди испытывают разные чувства к SQL
● Документирование сфер влияния
● Диаграммы dev - процессов (как на проекте добавить новый отчет)
● Чувство прекрасного
![Page 26: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/26.jpg)
Hibernate + MyBatis
● Могут жить на одном проекте
● Строгое разграничение сфер
● Большие отчеты - MyBatis
● Entity - в Hibernate
● Высокая скорость разработки
● ORM на проекте - шаг к MVC
![Page 27: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/27.jpg)
Контакты и полезные ссылки
● Руководство по Hibernate ● Статья в моем блоге по теме доклада● Сайт MyBatis● Моя почта: [email protected]● Мой профиль в Google+
![Page 28: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!](https://reader033.vdocuments.pub/reader033/viewer/2022061201/5478ea93b4af9fbe158b46a0/html5/thumbnails/28.jpg)
Да пребудет с вами DAO!