Які переваги myBatis перед сплячим режимом? [зачинено]


33

Я провів деякі дослідження самостійно і зрозумів основну концепцію. Але деякі розуміння можна отримати лише завдяки фактичному досвіду.

Які переваги myBatis полягають у тому, щоб варто було вивчити нові рамки?
У якому випадку ви б уникнули його використання?


3
Я тестував і те, і в кінцевому підсумку використовував Cayenne.
deadalnix

Відповіді:


38

Поміркуйте, чого ви намагаєтесь досягти. Зазвичай модель сегментації відповідей на запити команд добре працює для складних доменів.

Причина полягає в тому, що ти зазвичай намагаєшся зробити одне з двох:

  1. Створення / оновлення / видалення деяких складних об'єктів домену
  2. Запустити аналітичні запити для отримання (тобто запити підсумовування / агрегації)

Hibernate добре працює у випадку 1, що дозволяє вам просто зробити POJO та зберегти / оновити його. Це також робить це швидко, якщо тільки ваш домен досить великий.

myBatis чудово підходить для отримання запитів (випадок 2), де ви просто хочете відповісти. Hibernate спробує завантажити весь графік об'єкта, і вам потрібно буде почати налаштування запитів з трюками LazyLoading, щоб він не працював на великому домені. Це важливо при запуску складних аналітичних запитів, які навіть не повертають об'єктні об'єкти. Hibernate пропонує лише трансформатори SqlQuery і bean Transformers в цьому випадку з величезними типами за замовчуванням, такими як BigDecimal, в той час як myBatis може з легкістю зіставити карту на просту особу POJO.

Ці два випадки - це різниця між командами, де ви хочете змінити дані домену, і відповідями, де ви просто хочете отримати деякі дані.

Отже, розгляньте ці два випадки та те, що робить ваша заява. Якщо у вас простий домен і ви просто отримуєте інформацію, використовуйте myBatis. Якщо у вас складний домен і зберігаються особи, використовуйте Hibernate. Якщо ви робите обидва, врахуйте гібридний підхід. Це те, що ми використовуємо в нашому проекті, який містить тисячі організацій, щоб тримати його під контролем. ;)


2
Зимовий режим добре працює і з вашим випадком 2. Для простого прикладу дивіться: mkyong.com/hibernate/hibernate-native-sql-queries-exples
Майк Партридж

3
"Hibernate намагається завантажити весь графік об'єкта", це звучить як помилка конфігурації. "Потрібно починати налаштування запитів з хитрощів LazyLoading" звучить так, що ви десь встановили fetch = eager. JPA має JPQL, який практично є SQL, але добре інтегрований із режимом сплячки / JPA. Я думаю, що це дуже добре. Люди звичайно працюють у виробництві протягом року або більше, перш ніж ORM сконфігурований на 100% правильно. Я не зводячи до мінімуму, коли кажу, що це помилка конфігурації - конфігурація з цими інструментами може бути дуже трудомісткою і складною!
GlenPeterson

3
@GlenPeterson Я не кажу, що сплячку не можна приручити, але для більшості людей складні об'єкти домену завантажуються повільно, якщо не буде проведено оптимізацій, як ви цитували. Складні аналітичні запити для більшості користувачів простіші з myBatis, хоча те саме можна досягти і з ORM. Питання для багатьох - чи потрібна їм незалежність постачальника ORM для свого продукту.
Йосип Похоть

10
У сплячому режимі робиться вигляд, що під ним немає баз даних, і ви просто ставитеся до вашої моделі даних так, ніби вона створена за допомогою колекцій Java. Що дуже часто не так. На рівні даних представлення даних може бути дуже різним, і спроба автоматично відображати їх у колекції Java не обов'язково має сенс. Ось чому сплячий режим є прекрасним прикладом "непрохідної абстракції". MyBatis набагато простіший, легкий для розуміння, магії немає і .. так, є SQL, який я вважаю гарною справою, оскільки немає нічого поганого у використанні SQL для баз даних на базі SQL.
Marcin

2
@Marcin чудовий момент. Я бачив занадто багато проблем із емуляцією колекцій у сплячому режимі. Наприклад, якийсь код викликає myBag.size (), і Hibernate намагається завантажити 750 К об'єктів у пам'ять перед їх підрахунком. Якщо вам потрібен лише SQL, використовуйте SQL.
Йосип Похоть

19

MyBatis орієнтований на SQL. Це означає, що ви викликаєте оператори SQL та результати відображення (таблиці) об'єктів дерев.

Основна вигода полягає в тому, що це не ОРМ. Він не відображає таблиці для об'єкта, тому не зазнає невідповідності опору орму. Добре підходить для складних або застарілих баз даних або для використання функцій db, таких як збережені процедури, перегляди тощо.

