Как настроить hibernate spring mvc

Пишем простое веб-приложение используя Spring MVC, Spring Data JPA и Hibernate

Привет, Хабр! Представляю Вашему вниманию перевод руководства «Spring MVC + Spring Data JPA + Hibernate — CRUD Example» автора Nam Ha Minh.

В этом руководстве по Java Spring вы узнаете, как настроить Spring MVC приложение для работы с Spring Data JPA, разработав простое веб-приложение, которое позволяет управлять информацией о клиентах.

По завершению этого руководства, вы сможете создать веб-приложение Java основанное на технологиях Spring MVC и Spring Data JPA, которое выглядит следующим образом:

Программы и технологии используемые в этом руководстве: Java 8, Apache Tomcat 9, MySQL Server 5.7, Eclipse IDE 4.7 (Oxygen), Spring Framework 5.1, Hibernate 5.4, Spring Data JPA 2.1.5 и Servlet 3.1.

Начнём с создания базы данных.

1. Создание базы данных

Мы будем использовать MySQL. В нашем пример мы будем работать с данными в таблице customer, которая находится в схеме с именем sales. Таблица customer имеет 4 поля: id, name, email и address:

Читайте также:  Компа не работает wifi

Вы можете запустить следующий MySQL скрипт для создания схемы и таблицы:

2. Создание проекта в Eclipse

Создайте Dynamic Web Project в Eclipse, и конвертируйте его в проект Maven: для этого нажмите ПКМ по проекту, выберете Configure > Convert to Maven Project. В открывшемся диалоговом окне Create new POM введите следующую информацию:

— Group Id: net.codejava
— Artifact Id: CustomerManager

Также убедитесь, что версия JRE для проекта Java 8 или новее.

Затем, откройте pom.xml (файл Maven), чтобы настроить зависимости для этого проекта. Объявите свойства версий для Spring и Hibernate Frameworks:

Укажите зависимость для Spring Framework:

Для создания веб-приложений Spring MVC:

Для использования Spring Data JPA:

Мы используем Hibernate в качестве реализации JPA, поэтому добавим следующую зависимость:

Для того, чтобы приложение работало с MySQL, нам нужна зависимость для драйвера MySQL JDBC:

И теперь зависимости для Java Servlet, JSP и JSTL:

Создайте два Java пакета в корне проекта:
— net.codejava.config : для классов конфигурации.
— net.codejava.customer : для классов приложения.

3. Создание файла настройки JPA

Поскольку мы используем JPA, нам нужно определить свойства для подключения к базе данных в файле persistence.xml , а не в hibernate.cfg.xml . Создайте новый каталог с именем META-INF в исходной папке проекта, чтобы поместить в него файл persistence.xml :

И впишите в этот файл код представленный ниже:

Как вы можете видеть, мы указываем свойства для соединения с базой данных, такие как URL, user, password и класс JDBC драйвера. Так же обратите внимание, что имя SalesDB будет использоваться нами в коде конфигурации.

4. Создание Model Class

Создайте класс Customer , который сопоставляется с таблицей customer в базе данных следующим образом:

Как вы могли увидеть, мы используем аннотацию @Entity для сопоставления этого класса с таблицей customer (имя класса совпадает с именем таблицы). Все имена полей класса идентичны именам полей в таблице. Поле id имеет аннотации @Id и @GeneratedValue , чтобы указать, что это поле является первичным ключом и его значение генерируется автоматически.

5. Конфигурация Spring MVC и Spring Data JPA

Далее, напишем Java код для настройки Spring MVC и Spring Data JPA. Мы будем использовать конфигурацию на основе Java, так как она проще, чем XML.

Настройка Spring Dispatcher Servlet

Для использования Spring MVC в нашем приложении, нам надо зарегистрировать Spring Dispatcher Servlet при запуске приложения, написав следующий класс:

Метод onStartup() этого класса будет автоматически вызываться сервлетом при загрузке приложения. Spring Dispatcher Servlet обарабатывает все запросы cопоставляя URL «/» и ищет конфигурацию в классе WebMvcConfig , которй описан ниже.

Настройка Spring MVC

Создайте класс WebMvcConfig в пакете net.codejava.config , содержащий следующий код:

