Hibernate - це ORM, тобто (на самому базовому рівні) він відображає екземпляри об'єктів Java у фактичні рядки таблиці бази даних. Як правило, для pojo, отриманих через Hibernate: будь-які маніпуляції та модифікації цих pojo будуть відображатися в базі даних. Hibernate генерує та виконує відповідний SQL у відповідний час.
Mybatis (на самому базовому рівні) - це просто інструмент для поєднання та виконання SQL, який зберігається у файлах xml. Він не відображає екземпляри об'єктів Java у рядки таблиці бази даних, швидше він відображає методи Java у оператори SQL, а отже, це не ORM. Це також може повернути подзо, звичайно, але вони не прив'язані до будь-якого контексту стійкості.
Обидва інструменти роблять набагато більше, ніж описано вище, але один - це ORM, а інший - ні.
Я вважаю, що критерії, які дозволять вам вибрати, який із них використовувати, критично залежать від моделі бази даних, з якою вам доведеться працювати.
Наприклад, уявіть велику розгалужену схему, яка представляє якусь страхову модель. Розробники повинні отримувати дані та взаємодіяти з цими даними таким чином, що відповідає кожному бізнесу.
Розробник пішов, і ніколи не очікується, що він матиме необхідні бізнес-знання, щоб писати весь
sql від руки (чого потребує Mybatis). Hibernate підійде для такого сценарію.
Бізнес-аналітики визначають модель даних, сутності, взаємозв'язки та взаємодії, як і їх досвід. Потім розробники Java використовують Hibernate для "прогулянки по моделі". Розробники бізнесу можуть швидко стати дуже продуктивними без необхідності писати складні помилки, схильні до помилок, щоб працювати на дуже складній схемі.
На мою думку, як Hibernate, так і Mybatis регулярно використовуються в одному проекті.
Де використовується Hibernate
- Загальна функціональність CRUD
- Реляційна модель "обхід" "об'єкта домену"
- Управління сесіями
і де використовується Mybatis
- спеціальні запити
- розпочати (і взаємодіяти) із збереженими процедурами
- підтримувати дуже конкретні або складні запити
- підтримка складних пошукових запитів, де критерії пошуку динамічні, та підкачування результатів