Hibernate – один из самых известных инструментов объектно-реляционного сопоставления (ORM), который позволяет разработчику легко сопоставлять специализированные объекты Java, известные как Сущности, с таблицами базы данных, а также позволяет ему/ей создавать новые строки в таблицах базы данных и/или обновлять существующие с помощью этих объектов Java. Эта возможность значительно сокращает время разработки, поскольку теперь нам не нужно заботиться о каждой сложной детали того, как данные создаются, обновляются и удаляются в базе данных. И нет необходимости говорить, что такой потрясающий фреймворк, как Hibernate, обеспечивает гораздо больше, чем просто это.
В этом посте мы создадим простой Java-проект, чтобы начать работу с Hibernate. Но мы не будем использовать веб-фреймворк MVC, такой как Spring, поверх Hibernate, потому что использование любого другого фреймворка будет отвлекать от понимания самого Hibernate. Итак, мы создадим автономное приложение для гибернации и будем использовать JUnit для модульного тестирования каждой изучаемой нами функции гибернации. В качестве нашего первого примера мы будем вставлять запись в пользовательскую таблицу на локальном сервере MySQL. Так что давайте начнем!
Создайте проект Maven
Начните с создания проекта maven в вашей любимой IDE и отредактируйте pom.xml файл должен иметь следующие зависимости Hibernate, JUnit и MySQL (поскольку мы используем базу данных MySQL). Заключительный pom.xml файл будет выглядеть следующим образом:
4.0.0 com.jeetprksh hibernate-examples 1.0-SNAPSHOT hibernate-examples junit junit 4.11 test mysql mysql-connector-java 8.0.11 org.hibernate hibernate-core 5.2.10.Final
Настройка режима гибернации
Любому приложению, находящемуся в спящем режиме, потребуется минимальная конфигурация, указывающая ему, какую базу данных использовать и где ее искать. Мы настраиваем всю эту информацию в hibernate.cfg.xml файл:
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/testDB root qwerty123 10 true org.hibernate.dialect.MySQLDialect thread
Помимо наличия сведений о подключении к базе данных, он также содержит сведения о сопоставленных объектах. Нам нужно сохранить этот файл в каталоге ресурсов maven, чтобы он был у нас на пути к классу. Теперь в нашем приложении Java мы прочитаем эту конфигурацию, чтобы создать экземпляр SessionFactory, который будет использоваться для создания сеанса и управления им, который, в свою очередь, предоставляет интерфейс CRUD для сопоставленных объектов. Общий класс конфигурации Java был бы:
public class HibernateConfig {
private static final SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
static {
try {
StandardServiceRegistry standardRegistry =
new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata metaData = new MetadataSources(standardRegistry).getMetadataBuilder().build();
sessionFactory = metaData.getSessionFactoryBuilder().build();
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Класс сущности
Класс entity – это специальный класс Java, который представляет таблицу базы данных в нашем приложении Java, и любая операция CRUD, которая нам нужна для этой таблицы базы данных, будет выполняться через этот класс entity. Поскольку нам нужно вставить запись в таблицу пользователя, мы создадим класс сущности пользователя, который будет выглядеть следующим образом:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String firstName;
private String lastName;
private int age;
public User(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
// getters and setters
}
Обратите внимание, что наш пользовательский класс использует следующие аннотации гибернации:
- Аннотация уровня класса
@Entity, которая делает его Сущностью, сопоставленной с таблицей с аналогичным именем. Если имя класса сущности и имя таблицы должны отличаться, то мы можем указать имя таблицы в необязательном параметре аннотации как@Entity(name). - С помощью
@Idаннотации к атрибуту id мы делаем его уникальным идентификатором для объекта User. @GeneratedValueопределяет, как будет генерироваться уникальный идентификатор при вставке новых записей в пользовательскую таблицу.
Создание слоя DAO
Объект доступа к данным будет единой точкой контакта для всего приложения для обновления и запроса записей в базу данных и из нее. В нашем случае модульные тестовые примеры будут использоваться в эти дни для того же самого. Поскольку нам нужно вставить пользовательскую сущность, соответствующий UserDao будет выглядеть следующим образом:
public class UserDaoImpl extends CommonDaoImpl implements UserDAO {
@Override
public int createUser(User user) throws HibernateException {
return super.saveEntity(user);
}
}
Обратите внимание, что UserDao будет иметь только методы доступа к данным, специфичные для объекта User, поэтому, если у нас есть другой объект, скажем Адрес , для этого потребуется свой собственный класс DAO, Адрессдао . Но в наши дни мы зависим от более общего Common Dao , который будет напрямую взаимодействовать с Hibernate для сохранения, запроса и обновления объектов.
public class CommonDaoImpl {
private SessionFactory sessionFactory;
private Session session;
public CommonDaoImpl() {
this.sessionFactory = HibernateConfig.getSessionFactory();
this.session = sessionFactory.getCurrentSession();
}
protected int saveEntity(Object obj) throws HibernateException {
Transaction transaction = session.beginTransaction();
int id = (Integer) session.save(obj);
transaction.commit();
return id;
}
}
Каждый метод в этот ДЕНЬ будет отвечать за запуск транзакции для экземпляра объекта Session , сохранение объекта на том же Сеанс экземпляр, а затем зафиксируйте транзакцию.
Собирая Все Это Воедино
Наконец, мы настроили и внедрили все необходимые вещи, и теперь пришло время ввести последнюю часть, чтобы увидеть все это в действии, модульный тест.
public class Tests {
private static final Logger logger = Logger.getLogger(Tests.class.getName());
private UserDAO userDao;
public Tests() {
this.userDao = new UserDaoImpl();
}
@Test
public void testInsertUser() {
User user = new User("Robb", "Stark", 17);
Integer id = (Integer) userDao.createUser(user);
assertTrue(id instanceof Integer);
}
}
Обратите внимание, что для модульного тестирования пользователя insert наш модульный тестовый пример сначала создает объект User и передает его на уровень DAO, чтобы он был вставлен в базу данных. Уровень DAO вернет уникальный идентификатор только что вставленной записи, который мы будем использовать в качестве критерия прохождения/неудачи для этого модульного теста.
Код
Рабочий код был зафиксирован в этом репозитории github.
Эта статья уже опубликована в моем личном блоге .
Оригинал: “https://dev.to/jeetprakash/getting-started-with-hibernate-d4p”