Этот класс помечен аннотацией @Configuration , сообщающей Spring, что это файл конфигурации. Аннотация @ComponentScan говорит Spring искать классы конфигурации в пакете net.codejava .

В этом классе мы создаём bean-компонент, который распознаёт представления (View), с помощью указания префикса и суффикса для этих представлений. Поэтому создайте каталог views внутри каталога WebContent/WEB-INF для хранения JSP файлов.

Здесь вы можете добавить и другие конфигурации Spring MVC.

Настройка Spring Data JPA

Для работы с Spring Data JPA нам надо создать два beans-компонента: EntityManagerFactory и JpaTransactionManager . Поэтому создадим другой конфигурационный класс JpaConfig :

Здесь мы используем две важные аннотации:

  • @EnableJpaRepositories : сообщает Spring Data JPA, что нужно искать классы репозитория в указанном пакете (net.codejava) для внедрения соответсвующего кода во время выполнения.
  • @EnableTransactionManagement : сообщает Spring Data JPA, чтобы тот генерировал код для управления транзакциями во время выполнения.

В этом классе первый метод создаёт экземпляр EntityManagerFactory для управления Persistence Unit нашей SalesDB (это имя указано выше в persistence.xml ).

Последний метод создаёт экземпляр JpaTransactionManager для EntityManagerFactory , созданный методом ранее.

Это минимальная необходимая конфигурация для использования Spring Data JPA.

Создание Repository Interface

Создайте интерфейс CustomerRepository , который расширяет определенный в Spring Data JPA интерфейс CrudRepository :

Это почти весь код, который нам нужен для доступа к данным. Просто, согласитесь? С Spring Data JPA нам не нужно писать DAO (Java Data Acces Object) код. Просто объявите интерфейс, расширяющий интерфейс CrudRepository , в котором определены такие методы CRUD как: save() , findAll() , findById() , deleteById() и т.д. Во время выполнения Spring Data JPA автоматически сгенерирует код.

Обратите внимание, что мы должны указать тип класса модели и тип поля первичного ключа при расширении CrudRepository : CrudRepository .

7. Создание Service Class

Затем, создайте класс CustomerService :

Обратите внимание на аннотацию @Transactional , которой помечен наш класс. Это означает, что все методы этого класса будут перехвачены Spring Data JPA для управления транзакциями. И экземпляр интерфейса CustomerRepository будет внедрён в этот класс:

Это похоже на магию, поскольку мы не пишем DAO код, но Spring Data JPA автоматически создаст реализацию во время выполнения.

Как вы можете видеть, все методы в данном классе предназначены для операций CRUD. Он просто делегирует весь вызов объекту CustomerRepository . Вам может показаться этот класс избыточным, но он необходим, для отделения уровня business/service от уровня repository/DAO.

8. Создание контроллера Spring MVC

Создайте класс CustomerContoroller для обработки всех запросов от клиентов:

Это типичный класс Spring MVC Controller, который аннотирован с помощью @Controller . Вы можете увидеть, что экземпляр CustomerService внедряется в этот объект с помощью аннотации @Autowired .

Мы напишем методы обработки в следующих секциях.

9. Добавление списка клиентов

На домашней странице нашего приложения будут отображаться все клиенты, для этого добавьте соответствующий обрабатывающий метод в наш CustomerController класс:

Домашняя страница просмотра ( index.jsp ) должна выглядеть следующим образом:

Теперь вы можете запустить веб-приложение. Добавьте несколько строк в таблицу customer и перейдите по адресу http://localhost:8080/CustomerManager/ , и вы увидите что-то похожее:

10. Добавление нового пользователя

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

Напишем саму JSP форму с именем new_customer.jsp :

Теперь на главной странице у вас появится ссылка New Customer, при нажатии на которую вы увидите новую форму:

Второй метод-обработчик будет обрабатывать кнопку Save в этой форме:

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

11. Изменение данных пользователя

Чтобы реализовать функцию редактирования клиента, добавим следующий метод-обработчик в класс CustomerController :

Напишем форму edit_customer.jsp , которая вызывается этим методом:

Нажмите на гиперссылку Edit рядом с клиентом на домашней странице, вызовется форма редактирования клиента, которая будет выглядеть примерно вот так:

