Каковы преимущества myBatis over Hibernate? [закрыто]

Я провел некоторое исследование самостоятельно и понял основную концепцию. Но некоторые идеи могут быть получены только через реальный опыт.

Каковы преимущества myBatis, которые сделают его полезным для изучения новой структуры?
В каком случае вы могли бы избежать его использования?

31 голос | спросил Kshitiz Sharma 25 J000000Wednesday12 2012, 08:40:13

5 ответов


35

Подумайте, чего вы пытаетесь достичь. Как правило, Сегментация ответа на запрос команд модель хорошо работает для сложных доменов.

Причина в том, что вы пытаетесь сделать одну из двух вещей:

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

Hibernate отлично работает для случая 1, позволяя вам просто сделать POJO и сохранить /обновить его. Он также делает это быстро, если ваш домен довольно большой.

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

Эти два случая - разница между Командами , где вы хотите изменить данные домена и Ответы , где вы просто хотите получить некоторые данные.

Итак, рассмотрите эти два случая и то, что делает ваше приложение. Если у вас есть простой домен и просто выберите информацию, используйте myBatis. Если у вас сложный домен и сохраняемые объекты, используйте Hibernate. Если вы сделаете обоим, рассмотрите гибридный подход. Это то, что мы используем в нашем проекте, в котором тысячи организаций удерживают его под контролем. ;)

ответил Joseph Lust 26 MarpmTue, 26 Mar 2013 19:10:12 +04002013-03-26T19:10:12+04:0007 2013, 19:10:12
19

MyBatis ориентирован на SQL. Это позволяет вам вызывать SQL-инструкции и сопоставлять результаты (таблицы) с деревьями объектов.

Основное преимущество заключается в том, что это не ORM. Он не сопоставляет таблицы объекту, поэтому не терпит несоответствие импеданса orm. Хорошо подходит для сложных или устаревших баз данных или для использования функций db, таких как хранимые процедуры, представления и т. Д.

Это довольно просто и легко учиться, поэтому подходит и для низкоквалифицированных команд, потому что нет необходимости иметь спящего гуру среди них.

Посмотрите на jpetstore 6 http://mybatis.org/spring/sample.html

ответил Diego 25 J000000Wednesday12 2012, 21:00:24
5

Поскольку вопрос относится к мой комментарий , вот что я имел в виду, написав его.

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

  

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

     

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

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

В тот момент я ничего не знал о MyBatis, но имел достаточный опыт работы с JDBC, чтобы убедиться, что он выполнит эту работу. Несмотря на это, я решительно поддерживал идею попробовать MyBatis, главная причина в том, что в моем прошлом опыте количество кода шаблона, который нам пришлось бы писать с JDBC, было бы просто сложным.

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

В любом случае, мы попробовали MyBatis, и он работал как рекламируемый. Вот почему я написал комментарий, о котором вы просите.

Если вы ожидаете, что я дам подробный обзор технологии или как-нибудь похвалите его превосходство - извините, я не могу этого сделать. Если бы я мог, я бы уже написал это в отдельном ответе на ваш оригинальный вопрос, вместо того, чтобы давать короткий комментарий. Я упомянул, что тогда я ничего не знал о MyBatis - ну, я все еще мало знаю, что это жаль. Переход от Hibernate был выполнен другими членами команды, и это не повлияло на код, над которым я работал. Я только напомнил о ключевых сделках (на основании которых я сделал свой комментарий), а именно: 1) MyBatis разрешил проблемы, которые у нас были с Hibernate, 2) он не ввел собственные проблемы и 3) он позволил нам избежать написания шаблона кода I ожидал в случае, если мы переключимся на JDBC. Вот и все.

ответил gnat 26 J000000Thursday12 2012, 01:07:59
3

Hibernate хорошо знает слишком много волшебства , неожиданное поведение и большую кривую обучения. Существуют и другие рамки, которые больше ориентированы на простоту и позволят вам контролировать ситуацию.

myBatis - один из них, мой проект MentaBean - еще один. Я написал a в блоге об этом, что может помочь.

ответил Sergio Oliveira Jr. 15 42012vEurope/Moscow11bEurope/MoscowThu, 15 Nov 2012 09:48:02 +0400 2012, 09:48:02
-1

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

ответил marland 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 00:32:35 +0400000000amFri, 14 Feb 2014 00:32:35 +040014 2014, 00:32:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132