SlideShare a Scribd company logo
MyBatis & Hibernate,
давайте жить дружно
  Докладчик: Алексей Зиновьев
О себе



● аспирант ОмГУ, математик;
● занимаюсь теорией графов,
  прогнозированием пробок, исследованием
  транспортных систем;
● большой фанат различных Maps API;
● лидер GDG Omsk.
О чем этот доклад


Тот же
Ibatis,
только в
профиль
Тут будем разминаться
● Кто хоть раз использовал ORM
Тут будем разминаться
● Кто хоть раз использовал ORM
● Кто хоть раз использовал Hibernate
Тут будем разминаться
● Кто хоть раз использовал ORM
● Кто хоть раз использовал Hibernate
● Кто хоть раз использовал MyBatis
Тут будем разминаться
●   Кто хоть раз использовал ORM
●   Кто хоть раз использовал Hibernate
●   Кто хоть раз использовал MyBatis
●   Кто хоть раз плевал на все и писал свой
    QueryEnterpriseSQLBuilder
Цели
● Производительность
  программиста
● Масштабируемое
  приложение
● Быстрая работа с БД
● Кэширование
● Легкоподдерживаемое
  приложение
Жил-был один проект
      ● JDBC - лапша в коде
      ● Одна база readonly
      ● Требуется аналитическая
        отчетность
      ● Немного Hibernate для
        пары таблиц
      ● Сборка отчетов прямо в
        коде
Hibernate. Ликбез
● накопление очереди SQL- запросов и массированное
  выполнение (впрочем есть flush);
● HQL - собственный язык запросов;
● возможность использования аннотаций или map -
  файлов.
● Reverse Engineering;
● настройка каскадного удаления;
● 3 - уровневый кэш;
● Criteria API для недругов SQL.
ORM battle. MyBatis vs Hibernate
ORM battle. MyBatis vs Hibernate
ORM battle. MyBatis vs Hibernate
Hibernate - это не волшебная
           кнопка
           ● Пасует в сложных
             запросах
           ● Сложные связи между
             таблицами
             превращаются в
             неожиданные объекты
           ● Плох для больших
             выборок данных
           ● Не прост в изучении
MyBatis. Ликбез

● конфигурирование в коде или в специальном файле;
● удобные псевдонимы для имен классов;
● корректное разделение и хранение ваших SQL по
  произвольному числу особенных файлов;
● динамическая безопасная сборка SQL (целых секций)
  в зависимости от параметров, позволяет сократить
  число запросов;
● возможность использования аннотаций или map -
  файлов. Причем аннотации менее популярны.
ORM battle. MyBatis vs Hibernate
ORM battle. MyBatis vs Hibernate
ORM battle. MyBatis vs Hibernate
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
●   Моя почта: zaleslaw.sin@gmail.com
●   Мой профиль в Google+
Да пребудет с вами DAO!
Ad

Recommended

MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?
Alexey Zinoviev
 
2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
2012-12-01 03 Битва ORM: Hibernate vs MyBatis. Давайте жить дружно!
Омские ИТ-субботники
 
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Ontico
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Mail.ru Group
 
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Mail.ru Group
 
Present diplom
Present diplom
alekseyxxxx
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
Как устроено API в AppMetrica
Как устроено API в AppMetrica
AppTractor
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
Ontico
 
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
Badoo Development
 
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
epamspb
 
Микросервисы для Machine Learning / Дмитрий Ходаков (Avito)
Микросервисы для Machine Learning / Дмитрий Ходаков (Avito)
Ontico
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
Badoo Development
 
Дмитрий Долгов
Дмитрий Долгов
CodeFest
 
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Mad Devs
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Fuenteovejuna
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
02-Hibernate. Hibernate
02-Hibernate. Hibernate
Roman Brovko
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
EYevseyeva
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
Ontico
 