Навчитися досить просто і легко, тому добре підходить для низькокваліфікованих команд, тому що серед них немає необхідності мати сплячого гуру.

Погляньте на jpetstore 6 http://mybatis.org/spring/sample.html


2
Тим "низькокваліфікованим командам" ще потрібно знати SQL.
перп

Хороша лаконічна відповідь, дві основні відмінності - це: dbцентрична + неглибока крива навчання. Але я повністю не погоджуюсь з "Підходить для складних або застарілих баз даних". Перевага бути концентрацією на db стає більш очевидною, коли ви більше контролюєте дизайн db.
DPM

5

Оскільки питання відноситься до мого коментарю , ось що я мав у вигляді писати.

Перш за все, це походить із контексту вашого оригінального запитання. За інших обставин я міг би дати іншу пораду. Суть, яка змусила мене запропонувати MyBatis, полягає в наступному:

... ми зіткнулися з деякими проблемами продуктивності.

Ми вирішили кинути сплячку на користь простого Jdbc, щоб отримати продуктивність бази даних ...

В одному з минулих проектів наша команда розглядала можливість переходу зі сплячого періоду з таких причин, як ви описали. Подібно до вас, ми збиралися перейти на JDBC, але колеги з іншого проекту рекомендували нам MyBatis. Команда вирішила спробувати, зберігаючи JDBC як резервний варіант у випадку, якщо все піде не так.

На той момент я нічого не знав про MyBatis, але мав достатньо досвіду роботи з JDBC, щоб бути впевненим, що він зробить цю роботу. Незважаючи на це, я наполегливо підтримував ідею спробувати MyBatis, головна причина - це те, що, на моєму минулому досвіді, кількість кодового коду, який ми повинні були б написати з JDBC, була б просто жахливою.

  • Чесно кажучи, мені подобається JDBC за те, що він простий для розуміння, надійний і за гарне відчуття контролю над взаємодією з базою даних, але ціна, яку платить за неї, дійсно висока. У мене пальці починають боліти щоразу, коли я згадую, скільки мені довелося набрати котлоавтомобіля JDBC.

У будь-якому випадку ми спробували MyBatis, і він працював так, як рекламується. Тому я написав коментар, про який ви питаєте.

У випадку, якщо ви очікуєте, що я детально ознайомлюся з технологією або якось похваліть її перевагу - вибачте, що я не можу цього зробити. Якби міг - я б уже написав це окремою відповіддю на ваше первісне запитання, замість того, щоб давати короткий коментар. Я згадав, що тоді нічого не знав про MyBatis - ну, я все ще знаю про це дуже мало знань. Перехід із режиму глибокого сну був здійснений іншими членами команди, і це не вплинуло на код, над яким я працюю. Я лише нагадав про ключові вивезення (на основі яких я зробив свій коментар), а саме: 1) MyBatis вирішив проблеми, які ми мали зі сплячим режимом, 2) він не вніс власні проблеми і 3) це дозволило нам уникати написання кодового коду I очікував у випадку, якщо ми перейдемо на JDBC. Це все.


3

У сплячку добре знають занадто багато магії , несподіваної поведінки та великої кривої навчання. Існують і інші рамки, які більш орієнтовані на простоту і дозволяють вам контролювати.

myBatis - один із них, мій проект MentaBean - ще один. Я написав про це блог, який може допомогти.


6
Привіт Серхіо і ласкаво просимо. Наша громада, як правило, нахмуриться від відвертої самореклами, і ми вимагаємо від вас чітко розкрити свою приналежність у своїх відповідях. Я відредагував вашу відповідь, щоб вказати, що MentaBean - це проект, з яким ви займаєтесь, і що ви написали повідомлення в блозі, на яке ви вказуєте, якщо вам не подобається фразування, сміливо міняйте його, але будь ласка, підтримуйте якісь розкриття інформації, які ви пов’язані з MentaBean. Прочитайте відповідний розділ у нашому FAQ, щоб отримати докладнішу інформацію.
Янніс

Привіт Янісе. Я зроблю це. Дякую за голову вгору :)
Серхіо Олівейра-молодший

-1

Я використовував Hibernate для проекту завантаження та перетворення даних 5 років тому, використовуючи Hibernate 3, і я вважав, що це чудово. Я роблю невеликий додаток для електронної комерції, і я спробував використовувати Hibernate 4, і я був дуже розчарований. Вони вилучили інструменти та щільно інтегруються в IDE. Я спробував MyBatis, і я все працюю за одну ніч, і мені дуже подобається, як легко інтегруватися в програму. Я думаю, що сплячий режим став занадто роздутим, і я би використовував EJB 3 над сплячим режимом у цей момент.


1
Як порівнюються EJB 3 та сплячий режим ???
Жозе-
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.