Hibernate

Создание базы данных MySQL и таблицы для хранения объектов определенного класса.
Реализация доступа к базе данных с использованием JDBC и выполнение базовых операций CRUD.
Создание сущности JPA для соответствующей таблицы базы данных.
Использование Hibernate для работы с базой данных: чтение, запись, обновление и удаление записей.


Пример

pom.hml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>BDJunior</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>6.0.0.Alpha7</version>
<type>pom</type>
</dependency>

<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.1.0</version>
</dependency>
</dependencies>

</project>


Connector

public class Connector{
final StandardServiceRegistry registry;
SessionFactory sessionFactory;
public Connector() {
registry = new StandardServiceRegistryBuilder()
.configure() // configures settings from hibernate.cfg.xml
.build();
sessionFactory = new MetadataSources( registry
).buildMetadata().buildSessionFactory();
}
public Session getSession(){
return sessionFactory.openSession();
}
}


Db

public class Db {
private static final String URL = "jdbc:mysql://localhost:3306";
private static final String USER = "root";
private static final String PASSWORD = "";


public static List<Book> findBookByAuthor(String author) {
Connector connector = new Connector();
try (Session session = connector.getSession()) {
return session.createQuery("from Book where author = '" + author + "'", Book.class).getResultList();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public static List<Book> findAll() {
Connector connector = new Connector();
try (Session session = connector.getSession()) {
return session.createQuery("from Book", Book.class).getResultList();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public static void updateName(Long id, String name) {
Connector connector = new Connector();
try (Session session = connector.getSession()) {
String hql = "from Book where id = :id";
Query<Book> query = session.createQuery(hql, Book.class);
query.setParameter("id", id);
Book book = query.getSingleResult();
System.out.println(book);
book.setName(name);
session.beginTransaction();
session.update(book);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void delete(Long id) {
Connector connector = new Connector();
try (Session session = connector.getSession()) {
Query<Book> query = session.createQuery("from Book where id = :id", Book.class);
query.setParameter("id", id);
Book book = query.getSingleResult();
session.beginTransaction();
session.delete(book);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}
}

public static void creatRow(String name, String author) {

Connector connector = new Connector();
Session session = connector.getSession();
Book book = new Book();
book.setName(name);
book.setAuthor(author);
session.beginTransaction();
session.save(book);
session.getTransaction().commit();
session.close();
}

public static void createTable() {
try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD)) {
Statement statement = connection.createStatement();
statement.execute("drop schema `books`");
statement.execute("create schema `books`");
statement.execute("create table `books` . `books` (" +
"`id` bigint not null auto_increment, " +
"`name` varchar(100) not null," +
"`author` varchar(100) not null," +
"primary key (`id`));");
statement.execute("insert into `books` . `books` (`id`, `name`, `author`)\n" +
"values (1, 'Война и мир', 'Толстой')," +
"(2, 'Евгений Онегин', 'Пушкин')," +
"(3, 'Тихий Дон', 'Шолохов')," +
"(4, 'Мастер и Маргарита', 'Булгаков')," +
"(5, 'Идиот', 'Достоевский')," +
"(6, 'Сто лет одиночества', 'Габриэль Гарсиа Маркес')," +
"(7, 'Преступление и наказание', 'Достоевский')," +
"(8, 'Робинзон Крузо', 'Даниэль Дефо')," +
"(9, 'Анна Каренина', 'Толстой')," +
"(10, 'Дон Кихот', 'Мигель де Сервантес Сааведра');");

ResultSet set = statement.executeQuery("select * from books.books where author = 'Толстой'");
while (set.next()) {
System.out.println(set.getString(3) + " " + set.getString(2) + " " + set.getLong(1));
}
} catch (SQLException e) {
throw new RuntimeException();
}
}


}


hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!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>
<property
name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3306/books</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"/>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping class="org.example.models.Book" />
</session-factory>
</hibernate-configuration>


Main

public static void main(String[] args) throws Exception {
// Db.createTable();
// Db.creatRow("Барышня крестьянка", "Пушкин");
List<Book> booksByAuthor = Db.findBookByAuthor("Толстой");
System.out.println(booksByAuthor);

}
// [Book(id=1, name=Война и мир, author=Толстой), Book(id=9, name=Анна Каренина, author=Толстой)]