diff --git a/pom.xml b/pom.xml index 0605a4c0..b90275b0 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ mysql mysql-connector-java - 5.1.38 + 8.0.25 @@ -49,4 +49,4 @@ - \ No newline at end of file + 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..31375052 100644 --- a/src/main/java/jm/task/core/jdbc/dao/UserDaoHibernateImpl.java +++ b/src/main/java/jm/task/core/jdbc/dao/UserDaoHibernateImpl.java @@ -1,6 +1,11 @@ package jm.task.core.jdbc.dao; import jm.task.core.jdbc.model.User; +import jm.task.core.jdbc.util.Util; +import org.hibernate.Query; +import org.hibernate.SQLQuery; +import org.hibernate.Session; +import org.hibernate.Transaction; import java.util.List; @@ -12,31 +17,64 @@ public UserDaoHibernateImpl() { @Override public void createUsersTable() { - + Session session = Util.getSessionFactory().openSession();//открыли сессию + Transaction tx1 = session.beginTransaction(); + SQLQuery query = session.createSQLQuery("CREATE TABLE IF NOT EXISTS `newBD`.`users` " + + "(`id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR(45) NOT NULL," + + "`lastName` VARCHAR(45) NOT NULL,`age` INT NOT NULL," + + " PRIMARY KEY (`id`), UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE);").addEntity(User.class); + query.executeUpdate(); + tx1.commit(); + session.close(); } @Override public void dropUsersTable() { - + Session session = Util.getSessionFactory().openSession();//открыли сессию + Transaction tx1 = session.beginTransaction(); + SQLQuery query = session.createSQLQuery("DROP TABLE if EXISTS users").addEntity(User.class); + query.executeUpdate(); + tx1.commit(); + session.close(); } @Override public void saveUser(String name, String lastName, byte age) { - + User user = new User(name,lastName,age); + Session session = Util.getSessionFactory().openSession();//открыли сессию + Transaction tx1 = session.beginTransaction();//получил транзакцию + session.save(user); + tx1.commit(); + session.close(); } @Override public void removeUserById(long id) { - + Session session = Util.getSessionFactory().openSession();//открыли сессию + Transaction tx1 = session.beginTransaction();//получил транзакцию + Query query = session.createQuery("DELETE User WHERE id = :id"); + query.setParameter("id", id).executeUpdate(); + tx1.commit(); + session.close(); } @Override public List getAllUsers() { - return null; + Session session = Util.getSessionFactory().openSession();//открыли сессию + Transaction tx1 = session.beginTransaction();//получил транзакцию + Query query = session.createQuery("FROM User"); + List users = query.list(); + tx1.commit(); + session.close(); + return users; } @Override public void cleanUsersTable() { - + Session session = Util.getSessionFactory().openSession();//открыли сессию + Transaction tx1 = session.beginTransaction();//получил транзакцию + session.createQuery("DELETE FROM User").executeUpdate(); + tx1.commit(); + 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..a66f3878 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,137 @@ package jm.task.core.jdbc.dao; 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 final Connection connection; + public UserDaoJDBCImpl() { + connection = Util.util(); } public void createUsersTable() { - + try(Statement statement = connection.createStatement()) { + connection.setAutoCommit(false); + statement.execute("CREATE TABLE IF NOT EXISTS `newBD`.`users` " + + "(`id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR(45) NOT NULL," + + "`lastName` VARCHAR(45) NOT NULL,`age` INT NOT NULL," + + " PRIMARY KEY (`id`), UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE);"); + connection.commit(); + } catch (SQLException throwables) { + if (connection != null) { + try { + connection.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + throwables.printStackTrace(); + } } public void dropUsersTable() { - + try(Statement statement = connection.createStatement()) { + connection.setAutoCommit(false); + statement.execute("DROP TABLE if EXISTS users"); + connection.commit(); + } catch (SQLException throwables) { + if (connection != null) { + try { + connection.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + throwables.printStackTrace(); + } } public void saveUser(String name, String lastName, byte age) { - + try (PreparedStatement preparedStatement = + connection.prepareStatement("INSERT INTO users (name, lastName, age) VALUES (?, ?, ?)")){ + connection.setAutoCommit(false); + preparedStatement.setString(1, name); + preparedStatement.setString(2, lastName); + preparedStatement.setInt(3, age); + preparedStatement.execute(); + connection.commit(); + } catch (SQLException throwables) { + if (connection != null) { + try { + connection.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + throwables.printStackTrace(); + } } public void removeUserById(long id) { + try (PreparedStatement preparedStatement + = connection.prepareStatement("delete from users WHERE EXISTS id = ?")){ + connection.setAutoCommit(false); + preparedStatement.setInt(1, (int) id); + preparedStatement.executeUpdate(); + connection.commit(); + } catch (SQLException throwables) { + if (connection != null) { + try { + connection.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + throwables.printStackTrace(); + } } public List getAllUsers() { - return null; + + List users = new ArrayList<>(); + try (PreparedStatement preparedStatement = connection.prepareStatement("select * from users")){ + connection.setAutoCommit(false); + ResultSet resultSet = preparedStatement.executeQuery(); + connection.commit(); + while (resultSet.next()){ + User user = new User(resultSet.getString("name"), + resultSet.getString("lastName"),resultSet.getByte("age")); + user.setId((long) resultSet.getInt("id")); + users.add(user); + } + } catch (SQLException throwables) { + if (connection != null) { + try { + connection.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + throwables.printStackTrace(); + } + return users; } public void cleanUsersTable() { - + try(Statement statement = connection.createStatement()) { + connection.setAutoCommit(false); + statement.execute("delete from users"); + connection.commit(); + } catch (SQLException throwables) { + if (connection != null) { + try { + connection.rollback(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + throwables.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..e0e8e467 100644 --- a/src/main/java/jm/task/core/jdbc/model/User.java +++ b/src/main/java/jm/task/core/jdbc/model/User.java @@ -1,12 +1,12 @@ 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 @@ -59,4 +59,14 @@ public Byte getAge() { public void setAge(Byte age) { this.age = age; } + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", name='" + name + '\'' + + ", lastName='" + lastName + '\'' + + ", age=" + age + + '}'; + } } 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..a073a345 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,36 @@ package jm.task.core.jdbc.service; +import jm.task.core.jdbc.dao.UserDao; +import jm.task.core.jdbc.dao.UserDaoJDBCImpl; import jm.task.core.jdbc.model.User; import java.util.List; public class UserServiceImpl implements UserService { - public void createUsersTable() { + UserDao userDao = new UserDaoJDBCImpl(); + //UserDao userDao = new UserDaoHibernateImpl(); + public void createUsersTable() { + userDao.createUsersTable(); } public void dropUsersTable() { - + userDao.dropUsersTable(); } public void saveUser(String name, String lastName, byte age) { - + userDao.saveUser(name, lastName, age); } public void removeUserById(long id) { - + userDao.removeUserById(id); } public List getAllUsers() { - return null; + return userDao.getAllUsers(); } public void cleanUsersTable() { - + userDao.cleanUsersTable(); } } diff --git a/src/main/java/jm/task/core/jdbc/util/Test.txt b/src/main/java/jm/task/core/jdbc/util/Test.txt new file mode 100644 index 00000000..42cc6a51 --- /dev/null +++ b/src/main/java/jm/task/core/jdbc/util/Test.txt @@ -0,0 +1,5 @@ +Privet +Kak dela +Ok +no good +и снова седая ночь!!! \ No newline at end of file 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..f3559fbd 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,68 @@ package jm.task.core.jdbc.util; +import jm.task.core.jdbc.model.User; +import org.hibernate.SessionFactory; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.cfg.Configuration; +import org.hibernate.cfg.Environment; +import org.hibernate.service.ServiceRegistry; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + public class Util { - // реализуйте настройку соеденения с БД + private static final String URL = "jdbc:mysql://localhost:3306/newBD";//хост такой вот ли нет + private static final String USERNAME = "root"; + private static final String PASSWORD = "root"; + String s = "proba"; + + public static Connection util(){ + Connection connection = null;// реализуйте настройку соеденения с БД + try { + connection =DriverManager.getConnection(URL,USERNAME,PASSWORD); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + return connection; + } + + private static SessionFactory sessionFactory; + + private Util() {} + + public static SessionFactory getSessionFactory() { + if (sessionFactory == null) { + try { + Configuration configuration = new Configuration(); + + Properties settings = new Properties(); + settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver"); + settings.put(Environment.URL, URL); + settings.put(Environment.USER, USERNAME); + settings.put(Environment.PASS, PASSWORD); + settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect"); + + settings.put(Environment.SHOW_SQL, "true"); + + settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread"); + + settings.put(Environment.HBM2DDL_AUTO, ""); + + configuration.setProperties(settings); + configuration.addAnnotatedClass(User.class); + + + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() + .applySettings(configuration.getProperties()).build(); + + sessionFactory = configuration.buildSessionFactory(serviceRegistry); + + } catch (Exception e) { + System.out.println("Исключение!" + e); + } + } + return sessionFactory; + } } diff --git a/src/test/java/UserServiceTest.java b/src/test/java/UserServiceTest.java index c4b9dd0a..9889c0b4 100644 --- a/src/test/java/UserServiceTest.java +++ b/src/test/java/UserServiceTest.java @@ -13,7 +13,6 @@ public class UserServiceTest { private final String testLastName = "Ivanov"; private final byte testAge = 5; - @Test public void dropUsersTable() { try {