Обе возможности: Hibernate и Mybatis сосуществуют
Уже давно в Интернете идет много споров о Hibernate vs Mybatis, и ни один лагерь не может убедить другого, и у каждого есть веская причина. Сегодня я поделюсь темой: использование ORM-фреймворков Hibernate и Mybatis в одном проекте.
Как разработчику, нет необходимости тратить слишком много времени на доказательство того, что технология бесполезна.Когда вы начинаете обвинять определенный фреймворк в мусоре, а другой фреймворк лучший, это неявно показывает, что у вас нет глубоких исследований по этому вопросу. определенные рамки.Обвинения в невежестве ничего не делают для улучшения технологии. В самом фреймворке нет правильного или неправильного, есть только варианты, подходящие и более подходящие для проекта. Каждый фреймворк имеет свой набор возможностей.В качестве примера возьмем два фреймворка ORM Hibernate и Mybatis.Hibernate инкапсулирует множество полезных API для разработчиков, уменьшая сложность и сложность работы с базой данных и уменьшая сложность кода шаблона.Однако Hibernate оставляет гораздо меньше места для работы разработчиков, чем Mybatis; среда Mybatis очень гибкая в использовании, и разработчики могут настраивать операторы запросов, но это увеличивает количество кодов шаблонов, что не кажется таким удобным, как Hibernate. Два фреймворка пошли на компромиссы и компромиссы по двум показателям удобства и гибкости, что нельзя назвать ошибкой фреймворков. Фреймворк должен иметь свою область фокуса и видение дизайна, и невозможно охватить все.
Использование любой технической структуры должно соответствовать реальным потребностям бизнеса и его собственным техническим возможностям. Если у вас нет глубокого понимания технологии или текущие бизнес-требования не соответствуют инфраструктуре, не критикуйте ее качество вслепую. Сегодня я уже не сравниваю плюсы и минусы Hibernate и Mybatis, а даю более умеренное решение, интегрируя два ORM-фреймворка в один проект одновременно.
1. Подготовьте среду разработки
Если вы хотите успешно запустить исходный код из этой статьи, вам необходимо выполнить следующие условия:
- 1. JDK: JDK 1.8.x и выше
- 2. Maven: Maven 3.x или новее
- 3. Git: инструмент контроля версий, выберите тот, который вам нравится
- 4. IDE: выберите предпочитаемый редактор кода, например STS, IntelliJ IDEA. Автор использует IntelliJ IDEA
- 5. Базы данных: выберите систему баз данных, которой вы умеете пользоваться. В статье автор использует систему баз данных версии MySQL 5.1.x.
Если вы хотите получить исходный код этого общего контента для отладки, вы можете найти ссылку на репозиторий исходного кода в конце статьи.
2. Создание проекта
2-1. Введение зависимостей
Чтобы быстро построить проект, автор использует Spring Boot для сборки проекта и использует пакеты зависимостей, которые объединяют две платформы ORM Spring Data JPA и Mybatis. Здесь следует отметить, что Hibernate является реализацией стандарта JPA, а Spring Data JPA — абстракцией доступа к данным JPA.Благодаря Spring Data JPA можно легко использовать инфраструктуру Hibernate.
Вы можете инициализировать проект с помощью Spring Initializer или создать проект с помощью функции Spring Initializer, которая поставляется с IDEA.После сборки проекта конфигурация в файле pom.xml выглядит следующим образом (включая, помимо прочего, указанные зависимости в этой статье):
2-2.Определить класс сущности-User.java
Чтобы продемонстрировать использование Hibernate и Mybatis для одновременной работы с базой данных, вам необходимо предоставить класс сущности User.java, код выглядит следующим образом:
проиллюстрировать:
В проекте этой демонстрации используется плагин Lombok, позволяющий разработчикам сократить написание кода шаблона и повысить скорость разработки. Аннотация @Data может автоматически генерировать методы getter, setter и toString для свойств класса. @NoArgsConstructor автоматически создаст конструктор без аргументов для класса, а @AllArgsConstructor создаст конструктор со всеми атрибутами.
2-3. Определите интерфейс сохраняемости данных
В этом курсе Spring Data JPA будет использоваться для выполнения операций записи, таких как добавление, изменение и удаление; использование Mybatis для выполнения операций чтения, таких как запросы в соответствии с идентификатором пользователя, запросы ко всем пользователям и т. д. Интерфейсы сохраняемости Spring Data JPA и MyBatis находятся в пакете com.ramostear.hm.orm. Интерфейс сохраняемости Spring Data JPA относительно прост, и класс JpaRepository может быть унаследован между ними. Код выглядит следующим образом:
Примечание. Поскольку JPA отвечает только за операции записи, достаточно напрямую наследовать и использовать API, предоставляемый JpaRepository, без дополнительного определения других методов интерфейса.
Ниже приведен интерфейс сопоставления Mybatis, который определяет два метода: запрос информации о пользователе в соответствии с идентификатором и запрос всей информации о пользователе. Код выглядит следующим образом:
проиллюстрировать:
В этом интерфейсе следует отметить аннотации @Component и @Mapper. После того, как аннотация @Component аннотирует этот интерфейс, Spring автоматически просканирует и настроит этот класс; аннотация @Mapper должна передать DAO этого преобразователя в Spring для управление.
После определения интерфейса сопоставления Mybatis вам необходимо предоставить файл конфигурации xml для запроса к базе данных. Файл находится в папке resources/mapper, а полный код UserMapper.xml выглядит следующим образом:
2-4, определить пользователей
В интерфейсе UserService предусмотрено три метода: сохранение информации о пользователе, запрос пользователей по идентификатору и запрос всех пользователей. Код интерфейса UserService выглядит следующим образом:
В классе реализации интерфейса UserService необходимо одновременно внедрить две зависимости: UserRepository и UserMapper. Мы используем метод конструктора для внедрения этих двух зависимостей. код показывает, как показано ниже:
проиллюстрировать:
Аннотация @Transactional используется для установки метода управления транзакциями для каждого метода. Аннотация @Service объявляет, что этот класс является классом поставщика услуг, и устанавливает имя объекта компонента, когда класс инициализируется Spring, как «userService».
2-5. Определите контроллер
Наконец, предоставьте контроллер для обработки запросов, связанных с клиентской стороной. В контроллере предусмотрено три метода обработки запросов, которые соответственно обрабатывают запросы клиента на добавление новых пользователей, запрос пользователей по идентификатору и запрос всех пользователей. Код контроллера следующий:
проиллюстрировать:
В этом руководстве для кодирования предупреждений IDEA все внедрения зависимостей используют конструкторы для внедрения связанных зависимостей.
В-третьих, настройте Hibernate и Mybatis.
В Интернете есть много руководств по настройке Hibernate и Mybatis в проектах Spring Boot, но статей по одновременной настройке Hibernate и Mybatis немного. Некоторые из них настраивают эти две платформы ORM с помощью кода Java. интегрировать два фреймворка. На самом деле интегрировать эти два фреймворка не так сложно, как вы думаете: вам нужно всего лишь добавить несколько строк кода в конфигурационный файл application.yml или application.properties, чтобы завершить интеграцию двух фреймворков. Если взять в качестве примера файл конфигурации application.yml, код конфигурации выглядит следующим образом:
Это очень просто, и нет особой сложной настройки, это относительно простой способ интеграции. Hibernate и Mybatis имеют общий источник данных.Если вы верный поклонник JPA и хотите использовать Mybatis сейчас, вам нужно только добавить конфигурацию mybatis.
4. Тест
С помощью описанных выше шагов весь проект был построен.Затем три метода контроллера будут протестированы с помощью инструмента тестирования Postman, чтобы проверить, могут ли две инфраструктуры ORM сосуществовать в одном проекте.
Первый тестовый ПОСТhttp://localhost/users, чтобы проверить, может ли Hibernate успешно сохранять информацию о пользователе. Откройте инструмент Postman, введите адрес запроса http://localhost/users в адресной строке, выберите POST в качестве метода запроса и введите следующую информацию в столбце Body:
{
"username":"谭朝红",
"alias":"ramostear",
"age":28
}
Нажмите кнопку «Отправить», чтобы отправить запрос и просмотреть информацию об ответе сервера.Результаты теста показаны на следующем рисунке:
Видно, что сервер успешно возвращает информацию о пользователе, а идентификатор пользователя = 3. Далее мы запрашиваем GEThttp://localhost/users/3, Проверьте, может ли Mybatis успешно запрашивать информацию о пользователе, результаты теста следующие:
В ходе теста сервер успешно вернул информацию о пользователе с идентификатором пользователя = 3:
{
"id": 3,
"username": "谭朝红",
"alias": "ramostear",
"age": 28
}
Это доказывает, что в одном проекте и Hibernate, и Mybatis могут нормально работать, схема интеграции эффективна, а проблема сосуществования Hibernate и Mybatis в одном проекте решена.
V. Резюме
Этот курс проверяет возможность одновременного использования фреймворков Hibernate и Mybatis ORM и использует относительно простой способ интеграции двух фреймворков, отказывается от сложной конфигурации нескольких источников данных и быстро реализует одновременное использование двух фреймворков. , нужно.
Практично ли одновременное использование в проекте двух фреймворков ORM? Мой ответ - да. Используя две ORM-фреймворки одновременно, они могут компенсировать свои недостатки, чтобы одновременно достичь гибкости и удобства.С другой стороны, при использовании только Mybatis разработчикам необходимо генерировать таблицы базы данных вручную или с помощью информацию о других инструментах и с помощью решения для интеграции, описанного в этой статье, Mybatis может использовать возможности JPA для автоматического создания таблиц базы данных, тем самым упрощая этапы использования Mybatis. Наконец, для некоторых систем, в которых больше операций чтения, чем записи, эти две платформы можно использовать одновременно.Для модулей с небольшим количеством операций записи можно использовать Spring Data JPA для быстрого завершения реализации связанных функций.Для части операции чтения, Mybatis можно использовать для оптимизации контрольного предложения. Дополнительные преимущества между ними могут еще больше повысить эффективность разработки и производительность системы.
Адрес репозитория исходного кода этого общего контента: