diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 00000000..f9a76287 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 00000000..f2f249fd --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,26 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/new_base + $ProjectFileDir$ + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/new_base + $ProjectFileDir$ + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/new_schema111 + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 00000000..fa93ed24 --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 00000000..712ab9d9 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..d5cd6143 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 00000000..797acea5 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 00000000..d934ffd0 --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0605a4c0..5f147085 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ mysql mysql-connector-java - 5.1.38 + 8.0.25 @@ -45,7 +45,7 @@ org.hibernate hibernate-core - 4.3.10.Final + 5.6.1.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..c680745c 100644 --- a/src/main/java/jm/task/core/jdbc/Main.java +++ b/src/main/java/jm/task/core/jdbc/Main.java @@ -1,7 +1,33 @@ package jm.task.core.jdbc; +import jm.task.core.jdbc.dao.UserDaoHibernateImpl; +import jm.task.core.jdbc.dao.UserDaoJDBCImpl; + public class Main { public static void main(String[] args) { - // реализуйте алгоритм здесь + UserDaoHibernateImpl userDaoHibernate = new UserDaoHibernateImpl(); + userDaoHibernate.createUsersTable(); + userDaoHibernate.saveUser("Pikachu", "Raychu", (byte)66); + userDaoHibernate.saveUser("Pik5achu", "Ray5chu", (byte)6); + userDaoHibernate.saveUser("Piktfdtachu", "Ray5chu", (byte)6); + userDaoHibernate.saveUser("Pik5chu", "Ray5chu", (byte)6); + userDaoHibernate.saveUser("Pik5u", "Ray5chu", (byte)6); + userDaoHibernate.saveUser("Pik5achu", "Ry5chu", (byte)6); + userDaoHibernate.saveUser("Pik5hu", "Ray5chu", (byte)6); + userDaoHibernate.cleanUsersTable(); +// userDaoHibernate.removeUserById(1); + userDaoHibernate.getAllUsers(); + +// UserDaoJDBCImpl userDaoJDBC = new UserDaoJDBCImpl(); +// userDaoJDBC.createUsersTable(); +// userDaoJDBC.cleanUsersTable(); +// userDaoJDBC.saveUser("АЛЁШКА", "Й", (byte) 66); +// userDaoJDBC.saveUser("АРКАДИЧ", "ПИКАЧУ", (byte) 13); +// userDaoJDBC.saveUser("АРМАНЫЧ", "DEAD", (byte) 999); +// userDaoJDBC.getAllUsers(); +//// userDaoJDBC.removeUserById(1); +//// userDaoJDBC.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..61115971 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,95 @@ 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 java.util.ArrayList; import java.util.List; -public class UserDaoHibernateImpl implements UserDao { +public class UserDaoHibernateImpl extends Util implements UserDao { + UserDao dao = new UserDaoJDBCImpl(); + public UserDaoHibernateImpl() { } - - @Override public void createUsersTable() { - + dao.createUsersTable(); } - @Override public void dropUsersTable() { - + dao.dropUsersTable(); } @Override public void saveUser(String name, String lastName, byte age) { - + Session session = this.getSessionFactory().getCurrentSession(); + try { + session.beginTransaction(); + session.save(new User(name, lastName, age)); + session.getTransaction().commit(); + } catch (Exception e) { + if (session != null) { + session.getTransaction().rollback(); + } + e.printStackTrace(); + } finally { + session.close(); + } } @Override public void removeUserById(long id) { - + Session session = this.getSessionFactory().getCurrentSession(); + try { + session.beginTransaction(); + session.delete(session.get(User.class, id)); + session.getTransaction().commit(); + } catch (Exception e) { + if (session != null) { + session.getTransaction().rollback(); + } + e.printStackTrace(); + } finally { + session.close(); + } } @Override public List getAllUsers() { - return null; + List list = new ArrayList<>(); + Session session = this.getSessionFactory().getCurrentSession(); + try { + session.beginTransaction(); + list = session.createQuery("from User").getResultList(); + session.getTransaction().commit(); + System.out.println(list); + } catch (Exception e) { + if (session != null) { + session.getTransaction().rollback(); + } + e.printStackTrace(); + } finally { + session.close(); + } + return list; } @Override public void cleanUsersTable() { - + Session session = this.getSessionFactory().getCurrentSession(); + try { + session.beginTransaction(); + session.createQuery("delete User").executeUpdate(); + session.getTransaction().commit(); + } catch (Exception e) { + if (session != null) { + session.getTransaction().rollback(); + } + e.printStackTrace(); + } 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..17e362b0 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,110 @@ 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 class UserDaoJDBCImpl extends Util implements UserDao { public UserDaoJDBCImpl() { - } public void createUsersTable() { - + Statement statement; + String sql = "create table if not exists zergy\n" + + "(\n" + + "\tid int auto_increment,\n" + + "\tname varchar(33) null,\n" + + "\tlastName varchar(33) null,\n" + + "\tage int null,\n" + + "\tconstraint zergy_pk\n" + + "\t\tprimary key (id)\n" + + ");"; + try { + statement = getConnect().createStatement(); + statement.execute(sql); + System.out.println("Улей зародился, вызываем морпехов"); + } catch (SQLException e) { + e.printStackTrace(); + } } public void dropUsersTable() { - + Statement statement; + String delete = "drop table if exists zergy"; + try { + statement = getConnect().createStatement(); + statement.execute(delete); + System.err.println("Проведена орбитальная бомбардировка, Улей уничтожен"); + } catch (SQLException e) { + e.printStackTrace(); + } } public void saveUser(String name, String lastName, byte age) { + PreparedStatement preparedStatement; + String newUser = "insert into zergy (name, lastName, age) values (?, ?, ?)"; + try { + preparedStatement = getConnect().prepareStatement(newUser); + preparedStatement.setString(1, name); + preparedStatement.setString(2, lastName); + preparedStatement.setByte(3, age); + preparedStatement.execute(); + System.out.println("Морпех " + name + " прибыл"); + } catch (SQLException e) { + e.printStackTrace(); + } } public void removeUserById(long id) { + PreparedStatement preparedStatement; + String remove = "delete from zergy where id = ?"; + try { + preparedStatement = getConnect().prepareStatement(remove); + preparedStatement.setLong(1, id); + preparedStatement.execute(); + System.err.println("Морпеха под номером " + id + " сожрали Zergy"); + } catch (SQLException e) { + e.printStackTrace(); + } } public List getAllUsers() { - return null; + List list = new ArrayList<>(); + Statement statement; + try { + statement = getConnect().createStatement(); + ResultSet resultSet = statement + .executeQuery("select name, lastName, age from zergy"); + while (resultSet.next()) { + String name = resultSet.getString(1); + String lastName = resultSet.getString(2); + Byte age = resultSet.getByte(3); + list.add(new User(name, lastName, age)); + } + System.out.println(list); + } catch (SQLException e) { + e.printStackTrace(); + } + return list; } + + public void cleanUsersTable() { + Statement statement; + String clean = "truncate table zergy"; + try { + statement = getConnect().createStatement(); + statement.execute(clean); + System.err.println("Zergy очищенны огнём"); + } 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..a37a6b6e 100644 --- a/src/main/java/jm/task/core/jdbc/model/User.java +++ b/src/main/java/jm/task/core/jdbc/model/User.java @@ -1,27 +1,34 @@ 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 = "zergy") public class User { @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column private String name; - @Column private String lastName; - @Column private Byte age; public User() { } + @Override + public String toString() { + return "User{" + + "id=" + id + + ", name='" + name + '\'' + + ", lastName='" + lastName + '\'' + + ", age=" + age + + '}'; + } + public User(String name, String lastName, Byte age) { this.name = name; this.lastName = lastName; 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..91f5e7be 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,34 @@ 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.model.User; import java.util.List; public class UserServiceImpl implements UserService { + UserDao dao = new UserDaoHibernateImpl(); public void createUsersTable() { - + dao.createUsersTable(); } public void dropUsersTable() { - + dao.dropUsersTable(); } public void saveUser(String name, String lastName, byte age) { - + dao.saveUser(name, lastName, age); } public void removeUserById(long id) { - + dao.removeUserById(id); } public List getAllUsers() { - return null; + return dao.getAllUsers(); } public void cleanUsersTable() { - + dao.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..7410959b 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,50 @@ 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.service.ServiceRegistry; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + public class Util { - // реализуйте настройку соеденения с БД + private final static String URL = "jdbc:mysql://localhost:3306/new_base"; + private final static String USER = "root"; + private final static String PASSWORD = "springcourse"; + private SessionFactory sessionFactory; + + public SessionFactory getSessionFactory() { + if(sessionFactory == null) { + Configuration config = new Configuration(); + Properties proper = new Properties(); + proper.put("hibernate.connection.driver_class", "com.mysql.cj.jdbc.Driver"); + proper.put("hibernate.connection.url", URL); + proper.put("hibernate.connection.username", USER); + proper.put("hibernate.connection.password", PASSWORD); + proper.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); + proper.put("hibernate.current_session_context_class", "thread"); + proper.put("hibernate.show_sql", "true"); + proper.put("hibernate.hbm2ddl.auto", "update"); + config.setProperties(proper); + config.addAnnotatedClass(User.class); + ServiceRegistry service = + new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); + sessionFactory = config.buildSessionFactory(service); + } + return sessionFactory; + } + + public Connection getConnect() { + Connection connect = null; + try { + connect = DriverManager.getConnection(URL, USER, PASSWORD); + } catch (SQLException e) { + e.printStackTrace(); + } + return connect; + } } 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..80197c1b 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..07e6c858 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..89dc8a29 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..46e52028 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..fa827848 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..35a8eef0 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..9d4abf60 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/Util.class b/target/classes/jm/task/core/jdbc/util/Util.class new file mode 100644 index 00000000..6dc74424 Binary files /dev/null and b/target/classes/jm/task/core/jdbc/util/Util.class differ diff --git a/target/test-classes/UserServiceTest.class b/target/test-classes/UserServiceTest.class new file mode 100644 index 00000000..f54ca664 Binary files /dev/null and b/target/test-classes/UserServiceTest.class differ