diff --git a/pom.xml b/pom.xml
index 0605a4c0..57065979 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,8 +13,8 @@
org.apache.maven.plugins
maven-compiler-plugin
- 7
- 7
+ 15
+ 15
@@ -33,7 +33,13 @@
mysql
mysql-connector-java
- 5.1.38
+ 8.0.26
+
+
+
+ org.postgresql
+ postgresql
+ 42.2.23
@@ -45,7 +51,7 @@
org.hibernate
hibernate-core
- 4.3.10.Final
+ 5.5.8.Final
diff --git a/src/main/java/jm/task/core/jdbc/Main.java b/src/main/java/jm/task/core/jdbc/Main.java
index f6e43b0f..ed2c81ea 100644
--- a/src/main/java/jm/task/core/jdbc/Main.java
+++ b/src/main/java/jm/task/core/jdbc/Main.java
@@ -1,7 +1,15 @@
package jm.task.core.jdbc;
+import jm.task.core.jdbc.service.UserService;
+import jm.task.core.jdbc.service.UserServiceImpl;
+import java.sql.SQLException;
+
public class Main {
- public static void main(String[] args) {
+ public static void main(String[] args) throws SQLException {
// реализуйте алгоритм здесь
+ UserService userService = new UserServiceImpl();
+
+// userService.createUsersTable();
+ userService.dropUsersTable();
}
}
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..59c1e124 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,124 @@
package jm.task.core.jdbc.dao;
import jm.task.core.jdbc.model.User;
-
+import jm.task.core.jdbc.util.Util;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
import java.util.List;
public class UserDaoHibernateImpl implements UserDao {
- public UserDaoHibernateImpl() {
- }
+ private SessionFactory sessionFactory;
+ public UserDaoHibernateImpl() {
+ sessionFactory = Util.getSessionFactory();
+ }
@Override
public void createUsersTable() {
-
+ Session session = sessionFactory.openSession();
+ Transaction transaction = null;
+ try {
+ transaction = session.beginTransaction();
+ session.createSQLQuery(UserDaoJDBCImpl.CREATE_TABLE).executeUpdate();
+ transaction.commit();
+ } catch (RuntimeException e) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ } finally {
+ session.close();
+ }
}
@Override
public void dropUsersTable() {
-
+ Session session = sessionFactory.openSession();
+ Transaction transaction = null;
+ try {
+ transaction = session.beginTransaction();
+ session.createSQLQuery(UserDaoJDBCImpl.DROP_TABLE).executeUpdate();
+ transaction.commit();
+ } catch (RuntimeException e) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ } finally {
+ session.close();
+ }
}
@Override
public void saveUser(String name, String lastName, byte age) {
-
+ Session session = sessionFactory.openSession();
+ Transaction transaction = null;
+ try {
+ transaction = session.beginTransaction();
+ session.save(new User(name, lastName, age));
+ transaction.commit();
+ } catch (RuntimeException e) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ } finally {
+ session.close();
+ }
}
@Override
public void removeUserById(long id) {
-
+ Session session = sessionFactory.openSession();
+ Transaction transaction = null;
+ try {
+ transaction = session.beginTransaction();
+ User user = session.get(User.class, id);
+ session.delete(user);
+ transaction.commit();
+ } catch (RuntimeException e) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ } finally {
+ session.close();
+ }
}
@Override
public List getAllUsers() {
- return null;
+ Session session = sessionFactory.openSession();
+ Transaction transaction = null;
+ List users;
+ try {
+ transaction = session.beginTransaction();
+ String hql = "FROM User";
+ users = session.createQuery(hql).list();
+ return users;
+ } catch (RuntimeException e) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ throw e;
+ } finally {
+ session.close();
+ }
}
@Override
public void cleanUsersTable() {
-
+ Session session = sessionFactory.openSession();
+ Transaction transaction = null;
+ try {
+ transaction = session.beginTransaction();
+ String hql = "DELETE FROM User";
+ session.createQuery(hql).executeUpdate();
+ transaction.commit();
+ } catch (RuntimeException e) {
+ if (transaction != null) {
+ transaction.rollback();
+ }
+ } finally {
+ session.close();
+ }
}
}
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..77d4ec46 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,107 @@
package jm.task.core.jdbc.dao;
import jm.task.core.jdbc.model.User;
-
+import jm.task.core.jdbc.util.Util;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
import java.util.List;
public class UserDaoJDBCImpl implements UserDao {
- public UserDaoJDBCImpl() {
+ public static final String CREATE_TABLE = "CREATE TABLE users" +
+ "(" +
+ "id BIGINT PRIMARY KEY AUTO_INCREMENT, " +
+ "name VARCHAR(64), " +
+ "last_name VARCHAR(64), " +
+ "age TINYINT" +
+ ");";
+
+ public static final String DROP_TABLE = "DROP TABLE users;";
+
+ private static final String INSERT_INTO = "INSERT users(name, last_name, age) " +
+ "VALUES (?, ?, ?);";
+
+ private static final String REMOVE_BY_ID = "DELETE FROM users " +
+ "WHERE id = ?;";
+
+ private static final String GET_ALL = "SELECT * FROM users";
+
+ private static final String CLEAR_TABLE = "DELETE FROM users";
+
+ public UserDaoJDBCImpl() {
}
public void createUsersTable() {
-
+ try (Connection connection = Util.open();
+ PreparedStatement preparedStatement = connection.prepareStatement(CREATE_TABLE)) {
+ preparedStatement.execute();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
public void dropUsersTable() {
+ try (Connection connection = Util.open();
+ PreparedStatement preparedStatement = connection.prepareStatement(DROP_TABLE)) {
+ preparedStatement.execute();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
public void saveUser(String name, String lastName, byte age) {
-
+ try (Connection connection = Util.open();
+ PreparedStatement preparedStatement = connection.prepareStatement(INSERT_INTO)) {
+ preparedStatement.setString(1, name);
+ preparedStatement.setString(2, lastName);
+ preparedStatement.setByte(3, age);
+ preparedStatement.execute();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
public void removeUserById(long id) {
-
+ try (Connection connection = Util.open();
+ PreparedStatement preparedStatement = connection.prepareStatement(REMOVE_BY_ID)) {
+ preparedStatement.setLong(1, id);
+ preparedStatement.execute();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
public List getAllUsers() {
- return null;
+ List users = new ArrayList<>();
+ try (Connection connection = Util.open();
+ PreparedStatement preparedStatement = connection.prepareStatement(GET_ALL)) {
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ users.add(buildUser(resultSet));
+ }
+ return users;
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return users;
}
- public void cleanUsersTable() {
+ private User buildUser(ResultSet resultSet) throws SQLException {
+ return new User(resultSet.getString("name"),
+ resultSet.getString("last_name"),
+ resultSet.getByte("age"));
+ }
+ public void cleanUsersTable() {
+ try (Connection connection = Util.open();
+ PreparedStatement preparedStatement = connection.prepareStatement(CLEAR_TABLE)) {
+ preparedStatement.execute();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
}
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..dc59609c 100644
--- a/src/main/java/jm/task/core/jdbc/model/User.java
+++ b/src/main/java/jm/task/core/jdbc/model/User.java
@@ -1,25 +1,24 @@
package jm.task.core.jdbc.model;
-import javax.persistence.Column;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
-@Table
+@Entity
+@Table(name = "users")
public class User {
@Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
- @Column
+ @Column(name = "name")
private String name;
- @Column
+ @Column(name = "last_name")
private String lastName;
- @Column
+ @Column(name = "age")
private Byte age;
public User() {
-
}
public User(String name, String lastName, Byte age) {
@@ -28,6 +27,16 @@ public User(String name, String lastName, Byte age) {
this.age = age;
}
+ @Override
+ public String toString() {
+ return "User{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", lastName='" + lastName + '\'' +
+ ", age=" + age +
+ '}';
+ }
+
public Long getId() {
return id;
}
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..bd2b5b58 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,46 @@
package jm.task.core.jdbc.service;
+import jm.task.core.jdbc.dao.UserDao;
+import jm.task.core.jdbc.dao.UserDaoHibernateImpl;
+import jm.task.core.jdbc.dao.UserDaoJDBCImpl;
import jm.task.core.jdbc.model.User;
+import java.sql.SQLException;
import java.util.List;
public class UserServiceImpl implements UserService {
- public void createUsersTable() {
+ private UserDao userDaoJDBC = new UserDaoJDBCImpl();
+ private UserDao userDaoHibernate = new UserDaoHibernateImpl();
+
+ public void createUsersTable() {
+// userDaoJDBC.createUsersTable();
+ userDaoHibernate.createUsersTable();
}
public void dropUsersTable() {
+// userDaoJDBC.dropUsersTable();
+ userDaoHibernate.dropUsersTable();
}
public void saveUser(String name, String lastName, byte age) {
-
+// userDaoJDBC.saveUser(name, lastName, age);
+ userDaoHibernate.saveUser(name, lastName, age);
}
public void removeUserById(long id) {
-
+// userDaoJDBC.removeUserById(id);
+ userDaoHibernate.removeUserById(id);
}
public List getAllUsers() {
- return null;
+// return userDaoJDBC.getAllUsers();
+ return userDaoHibernate.getAllUsers();
}
public void cleanUsersTable() {
-
+// userDaoJDBC.cleanUsersTable();
+ userDaoHibernate.cleanUsersTable();
}
}
diff --git a/src/main/java/jm/task/core/jdbc/util/PropertiesUtil.java b/src/main/java/jm/task/core/jdbc/util/PropertiesUtil.java
new file mode 100644
index 00000000..a6d02472
--- /dev/null
+++ b/src/main/java/jm/task/core/jdbc/util/PropertiesUtil.java
@@ -0,0 +1,30 @@
+package jm.task.core.jdbc.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+public final class PropertiesUtil {
+
+ private static final Properties PROPERTIES = new Properties();
+
+ static {
+ loadProperties();
+ }
+
+ private PropertiesUtil() {
+ }
+
+ public static String get(String key) {
+ return PROPERTIES.getProperty(key);
+ }
+
+ private static void loadProperties() {
+ try (InputStream inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream("application.properties")) {
+ PROPERTIES.load(inputStream);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
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..f9b24a76 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,67 @@
package jm.task.core.jdbc.util;
-public class Util {
- // реализуйте настройку соеденения с БД
+import jm.task.core.jdbc.model.User;
+import org.hibernate.HibernateException;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+public final class Util {
+
+
+// Реализация без проперти
+// private static final String URL = "jdbc:mysql://localhost:3306/test";
+// private static final String USERNAME = "root";
+// private static final String PASSWORD = "22121995";
+ private static SessionFactory sessionFactory;
+ private static final String URL_KEY = "db.url";
+ private static final String USERNAME_KEY = "db.username";
+ private static final String PASSWORD_KEY = "db.password";
+ private static final String SHOW_SQL = "show_sql";
+ private static final String FORMAT_SQL = "format_sql";
+// private static final String HBM2DDL = "hibernate.hbm2ddl.auto";
+
+ private Util() {
+ }
+// Реализация без проперти
+// public static Connection open() {
+// try {
+// return DriverManager.getConnection(URL, USERNAME, PASSWORD);
+// } catch (SQLException e) {
+// throw new RuntimeException(e);
+// }
+// }
+
+ public static Connection open() {
+ try {
+ return DriverManager.getConnection(
+ PropertiesUtil.get(URL_KEY),
+ PropertiesUtil.get(USERNAME_KEY),
+ PropertiesUtil.get(PASSWORD_KEY)
+ );
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static SessionFactory getSessionFactory() {
+ if (sessionFactory == null) {
+ try {
+ Configuration configuration = new Configuration();
+ configuration.setProperty("hibernate.connection.url", PropertiesUtil.get(URL_KEY))
+ .setProperty("hibernate.connection.username", PropertiesUtil.get(USERNAME_KEY))
+ .setProperty("hibernate.connection.password", PropertiesUtil.get(PASSWORD_KEY))
+ .setProperty("show_sql", PropertiesUtil.get(SHOW_SQL))
+ .setProperty("format_sql", PropertiesUtil.get(FORMAT_SQL))
+ .addAnnotatedClass(User.class);
+ sessionFactory = configuration.buildSessionFactory();
+ } catch (HibernateException e) {
+ System.out.println("Исключение " + e);
+ e.printStackTrace();
+ }
+ }
+ return sessionFactory;
+ }
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 00000000..754495f7
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,8 @@
+db.url=jdbc:mysql://localhost:3306/test
+db.username=root
+db.password=22121995
+#hibernate.connection.url=jdbc:mysql://localhost:3306/test
+#hibernate.connection.username=root
+#hibernate.connection.password=22121995
+show_sql=true
+format_sql=true
diff --git a/src/test/java/UserServiceTest.java b/src/test/java/UserServiceTest.java
index c4b9dd0a..d46e9877 100644
--- a/src/test/java/UserServiceTest.java
+++ b/src/test/java/UserServiceTest.java
@@ -18,6 +18,7 @@ public class UserServiceTest {
public void dropUsersTable() {
try {
userService.dropUsersTable();
+ userService.createUsersTable();
userService.dropUsersTable();
} catch (Exception e) {
Assert.fail("При тестировании удаления таблицы произошло исключение\n" + e);
diff --git a/target/classes/jm/task/core/jdbc/Main.class b/target/classes/jm/task/core/jdbc/Main.class
new file mode 100644
index 00000000..138a64c7
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/Main.class differ
diff --git a/target/classes/jm/task/core/jdbc/dao/UserDao.class b/target/classes/jm/task/core/jdbc/dao/UserDao.class
new file mode 100644
index 00000000..de6ab305
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/dao/UserDao.class differ
diff --git a/target/classes/jm/task/core/jdbc/dao/UserDaoHibernateImpl.class b/target/classes/jm/task/core/jdbc/dao/UserDaoHibernateImpl.class
new file mode 100644
index 00000000..70789d0a
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/dao/UserDaoHibernateImpl.class differ
diff --git a/target/classes/jm/task/core/jdbc/dao/UserDaoJDBCImpl.class b/target/classes/jm/task/core/jdbc/dao/UserDaoJDBCImpl.class
new file mode 100644
index 00000000..6d5e734c
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/dao/UserDaoJDBCImpl.class differ
diff --git a/target/classes/jm/task/core/jdbc/model/User.class b/target/classes/jm/task/core/jdbc/model/User.class
new file mode 100644
index 00000000..2c10d6b5
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/model/User.class differ
diff --git a/target/classes/jm/task/core/jdbc/service/UserService.class b/target/classes/jm/task/core/jdbc/service/UserService.class
new file mode 100644
index 00000000..feb698b2
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/service/UserService.class differ
diff --git a/target/classes/jm/task/core/jdbc/service/UserServiceImpl.class b/target/classes/jm/task/core/jdbc/service/UserServiceImpl.class
new file mode 100644
index 00000000..fd2f8c00
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/service/UserServiceImpl.class differ
diff --git a/target/classes/jm/task/core/jdbc/util/PropertiesUtil.class b/target/classes/jm/task/core/jdbc/util/PropertiesUtil.class
new file mode 100644
index 00000000..0985ed92
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/util/PropertiesUtil.class differ
diff --git a/target/classes/jm/task/core/jdbc/util/Util.class b/target/classes/jm/task/core/jdbc/util/Util.class
new file mode 100644
index 00000000..680b0d9c
Binary files /dev/null and b/target/classes/jm/task/core/jdbc/util/Util.class differ