Введение в hibernate
Введение в hibernate
Unguryan Vitaliy
 
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
DevDay
 
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ontico
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
Fwdays
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
SQL________________________________.pptx
SQL________________________________.pptx
DenisMoscvin3
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.
Asya Dudnik
 

More Related Content

What's hot (10)

Как устроено API в AppMetrica
Как устроено API в AppMetrica
AppTractor
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
Ontico
 
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
Badoo Development
 
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
epamspb
 
Микросервисы для Machine Learning / Дмитрий Ходаков (Avito)
Микросервисы для Machine Learning / Дмитрий Ходаков (Avito)
Ontico
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
Badoo Development
 
Дмитрий Долгов
Дмитрий Долгов
CodeFest
 
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Mad Devs
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Fuenteovejuna
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
Как устроено API в AppMetrica
Как устроено API в AppMetrica
AppTractor
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
Ontico
 
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
Badoo Development
 
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
epamspb
 
Микросервисы для Machine Learning / Дмитрий Ходаков (Avito)
Микросервисы для Machine Learning / Дмитрий Ходаков (Avito)
Ontico
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
Badoo Development
 
Дмитрий Долгов
Дмитрий Долгов
CodeFest
 
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Современный graphql на бекенде и фронтенде. Тестирование, секьюрити, новые во...
Mad Devs
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Fuenteovejuna
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 

Similar to ORM battle. MyBatis vs Hibernate (20)

02-Hibernate. Hibernate
02-Hibernate. Hibernate
Roman Brovko
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
EYevseyeva
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
Ontico
 
Введение в hibernate
Введение в hibernate
Unguryan Vitaliy
 
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
DevDay
 
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ontico
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
Fwdays
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
SQL________________________________.pptx
SQL________________________________.pptx
DenisMoscvin3
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.
Asya Dudnik
 
Sphinx 2013
Sphinx 2013
Andrew Aksyonoff
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Ontico
 
Андрей Аксёнов, Sphinx Technologies Inc.
Андрей Аксёнов, Sphinx Technologies Inc.
Ontico
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
Ontico
 
Сравнение систем СУБД
Сравнение систем СУБД
Sergey Ryabenko
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Badoo Development
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosql
Daniel Podolsky
 
02-Hibernate. Hibernate
02-Hibernate. Hibernate
Roman Brovko
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
EYevseyeva
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
Ontico
 
Введение в hibernate
Введение в hibernate
Unguryan Vitaliy
 
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
DevDay
 
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ontico
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
Fwdays
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
SQL________________________________.pptx
SQL________________________________.pptx
DenisMoscvin3
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.
Asya Dudnik
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Ontico
 
Андрей Аксёнов, Sphinx Technologies Inc.
Андрей Аксёнов, Sphinx Technologies Inc.
Ontico
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
Ontico
 
Сравнение систем СУБД
Сравнение систем СУБД
Sergey Ryabenko
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Badoo Development
 
Tk conf daniel-podolsky-sqlvsnosql
Tk conf daniel-podolsky-sqlvsnosql
Daniel Podolsky
 
Ad

More from Alexey Zinoviev (20)

Kafka pours and Spark resolves
Kafka pours and Spark resolves
Alexey Zinoviev
 
Java BigData Full Stack Development (version 2.0)
Java BigData Full Stack Development (version 2.0)
Alexey Zinoviev
 
Joker'16 Spark 2 (API changes; Structured Streaming; Encoders)
Joker'16 Spark 2 (API changes; Structured Streaming; Encoders)
Alexey Zinoviev
 
Hadoop Jungle
Hadoop Jungle
Alexey Zinoviev
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
Alexey Zinoviev
 
Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15
Alexey Zinoviev
 
JavaDayKiev'15 Java in production for Data Mining Research projects
JavaDayKiev'15 Java in production for Data Mining Research projects
Alexey Zinoviev
 
Joker'15 Java straitjackets for MongoDB
Joker'15 Java straitjackets for MongoDB
Alexey Zinoviev
 
