diff --git a/pom.xml b/pom.xml index 0605a4c0..350c0976 100644 --- a/pom.xml +++ b/pom.xml @@ -13,27 +13,40 @@ org.apache.maven.plugins maven-compiler-plugin - 7 - 7 + 8 + 8 + + org.apache.maven.plugins + maven-site-plugin + 3.9.1 + + UTF-8 + UTF-8 + false + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.1.2 + - - - - junit - junit - 4.12 - test - + + junit + junit + 4.12 + test + mysql mysql-connector-java - 5.1.38 + 8.0.25 @@ -45,8 +58,7 @@ org.hibernate hibernate-core - 4.3.10.Final + 5.5.2.Final - - + \ No newline at end of file diff --git a/src/main/Resources/mysql_config b/src/main/Resources/mysql_config new file mode 100644 index 00000000..8707336c --- /dev/null +++ b/src/main/Resources/mysql_config @@ -0,0 +1,6 @@ +db.driver = mysql:// +db.host = localhost +db.port = :3306 +db.base = /jm-base-module-one +db.login = jm-admin +db.password = !Jmc0urs3 \ No newline at end of file diff --git a/src/main/java/jm/task/core/jdbc/Main.java b/src/main/java/jm/task/core/jdbc/Main.java index f6e43b0f..4faabca6 100644 --- a/src/main/java/jm/task/core/jdbc/Main.java +++ b/src/main/java/jm/task/core/jdbc/Main.java @@ -1,7 +1,85 @@ package jm.task.core.jdbc; +import jm.task.core.jdbc.model.User; +import jm.task.core.jdbc.service.*; +import jm.task.core.jdbc.util.Util; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + public class Main { - public static void main(String[] args) { - // реализуйте алгоритм здесь + public static void main(String[] args) throws SQLException { + UserService service = new UserServiceImpl(); + UserService service2 = new UserServiceHibernateImpl(); + Connection connection = Util.connect(); + Util.printConnectionInfo(connection); + + service.createUsersTable(); + getUsers(service); + System.out.println("\nДобавляем пользователей..."); + service.saveUser("Тимур", "Батрутдинов", (byte) 38); + service.saveUser("Гарик", "Мартиросян", (byte) 44); + service.saveUser("Гарик", "Мартиросян", (byte) 44); + service.saveUser("Павел", "Воля", (byte) 40); + service.saveUser("Гарик", "Харламов", (byte) 44); + service.saveUser("Семен", "Слепаков", (byte) 41); + System.out.println(); + getUsers(service); + + System.out.print("\nУдаляем пользователя с номером id 3"); + service2.removeUserById(3); + getUsers(service); + + System.out.println("\nМеняем данные пользователя с номером id 4"); + service2.updateUser(4, "Нурлан", "Сабуров", (byte) 36); + getUsers(service); + + System.out.println("\nОчищаем и удаляем таблицу пользователей"); + service.cleanUsersTable(); + getUsers(service); + service.dropUsersTable(); + + + + + service2.createUsersTable(); + getUsers(service2); + System.out.println("Добавляем пользователей..."); + service2.saveUser("Тимур", "Батрутдинов", (byte) 44); + service2.saveUser("Гарик", "Мартиросян", (byte) 44); + service2.saveUser("Гарик", "Харламов", (byte) 44); + service2.saveUser("Павел", "Воля", (byte) 40); + service2.saveUser("Гарик", "Мартиросян", (byte) 44); + service2.saveUser("Семен", "Слепаков", (byte) 41); + getUsers(service2); + + System.out.print("\nУдаляем пользователя с номером id 3"); + service2.removeUserById(3); + getUsers(service2); + + System.out.println("\nМеняем данные пользователя с номером id 4"); + service2.updateUser(4, "Нурлан", "Сабуров", (byte) 36); + getUsers(service2); + + System.out.println("Очищаем и удаляем таблицу пользователей"); + service2.cleanUsersTable(); + getUsers(service2); + service2.dropUsersTable(); + } + + private static void getUsers(UserService service) { + List users = service.getAllUsers(); + if (users.isEmpty()) { + System.out.printf("\nТекущее количество пользователей пользователей: %d\n", 0); + } else { + System.out.printf("\nТекущее количество пользователей пользователей: %d\n", users.size()); + System.out.printf("%-9s%s\n", "", "ТАБЛИЦА ПОЛЬЗОВАТЕЛЕЙ"); + System.out.printf("%-1s%-6s%-10s%-15s%s\n", "", "ID", "ИМЯ", "ФАМИЛМЯ", "ВОЗРАСТ"); + System.out.println("----:-------:-----------------:--------:"); + users.stream() + .sorted((u1, u2) -> u1.getName().compareToIgnoreCase(u2.getName())) + .forEach(System.out::println); + } } } diff --git a/src/main/java/jm/task/core/jdbc/SqlQuery.java b/src/main/java/jm/task/core/jdbc/SqlQuery.java new file mode 100644 index 00000000..cd6ee787 --- /dev/null +++ b/src/main/java/jm/task/core/jdbc/SqlQuery.java @@ -0,0 +1,24 @@ +package jm.task.core.jdbc; + +public enum SqlQuery { + CREATE("CREATE TABLE IF NOT EXISTS users (id BIGINT AUTO_INCREMENT UNIQUE NOT NULL, name VARCHAR(45), lastName VARCHAR(45), age INT, PRIMARY KEY (id))"), + DROP("DROP TABLE IF EXISTS users CASCADE"), + SELECT("SELECT * FROM users"), + SELECT_USER("SELECT * FROM users WHERE name = ? AND lastName = ? AND age = ?"), + SELECT_BY_ID("SELECT * FROM users WHERE id = ?"), + INSERT("INSERT INTO users (name, lastName, age) VALUES (?, ?, ?)"), + UPDATE_USER("UPDATE users SET name = ?, lastName = ?, age = ? WHERE id = ?"), + DELETE("DELETE FROM users WHERE id = ?"), + TRUNCATE("TRUNCATE TABLE users"); + + String query; + + SqlQuery(String query) { + this.query = query; + } + + @Override + public String toString() { + return query; + } +} \ No newline at end of file diff --git a/src/main/java/jm/task/core/jdbc/dao/UserDao.java b/src/main/java/jm/task/core/jdbc/dao/UserDao.java index 27069baf..bfbac1f7 100644 --- a/src/main/java/jm/task/core/jdbc/dao/UserDao.java +++ b/src/main/java/jm/task/core/jdbc/dao/UserDao.java @@ -2,18 +2,21 @@ import jm.task.core.jdbc.model.User; +import java.sql.SQLException; import java.util.List; public interface UserDao { - void createUsersTable(); + void createUsersTable() throws SQLException; - void dropUsersTable(); + void dropUsersTable() throws SQLException; - void saveUser(String name, String lastName, byte age); + void saveUser(String name, String lastName, byte age) throws SQLException; - void removeUserById(long id); + void removeUserById(long id) throws SQLException; + + void updateUser(long id, String name, String lastName, byte age); List getAllUsers(); - void cleanUsersTable(); + void cleanUsersTable() throws SQLException; } diff --git a/src/main/java/jm/task/core/jdbc/dao/UserDaoHibernateImpl.java b/src/main/java/jm/task/core/jdbc/dao/UserDaoHibernateImpl.java index dc2d0636..79dc240d 100644 --- a/src/main/java/jm/task/core/jdbc/dao/UserDaoHibernateImpl.java +++ b/src/main/java/jm/task/core/jdbc/dao/UserDaoHibernateImpl.java @@ -1,42 +1,160 @@ package jm.task.core.jdbc.dao; +import jm.task.core.jdbc.SqlQuery; import jm.task.core.jdbc.model.User; - +import jm.task.core.jdbc.util.Util; +import org.hibernate.HibernateException; +import org.hibernate.Session; +import javax.persistence.Query; import java.util.List; public class UserDaoHibernateImpl implements UserDao { + + private static final String CREATE_TABLE = SqlQuery.CREATE.toString(); + private static final String DROP_TABLE = SqlQuery.DROP.toString(); + private static final String TRUNCATE_TABLE = SqlQuery.TRUNCATE.toString(); + private static final String SELECT_ALL = SqlQuery.SELECT.toString(); + private static final String SELECT_USER = SqlQuery.SELECT_USER.toString(); + private static final String SELECT_USER_ID = SqlQuery.SELECT_BY_ID.toString(); + private static final String INSERT_USER = SqlQuery.INSERT.toString(); + private static final String UPDATE_USER = SqlQuery.UPDATE_USER.toString(); + private static final String DELETE_USER = SqlQuery.DELETE.toString(); public UserDaoHibernateImpl() { } - - @Override public void createUsersTable() { - + Session session = Util.getSessionFactory().openSession(); + try { + if (session != null) { + session.beginTransaction(); + Query query = session.createSQLQuery(CREATE_TABLE); + query.executeUpdate(); + session.getTransaction().commit(); + session.close(); + } + } catch (HibernateException e) { + e.printStackTrace(); + } } @Override public void dropUsersTable() { - + Session session = Util.getSessionFactory().openSession(); + try { + if (session != null) { + session.beginTransaction(); + Query query = session.createSQLQuery(DROP_TABLE); + query.executeUpdate(); + session.getTransaction().commit(); + session.close(); + } + } catch (HibernateException e) { + e.printStackTrace(); + } } @Override public void saveUser(String name, String lastName, byte age) { - + Session session = Util.getSessionFactory().openSession(); + try { + if (session != null) { + Query select = session.createSQLQuery(SELECT_USER); + select.setParameter(1, name) + .setParameter(2, lastName) + .setParameter(3, age); + if (((org.hibernate.query.Query)select).list().isEmpty()) { + session.beginTransaction(); + Query query = session.createSQLQuery(INSERT_USER); + query.setParameter(1, name) + .setParameter(2, lastName) + .setParameter(3, age); + query.executeUpdate(); + session.getTransaction().commit(); + System.out.printf("\nПользователь %s %s успешно добавлен.", lastName, name); + } else { + System.err.println("\nТакой пользователь уже существует."); + } + session.close(); + } + } catch (HibernateException e) { + e.printStackTrace(); + } } @Override public void removeUserById(long id) { + Session session = Util.getSessionFactory().openSession(); + try { + if (session != null) { + session.beginTransaction(); + Query query = session.createSQLQuery(DELETE_USER); + query.setParameter(1, id); + query.executeUpdate(); + session.getTransaction().commit(); + session.close(); + } + } catch (HibernateException e) { + e.printStackTrace(); + } + } + @Override + public void updateUser(long id, String name, String lastName, byte age) { + Session session = Util.getSessionFactory().openSession(); + try { + if (session != null) { + Query select = session.createSQLQuery(SELECT_USER_ID); + select.setParameter(1, id); + if (((org.hibernate.query.Query)select).list().isEmpty()) { + session.beginTransaction(); + Query query = session.createSQLQuery(UPDATE_USER); + query.setParameter(1, name) + .setParameter(2, lastName) + .setParameter(3, age); + query.executeUpdate(); + session.getTransaction().commit(); + System.out.println("Данные успешно изменены."); + } else { + System.out.println("В процессе изменения данных произошла ошибка."); + } + } + } catch (Exception e) { + e.printStackTrace(); + } } @Override public List getAllUsers() { - return null; + List users = null; + Session session = Util.getSessionFactory().openSession(); + try { + if (session != null) { + session.beginTransaction(); + users = session.createNativeQuery(SELECT_ALL, User.class).list(); + session.getTransaction().commit(); + session.close(); + } + } catch (HibernateException e) { + e.printStackTrace(); + } + return users; } @Override public void cleanUsersTable() { + Session session = Util.getSessionFactory().openSession(); + try { + if (session != null) { + session.beginTransaction(); + Query query = session.createSQLQuery(TRUNCATE_TABLE); + query.executeUpdate(); + session.getTransaction().commit(); + session.close(); + } + } catch (HibernateException e) { + e.printStackTrace(); + } } } diff --git a/src/main/java/jm/task/core/jdbc/dao/UserDaoJDBCImpl.java b/src/main/java/jm/task/core/jdbc/dao/UserDaoJDBCImpl.java index a6c6c359..d46e79e6 100644 --- a/src/main/java/jm/task/core/jdbc/dao/UserDaoJDBCImpl.java +++ b/src/main/java/jm/task/core/jdbc/dao/UserDaoJDBCImpl.java @@ -1,35 +1,177 @@ package jm.task.core.jdbc.dao; +import jm.task.core.jdbc.SqlQuery; import jm.task.core.jdbc.model.User; - +import jm.task.core.jdbc.util.Util; +import java.sql.*; +import java.util.ArrayList; import java.util.List; public class UserDaoJDBCImpl implements UserDao { - public UserDaoJDBCImpl() { + private static String CREATE_TABLE = SqlQuery.CREATE.toString(); + private static String DROP_TABLE = SqlQuery.DROP.toString(); + private static String TRUNCATE_TABLE = SqlQuery.TRUNCATE.toString(); + private static String SELECT_ALL = SqlQuery.SELECT.toString(); + private static String SELECT_USER = SqlQuery.SELECT_USER.toString(); + private static String SELECT_USER_ID = SqlQuery.SELECT_BY_ID.toString(); + private static String INSERT_USER = SqlQuery.INSERT.toString(); + private static String UPDATE_USER = SqlQuery.UPDATE_USER.toString(); + private static String DELETE_USER = SqlQuery.DELETE.toString(); + + public UserDaoJDBCImpl() { } + @Override public void createUsersTable() { - + Connection connection = Util.connect(); + try (Statement statement = connection.createStatement()) { + statement.executeUpdate(CREATE_TABLE); + connection.close(); + } catch (SQLException e) { + e.getSQLState(); + } } + @Override public void dropUsersTable() { - + Connection connection = Util.connect(); + try (Statement statement = connection.createStatement()) { + statement.execute(DROP_TABLE); + connection.close(); + } catch (SQLException e) { + e.getSQLState(); + } } + @Override public void saveUser(String name, String lastName, byte age) { - + Connection connection = Util.connect(); + PreparedStatement pstm = null; + try { + pstm = connection.prepareStatement(SELECT_USER); + pstm.setString(1, name); + pstm.setString(2, lastName); + pstm.setByte(3, age); + ResultSet result = pstm.executeQuery(); + if (result.next()) { + System.err.print("\nТакой пользователь уже существует."); + pstm.close(); + } else { + pstm = connection.prepareStatement(INSERT_USER); + pstm.setString(1, name); + pstm.setString(2, lastName); + pstm.setByte(3, age); + int i = pstm.executeUpdate(); + if (i > 0) { + System.out.printf("\nПользователь %s %s добавлен в таблицу.\n", lastName, name); + } else { + System.err.println("\nНе удалось добавить пользователя."); + } + pstm.close(); + } + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } } + @Override public void removeUserById(long id) { + Connection connection = Util.connect(); + PreparedStatement pstm = null; + try { + pstm = connection.prepareStatement(SELECT_USER_ID); + pstm.setLong(1, id); + ResultSet result = pstm.executeQuery(); + if (result.next()) { + String name = result.getString("name"); + String lastName = result.getString("lastName"); + pstm = connection.prepareStatement(DELETE_USER); + pstm.setLong(1, id); + int i = pstm.executeUpdate(); + String answer = i > 0 ? String.format("\nПользователь %s %s успешно удален\n", lastName, name) + : "Пользователя с таким ID не существует."; + System.out.println(answer); + } else { + System.out.println("Ошибка соединения"); + } + pstm.close(); + connection.close(); + } catch (SQLException e) { + e.getSQLState(); + } + } + @Override + public void updateUser(long id, String name, String lastName, byte age) { + Connection connection = Util.connect(); + PreparedStatement pstm = null; + try { + connection.setAutoCommit(false); + pstm = connection.prepareStatement(SELECT_USER_ID); + pstm.setLong(1, id); + ResultSet response = pstm.executeQuery(); + if (response.next()) { + String oldUserName = response.getString("name"); + String oldUserLastName = response.getString("lastname"); + pstm = connection.prepareStatement(UPDATE_USER); + pstm.setString(1, name); + pstm.setString(2, lastName); + pstm.setByte(3, age); + pstm.setLong(4, id); + int i = pstm.executeUpdate(); + connection.commit(); + String answer = i > 0 ? String.format("Данные пользователя %s %s успешно изменены." + + "\nТекущие данные пользователя с id %d:\nФамилия: %s Имя: %s, возраст: %d.\n", + oldUserLastName, oldUserName, id, lastName, name, age) + : "\nНе удалось обновить данные пользователя."; + System.out.println(answer); + connection.close(); + } else { + System.out.println("Ошибка соединения"); + } + } catch (SQLException e) { + try { + if (connection != null) { + System.err.print("Выполняется откат транзакции"); + connection.rollback(); + } + } catch (SQLException throwables) { + e.printStackTrace(); + } + } } + @Override public List getAllUsers() { - return null; + List all = new ArrayList<>(); + Connection connection = Util.connect(); + try (Statement statement = connection.createStatement()) { + ResultSet response = statement.executeQuery(SELECT_ALL); + while (response.next()) { + User user = new User(); + user.setId(response.getLong("id")); + user.setName(response.getString("name")); + user.setLastName(response.getString("lastName")); + user.setAge(response.getByte("age")); + all.add(user); + } + connection.close(); + } catch (SQLException e) { + e.getSQLState(); + } + return all; } + @Override public void cleanUsersTable() { - + Connection connection = Util.connect(); + try (Statement statement = connection.createStatement()) { + statement.executeUpdate(TRUNCATE_TABLE); + connection.close(); + } catch (SQLException e) { + e.getSQLState(); + } } } diff --git a/src/main/java/jm/task/core/jdbc/model/User.java b/src/main/java/jm/task/core/jdbc/model/User.java index 21b054f6..1125a4ac 100644 --- a/src/main/java/jm/task/core/jdbc/model/User.java +++ b/src/main/java/jm/task/core/jdbc/model/User.java @@ -1,21 +1,18 @@ package jm.task.core.jdbc.model; -import javax.persistence.Column; -import javax.persistence.Id; -import javax.persistence.Table; - +import javax.persistence.*; +import java.io.Serializable; +@Entity @Table -public class User { +public class User implements Serializable { + @Id private Long id; - @Column private String name; - @Column private String lastName; - @Column private Byte age; public User() { @@ -59,4 +56,11 @@ public Byte getAge() { public void setAge(Byte age) { this.age = age; } + + @Override + public String toString() { + return String.format("%-1s%-5d%-10s%-17s %d\n" + + "----:-------:-----------------:--------:", + "", this.id, this.name, this.lastName, this.age); + } } diff --git a/src/main/java/jm/task/core/jdbc/service/UserService.java b/src/main/java/jm/task/core/jdbc/service/UserService.java index 80542c68..733778f2 100644 --- a/src/main/java/jm/task/core/jdbc/service/UserService.java +++ b/src/main/java/jm/task/core/jdbc/service/UserService.java @@ -2,18 +2,21 @@ import jm.task.core.jdbc.model.User; +import java.sql.SQLException; import java.util.List; public interface UserService { - void createUsersTable(); + void createUsersTable() throws SQLException; - void dropUsersTable(); + void dropUsersTable() throws SQLException; - void saveUser(String name, String lastName, byte age); + void saveUser(String name, String lastName, byte age) throws SQLException; - void removeUserById(long id); + void removeUserById(long id) throws SQLException; List getAllUsers(); - void cleanUsersTable(); + void cleanUsersTable() throws SQLException; + + void updateUser(long id, String name, String lastName, byte age); } diff --git a/src/main/java/jm/task/core/jdbc/service/UserServiceHibernateImpl.java b/src/main/java/jm/task/core/jdbc/service/UserServiceHibernateImpl.java new file mode 100644 index 00000000..37635f6b --- /dev/null +++ b/src/main/java/jm/task/core/jdbc/service/UserServiceHibernateImpl.java @@ -0,0 +1,46 @@ +package jm.task.core.jdbc.service; + +import jm.task.core.jdbc.dao.*; +import jm.task.core.jdbc.model.User; + +import java.sql.SQLException; +import java.util.List; + +public class UserServiceHibernateImpl implements UserService { + private final UserDao hQuery = new UserDaoHibernateImpl(); + + @Override + public void createUsersTable() throws SQLException { + hQuery.createUsersTable(); + } + + @Override + public void dropUsersTable() throws SQLException { + hQuery.dropUsersTable(); + } + + @Override + public void saveUser(String name, String lastName, byte age) throws SQLException { + hQuery.saveUser(name, lastName, age); + } + + @Override + public void removeUserById(long id) throws SQLException { + hQuery.removeUserById(id); + } + + @Override + public void updateUser(long id, String name, String lastName, byte age) { + hQuery.updateUser(id, name, lastName, age); + } + + @Override + public List getAllUsers() { + return hQuery.getAllUsers(); + } + + @Override + public void cleanUsersTable() throws SQLException { + hQuery.cleanUsersTable(); + } +} diff --git a/src/main/java/jm/task/core/jdbc/service/UserServiceImpl.java b/src/main/java/jm/task/core/jdbc/service/UserServiceImpl.java index b05bd191..078d3c5a 100644 --- a/src/main/java/jm/task/core/jdbc/service/UserServiceImpl.java +++ b/src/main/java/jm/task/core/jdbc/service/UserServiceImpl.java @@ -1,31 +1,53 @@ package jm.task.core.jdbc.service; +import jm.task.core.jdbc.dao.*; import jm.task.core.jdbc.model.User; +import java.sql.SQLException; import java.util.List; public class UserServiceImpl implements UserService { - public void createUsersTable() { + private final UserDao query = new UserDaoJDBCImpl(); + private final UserDao hQuery = new UserDaoHibernateImpl(); + @Override + public void createUsersTable() throws SQLException { + query.createUsersTable(); + hQuery.createUsersTable(); } - public void dropUsersTable() { - + @Override + public void dropUsersTable() throws SQLException { + query.dropUsersTable(); + hQuery.dropUsersTable(); } - public void saveUser(String name, String lastName, byte age) { - + @Override + public void saveUser(String name, String lastName, byte age) throws SQLException { + query.saveUser(name, lastName, age); + hQuery.saveUser(name, lastName, age); } - public void removeUserById(long id) { + @Override + public void removeUserById(long id) throws SQLException { + query.removeUserById(id); + hQuery.removeUserById(id); + } + @Override + public void updateUser(long id, String name, String lastName, byte age) { + query.updateUser(id, name, lastName, age); + hQuery.updateUser(id, name, lastName, age); } + @Override public List getAllUsers() { - return null; + return hQuery.getAllUsers(); } - public void cleanUsersTable() { - + @Override + public void cleanUsersTable() throws SQLException { + query.cleanUsersTable(); + hQuery.cleanUsersTable(); } } diff --git a/src/main/java/jm/task/core/jdbc/util/Util.java b/src/main/java/jm/task/core/jdbc/util/Util.java index 59e462ba..601e271f 100644 --- a/src/main/java/jm/task/core/jdbc/util/Util.java +++ b/src/main/java/jm/task/core/jdbc/util/Util.java @@ -1,5 +1,86 @@ package jm.task.core.jdbc.util; +import jm.task.core.jdbc.model.User; +import org.hibernate.SessionFactory; +import org.hibernate.boot.Metadata; +import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.cfg.Environment; + +import java.io.FileInputStream; +import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + + public class Util { - // реализуйте настройку соеденения с БД -} + private static SessionFactory sessionFactory; + private static Connection connection; + private static String user; + public static Connection connect() { + Properties property = new Properties(); + try (FileInputStream input = new FileInputStream("src/main/Resources/mysql_config")) { + property.load(input); + user = property.getProperty("db.login"); + String password = property.getProperty("db.password"); + + Class.forName("com.mysql.cj.jdbc.Driver"); + StringBuilder url = new StringBuilder(); + url.append("jdbc:") + .append(property.getProperty("db.driver")) + .append(property.getProperty("db.host")) + .append(property.getProperty("db.port")) + .append(property.getProperty("db.base")); + connection = DriverManager.getConnection(url.toString(), user, password); + } catch (SQLException | ClassNotFoundException | IOException e) { + e.printStackTrace(); + } + return connection; + } + + public static void printConnectionInfo(Connection connection) throws SQLException { + System.out.println(new Date()); + System.out.printf("Текущий ползователь: %s\n", user); + System.out.printf("Data base: %s\n", connection.getMetaData().getDatabaseProductName()); + System.out.printf("version: %s\n", connection.getMetaData().getDatabaseProductVersion()); + System.out.printf("Driver: %s\n", connection.getMetaData().getDriverName()); + System.out.printf("Autocommit: %s\n", connection.getAutoCommit()); + System.out.println("------------------------------------------------"); + } + + public static SessionFactory getSessionFactory() { + if (sessionFactory == null) { + try { + StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder(); + + Map settings = new HashMap<>(); + settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver"); + settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL8Dialect"); + settings.put(Environment.URL, "jdbc:mysql://localhost:3306/jm-base-module-one"); + settings.put(Environment.USER, "jm-admin"); + settings.put(Environment.PASS, "!Jmc0urs3"); + settings.put(Environment.ORDER_UPDATES, true); + settings.put(Environment.HBM2DDL_AUTO, "validate"); + settings.put(Environment.SHOW_SQL, true); + + registryBuilder.applySettings(settings); + StandardServiceRegistry registry = registryBuilder.build(); + + MetadataSources sources = new MetadataSources(registry); + sources.addAnnotatedClass(User.class); + Metadata metadata = sources.getMetadataBuilder().build(); + + sessionFactory = metadata.getSessionFactoryBuilder().build(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return sessionFactory; + } +} \ No newline at end of file