я просто не люблю джпа

Hibernate ORM

Знакомство с военным постом, никакого питания, игнор.

Больше отличных статей.

«Микросервисы — это не все, а лишь подмножество определенного домена».

«Подбиблиотека и подтаблица»? Отбор и процесс должны быть осторожными, иначе все выйдет из-под контроля».

С таким количеством компонентов мониторинга всегда найдется подходящий для вас

«С Нетти, что мы разрабатываем? 》

«Вероятно, это наиболее подходящая спецификация Redis».

«Портрет программиста, десять лет взлетов и падений»

Самая полезная серия:

«Наиболее часто используемый набор навыков «vim» в производственной среде Linux.

«Наиболее часто используемый набор навыков «Sed» в производственной среде Linux.

«Наиболее часто используемый набор навыков «AWK» в производственной среде Linux.


Зная вопрос «Разработка SpringBoot с использованием Mybatis или Spring Data JPA??», я легко на него ответил, и дискуссия была бурной. Я действительно не понимаю, почему spring data jpa выбрала спящий режим в качестве своей реализации, это кумовство «Гэвина Кинга»? Есть причина для слоя DAO, от jdbc до hibernate, от toplink до jdo, и теперь победил MyBatis.

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

Рискуя быть отруганным, я разобрался. Это не значит, что php — это хорошо, а java — это хорошо.

Совет: при ограниченных силах вы должны сначала изучить MyBatis. Набор jpa прост на первый взгляд.

Вот оригинальный ответ

Если вы прошли через итерации продукта в нескольких компаниях, особенно сложные проекты, вы обнаружите, чтоSpring Data JPAКак это неприятно. если быть честным,MybatisИногда функций слишком много, а некоторые просто лишние.

jpaХотя норма иhibernateэтоORMВыглядит похоже (не говоря уже об использовании некоторых специальных сцен).

Spring Data JPA — это игрушка, подходящая только для некоторых простых отношений отображения.. Я также должен упомянуть о рекламируемомquerydsl, я чувствую себя немного претенциозно. Я действительно не хочу учиться чему-то неблагодарному для простого слоя DAO.

List<Person> persons = queryFactory.selectFrom(person)
  .where(person.children.size().eq(
    JPAExpressions.select(parent.children.size().max())
  .from(parent)))
  .fetch();

Посмотрите на приведенный выше оператор запроса, он не так хорош, как обычныйSQLВыражено ясно. Если дело в срочном расследовании, черт...

Хотя jpa имеет много преимуществ, например, она не имеет ничего общего с базовым SQL. Но я чувствую, что Spring Data JPA имеет следующие недостатки:

1. Защитил элегантность SQL и изобрел собственный метод запросов. Этот метод запроса не может охватывать все сценарии SQL.

2. Увеличивает сложность кода и требует больше времени для понимания DAO

3. Операции DAO стали очень разрозненными, разбросанными по множеству java-файлов или по аннотациям (хотя XML тоже поддерживается). Если выполняются некоторые сканирования или оптимизации, стоимость реконструкции велика.

4, не поддерживает сложный SQL, процесс DBA не легко сократить

Однако у Mybatis есть некоторые проблемы, но вы больше похожи на написание точного SQL. Он более легкий, чем Spring Data JPA.

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

Mybatis полностью способен работать со сложным SQL промышленного уровня и даже с хранимыми процедурами (не рекомендуется). Лично я думаю, что Mybatis по-прежнему сложен, и он также добавляет некоторые функции языка программирования, похожие на if else.

Если в вашей компании есть администратор базы данных, вам нельзя возиться с SQL. Mybatis позволяет лучше врезаться в рабочий процесс компании.

Вот и думаю: игрушечные проекты или быстрая разработка, используйте Spring Boot JPA. Вместо этого Mybatis является первым выбором.

некоторые полезные комментарии

Вы сказали, что if else относится к сплайсингу SQL. Это одна из важных функций MyBatis. Ее совсем не сложно освоить, верно?


В последнее время я также исследую уровень сохраняемости. Вы можете в полной мере использовать эту игрушку jpa. Сочетание этих двух - хороший выбор. Jpa выполняет основные операции с одной таблицей, а mybatis выполняет сложные запросы. Эффективность разработки высока, стоимость обслуживания sql снижается, и есть место для оптимизации., конечно, это требует некоторых расширений для spring-data-jpa


Запрос напрямую sql, другой удобный orm


mybatis - это в основном нативный sql, что снижает порог обучения и сопровождения для других разработчиков, которые не изучили jpa, и действительно, jpa написала горшок, и вы на самом деле довольно головная боль...

После интеграции mybatis-plus базовый творог не нужно запутывать.Многие операции над объектом, а затем сохранить его напрямую. Для сложных сценариев и таблиц соединения просто используйте собственный SQL напрямую.Что касается проблем с производительностью, вы можете использовать sqlAdvice для его оптимизации.


шаблон jdbc + генератор кода, проще и эффективнее


Дело в jpa, написании простой операции с базой данных, например операции с одной таблицей, очень полезно. Если это более одной таблицы, то забудьте об этом.


spring boot рекомендует jpa, знаете почему?


native=true Если вы хотите использовать нативный запрос, никто вас не остановит.


Вы, кажется, не очень хорошо знаете hibernate и jpa...


Я не знаю, знаете ли вы взаимосвязь между jpa, hibernate, spring data jpa и querydsl.


Однажды вы узнаете разницу между базой данных и программой.


Еще одним преимуществом jpa является то, что это красивый горшок.

END

Ну-ка, ребята помоложе и понаглее, идите, брызгайте на меня.