Изучение гибких параметров конфигурации для беспрепятственной интеграции Hibernate в ваши Java-приложения
Хорошо, давайте начнем с самого распространенного вопроса, который может прийти вам в голову,
Что такое спящий режим?
Hibernate — это инструмент объектно-реляционного отображения (ORM) для языка программирования Java. Проще говоря, Hibernate помогает отображать классы Java на таблицы базы данных и наоборот. Это помогает сократить задачи разработчика, связанные с сохранением данных. Это реализация Java Persistence API (JPA), соответствующая общим стандартам API. Вы спросите, что такое JPA? Для этого следите за новостями в следующих блогах, а пока вы можете ознакомиться с оригинальной документацией Oracle, нажав здесь.
Какие существуют способы настройки Hibernate?
Итак, здесь я собираюсь показать вам три способа сделать это (помните, что я не собираюсь касаться способа Spring/Spring Boot, давайте пока остановимся на ядре Java).
Перво-наперво, давайте создадим новую Java-программу.
Теперь откройте файл pom.xml и добавьте следующие зависимости. Здесь я добавил две зависимости: коннектор mysql и основной спящий режим. Обратите внимание, что здесь я использую MySQL в качестве базы данных, и, следовательно, добавлен коннектор mysql, вы можете использовать любую другую базу данных, но обязательно добавьте соответствующие зависимости. Также, пожалуйста, проверьте версии один раз в репозитории Maven, он обновляется каждые несколько месяцев/недель.
<dependencies> <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.32</version> </dependency> <!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core --> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.2.3.Final</version> </dependency> </dependencies>
Вот и все! Теперь Hibernate готов к настройке и использованию с базой данных MySQL. Хорошо, теперь давайте проверим первый способ настройки Hibernate —
1. XML-способ
Это наиболее распространенный способ настройки Hibernate. Почти все учебники в Интернете говорят об этом методе. Здесь я собираюсь создать XML-файл (о чем вы, должно быть, уже догадались!) и поместить все конфигурации в этот файл. Позже я обращусь к этому файлу из программы на Java. Давайте погрузимся и посмотрим, как это сделать на самом деле.
Первый шаг — создать файл XML в папке resources проекта (src-›main-›resources-›hibernate.cfg.xml). Имя файла по умолчанию — «hibernate.cfg.xml», и я оставлю то же имя (в этом есть преимущество, вы узнаете об этом позже), но вы можете оставить любое имя файла, но убедитесь, что расширение .xml.
Затем откройте файл и добавьте следующую конфигурацию
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- For Oracle SQL use oracle.jdbc.driver.OracleDriver as the driver--> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- For Oracle SQL use org.hibernate.dialect.OracleDialect as the dialect--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Example url for reference: dbc:mysql://localhost:3306/project_schema_db?useSSL=false --> <property name="connection.url">jdbc:mysql://<host>:<port>/<db_name>?useSSL=false</property> <property name="connection.username">db_username</property> <property name="connection.password">db_password</property> <!-- When it's true, every query executed by hibernate will be shown in the console--> <property name="show_sql">true</property> <!--Setting session context model --> <property name="current_session_context_class">thread</property> </session-factory> </hibernate-configuration>
Наконец, давайте создадим класс Java, из которого я заставлю hibernate использовать этот XML-файл для получения свойств конфигурации. Здесь я создал простой класс с основным методом внутри, а затем внутри основного метода я создал фабрику сеансов. Ниже приведен код,
package com.hibernatepractice.driver; import com.hibernatepractice.entities.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class MainDriver { public static void main(String[] args) { //.configure() fetches the xml file automatically when default file name is used(hibernate.cfg.xml) SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); try{ //add your hibernate code to manipulate data }finally { session.close(); sessionFactory.close(); } } }
Помните, я упоминал ранее, что сохранение имени файла XML по умолчанию дает определенные преимущества? В методе configure() мы фактически должны передать имя файла конфигурации, например configure(“somefile.xml”). Но если мы сохраним имя по умолчанию, тогда не требуется снова явно указывать имя файла в методе, отсюда и преимущество!
Это оно!! Спящий режим настраивается с использованием XML!! Теперь давайте перейдем ко второму способу настройки.
2. Использование файла свойств
Вместо использования файла XML мы также можем использовать файл свойств, и это второй способ, который я собираюсь обсудить сейчас. В папке resources(src-›main-›resources) создайте новый файл свойств, имя файла может быть любым (к сожалению, имя файла по умолчанию здесь не работает), я назову этот файл database.properties.
Следующим шагом является открытие файла и добавление следующих свойств, вы можете легко связать их с содержимым файла XML.
hibernate.connection.url = jdbc:mysql://localhost:3306/practiceschema_db?useSSL=false hibernate.dialect = org.hibernate.dialect.MySQLDialect hibernate.connection.username = root hibernate.connection.password = root hibernate.connection.driver_class = com.mysql.jdbc.Driver hibernate.current_session_context_class = thread hibernate.show_sql = true
Теперь последний шаг, вызовите этот файл свойств из программы Java. Код останется более или менее прежним. Сначала я загружу файл свойств в объект Properties, а затем изменю метод configure() на addProperties() и передам свойство в качестве аргумента внутри.
package com.hibernatepractice.driver; import com.hibernatepractice.entities.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.util.Properties; public class MainDriver { public static void main(String[] args) { Properties prop = new Properties(); try { //Note that we are required to provide the full path of the file starting from the base directory //which is src for every project FileReader file = new FileReader("src/main/resources/database.properties"); prop.load(file); } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } //Using addProperties() instead of configure() SessionFactory sessionFactory = new Configuration().addProperties(prop).addAnnotatedClass(User.class).buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); try{ //add your hibernate code to manipulate data }finally { session.close(); sessionFactory.close(); } } }
Это был второй способ сделать это. Теперь давайте перейдем к третьему пути, и это будет последний путь.
3. Программная конфигурация (помещение всего в код Java)
Для этого метода не требуется создавать никаких внешних файлов, я все положу внутрь Java. В основном я создаю объект Properties и вместо загрузки файла свойств устанавливаю свойства непосредственно в объекте в виде пар ключ-значение. Проверьте код ниже,
package com.hibernatepractice.driver; import com.hibernatepractice.entities.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.util.Properties; public class MainDriver { public static void main(String[] args) { Properties prop = new Properties(); prop.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/project_schema_db?useSSL=false"); prop.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); prop.setProperty("hibernate.connection.username","root"); prop.setProperty("hibernate.connection.password","Dangerous123"); prop.setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver"); prop.setProperty("hibernate.show_sql","true"); prop.setProperty("hibernate.current_session_context_class","thread"); SessionFactory sessionFactory = new Configuration().addProperties(prop).addAnnotatedClass(User.class).buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); try{ //add your hibernate code to manipulate data }finally { session.close(); sessionFactory.close(); } } }
Итак, это третий и последний способ ведения дел.
Заключение
Здесь я обсудил три разных способа настройки Hibernate. Первые два способа включают использование внешнего файла, а третий способ включает все содержимое файла Java. Хотя может показаться заманчивым использовать третий способ, учитывая его простоту, я бы рекомендовал иначе. Никогда не рекомендуется помещать имена пользователей и пароли непосредственно в класс Java и предоставлять его. Поэтому я бы посоветовал никогда не использовать третий способ в реальном проекте, я включил третий способ только для вашего сведения. Всегда идите первым или вторым путем.
Что ж, статья стала немного длинноватой, но, надеюсь, я смог ясно изложить свою мысль. В случае каких-либо сомнений или вопросов, или если вы хотите, чтобы я изменил/убрал/добавил что-то, пожалуйста, дайте мне знать в комментариях.
Ваше здоровье!!!!
Спасибо, что дочитали до конца. Пожалуйста, следите за автором и этой публикацией. Посетите Stackademic, чтобы узнать больше о том, как мы демократизируем бесплатное обучение программированию по всему миру.