JPoint'15 Mom, I so wish Hibernate for my NoSQL database...
JPoint'15 Mom, I so wish Hibernate for my NoSQL database...
Alexey Zinoviev
 
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
Alexey Zinoviev
 
Thorny path to the Large-Scale Graph Processing (Highload++, 2014)
Thorny path to the Large-Scale Graph Processing (Highload++, 2014)
Alexey Zinoviev
 
Joker'14 Java as a fundamental working tool of the Data Scientist
Joker'14 Java as a fundamental working tool of the Data Scientist
Alexey Zinoviev
 
First steps in Data Mining Kindergarten
First steps in Data Mining Kindergarten
Alexey Zinoviev
 
EST: Smart rate (Effective recommendation system for Taxi drivers based on th...
EST: Smart rate (Effective recommendation system for Taxi drivers based on th...
Alexey Zinoviev
 
Android Geo Apps in Soviet Russia: Latitude and longitude find you
Android Geo Apps in Soviet Russia: Latitude and longitude find you
Alexey Zinoviev
 
Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8
Alexey Zinoviev
 
Big data algorithms and data structures for large scale graphs
Big data algorithms and data structures for large scale graphs
Alexey Zinoviev
 
"Говнокод-шоу"
"Говнокод-шоу"
Alexey Zinoviev
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Alexey Zinoviev
 
Алгоритмы и структуры данных BigData для графов большой размерности
Алгоритмы и структуры данных BigData для графов большой размерности
Alexey Zinoviev
 
Kafka pours and Spark resolves
Kafka pours and Spark resolves
Alexey Zinoviev
 
Java BigData Full Stack Development (version 2.0)
Java BigData Full Stack Development (version 2.0)
Alexey Zinoviev
 
Joker'16 Spark 2 (API changes; Structured Streaming; Encoders)
Joker'16 Spark 2 (API changes; Structured Streaming; Encoders)
Alexey Zinoviev
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
Alexey Zinoviev
 
Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15
Alexey Zinoviev
 
JavaDayKiev'15 Java in production for Data Mining Research projects
JavaDayKiev'15 Java in production for Data Mining Research projects
Alexey Zinoviev
 
Joker'15 Java straitjackets for MongoDB
Joker'15 Java straitjackets for MongoDB
Alexey Zinoviev
 
JPoint'15 Mom, I so wish Hibernate for my NoSQL database...
JPoint'15 Mom, I so wish Hibernate for my NoSQL database...
Alexey Zinoviev
 
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
Alexey Zinoviev
 
Thorny path to the Large-Scale Graph Processing (Highload++, 2014)
Thorny path to the Large-Scale Graph Processing (Highload++, 2014)
Alexey Zinoviev
 
Joker'14 Java as a fundamental working tool of the Data Scientist
Joker'14 Java as a fundamental working tool of the Data Scientist
Alexey Zinoviev
 
First steps in Data Mining Kindergarten
First steps in Data Mining Kindergarten
Alexey Zinoviev
 
EST: Smart rate (Effective recommendation system for Taxi drivers based on th...
EST: Smart rate (Effective recommendation system for Taxi drivers based on th...
Alexey Zinoviev
 
Android Geo Apps in Soviet Russia: Latitude and longitude find you
Android Geo Apps in Soviet Russia: Latitude and longitude find you
Alexey Zinoviev
 
Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8
Alexey Zinoviev
 
Big data algorithms and data structures for large scale graphs
Big data algorithms and data structures for large scale graphs
Alexey Zinoviev
 
"Говнокод-шоу"
"Говнокод-шоу"
Alexey Zinoviev
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Alexey Zinoviev
 
Алгоритмы и структуры данных BigData для графов большой размерности
Алгоритмы и структуры данных BigData для графов большой размерности
Alexey Zinoviev
 
Ad

ORM battle. MyBatis vs Hibernate

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