Метод-обработчик по-прежнему обрабатывает кнопку Save.

12. Удаление клиента

Для реализации функции удаления, напишите следующий метод-обработчик в классе CustomerController :

Нажмите на гиперссылку Delete рядом с клиентом на главной странице. Клиент удалится, а список обновится.

13. Поиск по клиентам

Наконец, давайте реализуем функцию поиска, которая позволяет пользователю искать клиентов, вводя ключевое слово. Функция поиска ищет ключевые слова в трёх полях: имя, email и адрес, для чего нам потребуется написать собственный метод в интерфейсе CustomerRepository :

Метод search() — это просто абстрактный метод, аннотированный с помощью @Query . Поисковый запрос является запросом JPA.

Затем добавьте метод в класс CustomerService :

Теперь добавьте метод-обработчик в класс CustomerController :

И создайте страницу результата поиска search.jsp :

Для тестирования функции поиска, введите ключевое слово в поле поиска на домашней странице, и нажмите Enter. Вы увидите страницу результата поиска:

Выводы

В данном руководстве вы узнали как можно разработать веб-приложение Spring MVC, используя Spring Data JPA для доступа к данным. Как вы могли видеть, Spring Data JPA значительно уменьшает и упрощает код, который нам нужно писать.

Для сравнения, вот структура проекта в Eclipse IDE:

Источник

Spring MVC 3, Аннотации Hibernate, MySQL. Туториал по интеграции

Не так давно я начал изучать фреймворк Spring и понял, что количество материала на русском языке ограниченно буквально парой стоящих статей. По быстрому пробежав, я захотел сделать что-то более интересное, но с наскоку взять не удалось. Пришлось погуглить по поводу нескольких вопросов касательно взаимодействия Spring и Hibernate. Неожиданно я наткнулся на блог достаточно интересного разработчика Mark Serrano aka krams. Теперь вместе с вами я хотел бы начать цикл статей-переводов, а так же свое обучение в мире Spring.
Spring — Hibernate: ассоциация один ко многим
Приступим…

В этом уроке мы создадим простое приложение для управления списком лиц с использованием Spring MVC 3. Мы построим простую CRUD (Create Read Update Delete) систему для просмотра, добавления, правки и удаления персон. В качестве слоя для работы с базой данных мы будем использовать Hibernate 3 и базу MySQL, хотя вы можете использовать другую базу данных. В этом уроке предполагается, что вы знакомы с MVC, ORM и SQL (от переводчика: не пугайтесь этих сложных слов, смело читаем, все будет довольно просто)

Что такое Hibernate?

Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (object-relational mapping — ORM). Данная библиотека предоставляет лёгкий в использовании каркас (фреймворк) для отображения объектно-ориентированной модели данных в традиционные реляционные базы данных.

Hibernate решает проблему между хранением объекта в базе данных и его объектно-ориентированном представлении на уровне языка.

Что такое MySQL?

База данных MySQL обеспечивает работу наиболее требовательных сетей, электронной комерции и обработки транзакций приложений. Она гарантирует безопасность транзакций, ACID совместимость дает возможность комита, отката, восстановления в случае сбоя, а также возможностей блокировки строк. MySQL обеспечивает простоту использования, масштабируемость и производительность, эти качества сделали MySQL наиболее популярной базой данных с открытым исходным кодом в мире. Некоторые из наиболее посещаемых ресурсов сети использует MySQL, такие как Facebook, Google, Ticketmaster и Ebay.

В начале давайте посмотрим на конечную структуру нашего проекта:

И посмотрим, как будет выглядеть наше приложение:

Мы начнем с определения нашего доменного объекта Person (сущности Person).

Person простой POJO содержащий четыре приватных переменных:

id
firstName
lastName
money

Дополнение от переводчика: POJO (англ. Plain Old Java Object) — «простой Java-объект в старом стиле», простой Java-объект, не унаследованный от какого-то специфического объекта и не реализующий никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели (Wiki)

Каждой из этих переменных с аннотацией @Column соответствует колонка в базе данных:

ID
FIRST_NAME
LAST_NAME
MONEY

Вам нет необходимости иметь с ними дело, Hibernate возьмет это на себя. Тем не менее вы должны правильно объявить эти имена (например @Column(name = «ID«)). Вы не объявляете их в базе данных. Помните — вашей базы данных еще не существует.

