2012-12-01 03 Битва orm: hibernate vs mybatis. Давайте жить дружно!
DESCRIPTION
Рассказ об опыте использования двух разных ORM на одном Java-проекте, освещение их преимуществ, недостатков и границ применимостиTRANSCRIPT
MyBatis & Hibernate, давайте жить дружно
Докладчик: Алексей Зиновьев
О себе
● аспирант ОмГУ, математик;● занимаюсь теорией графов,
прогнозированием пробок, исследованием транспортных систем;
● большой фанат различных Maps API;● лидер GDG Omsk.
О чем этот доклад
Тот же Ibatis, только в профиль
Тут будем разминаться
● Кто хоть раз использовал ORM
Тут будем разминаться
● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate
Тут будем разминаться
● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate● Кто хоть раз использовал MyBatis
Тут будем разминаться
● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate● Кто хоть раз использовал MyBatis● Кто хоть раз плевал на все и писал свой
QueryEnterpriseSQLBuilder
Цели
● Производительность программиста
● Масштабируемое приложение
● Быстрая работа с БД● Кэширование● Легкоподдерживаемое
приложение
Жил-был один проект
● JDBC - лапша в коде● Одна база readonly● Требуется аналитическая
отчетность● Немного Hibernate для
пары таблиц● Сборка отчетов прямо в
коде
● накопление очереди SQL- запросов и массированное выполнение (впрочем есть flush);
● HQL - собственный язык запросов;● возможность использования аннотаций или map -
файлов.● Reverse Engineering; ● настройка каскадного удаления;● 3 - уровневый кэш;● Criteria API для недругов SQL.
Hibernate. Ликбез
Hibernate - это не волшебная кнопка● Пасует в сложных
запросах● Сложные связи между
таблицами превращаются в неожиданные объекты
● Плох для больших выборок данных
● Не прост в изучении
● конфигурирование в коде или в специальном файле;
● удобные псевдонимы для имен классов;
● корректное разделение и хранение ваших SQL по произвольному числу особенных файлов;
● динамическая безопасная сборка SQL (целых секций) в зависимости от параметров, позволяет сократить число запросов;
● возможность использования аннотаций или map - файлов. Причем аннотации менее популярны.
MyBatis. Ликбез
App case #1
● Новый проект● Часто меняющаяся
схема БД● Неясная иерархия
объектов● Пока нечего
анализировать● Много write, мало read● No JOINs
App case #2
● Есть давно рабочая БД● Сбор аналитики,
построение отчетов● Хранимые процедуры● Много read● Нужны JOINs● Приложение для
работающего бизнеса
Для чего удобен JDBC ● Критичные по
производительности места
● Сложные запросы, получающие простые ответы
● Для обучения новичков● Мсье знает толк...
Для чего удобен Hibernate● Нужно что - то
кэшировать● Множество CRUD -
операций● Есть стабильные, ясные
сущности● Beans для клиент -
сервера● Создание прототипа
Для чего удобен MyBatis● хранения и разработки
сложных SQL - запросов;● для замены JDBC;● для нетривиальных
сущностей, которые собираются из нескольких таблиц;
● для урезанных версий сущностей;
● для динамических семейств SQL.
Добавление отчета● добавляем 1 запрос типа select;● добавляем 1 Result map;● добавляем 1 функцию в DAO,
получающюю список ResultMap объектов по псевдониму.
Эта функция возвращает множество строк отчета. Изменение логики запроса приводит лишь к изменению SQL - запроса.
Процесс внедрения
● Люди испытывают разные чувства к SQL
● Документирование сфер влияния
● Диаграммы dev - процессов (как на проекте добавить новый отчет)
● Чувство прекрасного
Hibernate + MyBatis
● Могут жить на одном проекте
● Строгое разграничение сфер
● Большие отчеты - MyBatis
● Entity - в Hibernate
● Высокая скорость разработки
● ORM на проекте - шаг к MVC
Контакты и полезные ссылки
● Руководство по Hibernate ● Статья в моем блоге по теме доклада● Сайт MyBatis● Моя почта: [email protected]● Мой профиль в Google+
Да пребудет с вами DAO!