28
MyBatis & Hibernate, давайте жить дружно Докладчик: Алексей Зиновьев

2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

  • Upload
    -

  • View
    3.330

  • Download
    7

Embed Size (px)

DESCRIPTION

Рассказ об опыте использования двух разных ORM на одном Java-проекте, освещение их преимуществ, недостатков и границ применимости

Citation preview

Page 1: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

MyBatis & Hibernate, давайте жить дружно

Докладчик: Алексей Зиновьев

Page 2: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

О себе

● аспирант ОмГУ, математик;● занимаюсь теорией графов,

прогнозированием пробок, исследованием транспортных систем;

● большой фанат различных Maps API;● лидер GDG Omsk.

Page 3: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

О чем этот доклад

Тот же Ibatis, только в профиль

Page 4: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Тут будем разминаться

● Кто хоть раз использовал ORM

Page 5: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Тут будем разминаться

● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate

Page 6: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Тут будем разминаться

● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate● Кто хоть раз использовал MyBatis

Page 7: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Тут будем разминаться

● Кто хоть раз использовал ORM● Кто хоть раз использовал Hibernate● Кто хоть раз использовал MyBatis● Кто хоть раз плевал на все и писал свой

QueryEnterpriseSQLBuilder

Page 8: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Цели

● Производительность программиста

● Масштабируемое приложение

● Быстрая работа с БД● Кэширование● Легкоподдерживаемое

приложение

Page 9: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Жил-был один проект

● JDBC - лапша в коде● Одна база readonly● Требуется аналитическая

отчетность● Немного Hibernate для

пары таблиц● Сборка отчетов прямо в

коде

Page 10: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

● накопление очереди SQL- запросов и массированное выполнение (впрочем есть flush);

● HQL - собственный язык запросов;● возможность использования аннотаций или map -

файлов.● Reverse Engineering; ● настройка каскадного удаления;● 3 - уровневый кэш;● Criteria API для недругов SQL.

Hibernate. Ликбез

Page 11: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Page 12: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Page 13: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Page 14: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Hibernate - это не волшебная кнопка● Пасует в сложных

запросах● Сложные связи между

таблицами превращаются в неожиданные объекты

● Плох для больших выборок данных

● Не прост в изучении

Page 15: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

● конфигурирование в коде или в специальном файле;

● удобные псевдонимы для имен классов;

● корректное разделение и хранение ваших SQL по произвольному числу особенных файлов;

● динамическая безопасная сборка SQL (целых секций) в зависимости от параметров, позволяет сократить число запросов;

● возможность использования аннотаций или map - файлов. Причем аннотации менее популярны.

MyBatis. Ликбез

Page 16: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Page 17: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Page 18: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Page 19: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

App case #1

● Новый проект● Часто меняющаяся

схема БД● Неясная иерархия

объектов● Пока нечего

анализировать● Много write, мало read● No JOINs

Page 20: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

App case #2

● Есть давно рабочая БД● Сбор аналитики,

построение отчетов● Хранимые процедуры● Много read● Нужны JOINs● Приложение для

работающего бизнеса

Page 21: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Для чего удобен JDBC ● Критичные по

производительности места

● Сложные запросы, получающие простые ответы

● Для обучения новичков● Мсье знает толк...

Page 22: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Для чего удобен Hibernate● Нужно что - то

кэшировать● Множество CRUD -

операций● Есть стабильные, ясные

сущности● Beans для клиент -

сервера● Создание прототипа

Page 23: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Для чего удобен MyBatis● хранения и разработки

сложных SQL - запросов;● для замены JDBC;● для нетривиальных

сущностей, которые собираются из нескольких таблиц;

● для урезанных версий сущностей;

● для динамических семейств SQL.

Page 24: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Добавление отчета● добавляем 1 запрос типа select;● добавляем 1 Result map;● добавляем 1 функцию в DAO,

получающюю список ResultMap объектов по псевдониму.

Эта функция возвращает множество строк отчета. Изменение логики запроса приводит лишь к изменению SQL - запроса.

Page 25: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Процесс внедрения

● Люди испытывают разные чувства к SQL

● Документирование сфер влияния

● Диаграммы dev - процессов (как на проекте добавить новый отчет)

● Чувство прекрасного

Page 26: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Hibernate + MyBatis

● Могут жить на одном проекте

● Строгое разграничение сфер

● Большие отчеты - MyBatis

● Entity - в Hibernate

● Высокая скорость разработки

● ORM на проекте - шаг к MVC

Page 28: 2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!

Да пребудет с вами DAO!