POJO ссылается на таблицу вашей базы данных, обратите внимание на аннотацию Table, где указано имя таблицы соответствующей данному объекту.

Обратите внимание, аннотация Entity стоит перед аннотацие Table, это говорит Hibernate, что POJO является отображением таблицы базы данных.

Мы будем манипулирувать списком лиц, поэтому создадим для этого сервис:

Мы объявили простую CRUD систему со следующими методами:

В каждом методе мы получаем сессию:

Session session = sessionFactory.getCurrentSession();

Это похоже на соединение с базой данных, так что мы можем делать нашу работу. Объект Session предоставляет множество методов для работы объектами-сущностями. Для этого урока мы используем следующие методы класса Session:

session.createQuery()
session.save()
session.delete()

Мы создали доменный и сервисный слои, давайте создадим Spring контроллер.

Контроллер объявляет следующие представления:

/persons — для получения всех лиц
/persons/add (GET) — показать форму «Добавить»
/persons/add (POST) — сохраняет новую персону
/persons/delete — удаляет существующую персону
/persons/edit (GET) — показывает форму «Правка»
/persons/edit (POST) — сохраняет «исправленную» персону

Каждое представление вызывает PersonService. Когда PersonService завершает обработку, крнтроллер пересылает запрос на JSP-страницу, которая показывает сообщение с подтверждением. Вот страницы JSP:

Давайте сконфигурируем наше приложение.
Для работы Spring MVC в web.xml добавим:

Обратите внимание на шаблон URL. При обращении к страницам нашего приложения к имени хоста должна быть добавка в виде:

В web.xml мы указали в качестве имени сервлета spring. По соглашению мы также должны создать файл spring-servlet.xml.

Мы также должны создать файл applicationContext.xml.

Обратите внимание, что в файле applicationContext.xml мы объявили следующий импорт:

Он содержит файлы конфигурации Hibernate.

В этом файле мы инкапсулировали все связанные конфигурации Hibernate и Spring.
Комментарии по конфигурации:

1. Включаем поддержку транзакций через использование аннотаций Spring.

2. Объявили SessionFactory для Hibernate.

SessionFactory — фабрика, генерирующая нам объяекты-сессии. Это похоже на Автомобильный завод, работа которого заключается в производстве автомобилей для людей.

Что такое сессия (Session)?

Основная функция Сессии — создание, чтение, удаление объектов классов-сущностей(классов помеченных аннотацией Entity).

Для SessionFactory требуется источник данных, которым в данном уроке является база данных.
SessionFactory требует наличие файла со специфической конфигурацией Hibernate.

Здесь мы указали тип нашей базы данных. Мы используем MySQL dialect. Мы используем особенный диалект — MySQL5InnoDBDialect, потому что мы используем потому что мы используем InnoDB движок для управления памятью.

Что такое MySQL InnoDB?

InnoDB — MySQL движок, обеспечивающий безопасность транзакций, позволяющий комиты, откат и восстановление для защиты пользовательских данных.

Так вот, вернемся обратно к бину SessionFactory, ему необходимо знать, где расположены наши объекты-сущности. Поэтому мы указываем в этом уроке, что они расположены в пакете org.krams.tutorial.

3. Укажем в файле hibernate-context.xml источники данных.

Для эффективного доступа к нашей базе данных мы используем C3p0 пул. Зачем нам необходимо оборачивать наши данные в пул?

Соединения JDBC чаще управляются через пул, нежели напрямую через драйвер. Примеры пулов соединений BoneCP, C3P0 и DBCP.

Зачем нужен пул?

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

Особенности подкдючения к базе данных мы указываем в файле spring.properties.

Имя моей базы данных — mydatabase.

Как альтернатива мы можем указать эти особенности прям в файле hibernate-context.xml.

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

Мы завершили наше приложение. Нам удалось создать простое Spring MVC приложение с использованием Hibernate, для доступа к MySQL.

Для доступа к главной странице введите следующий URL: localhost:8080/spring-hibernate-mysql/krams/main/persons

Лучший способ изучения — попытаться создать приложение самому.

Источник

Оцените статью