diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..73f69e09 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 00000000..f00b5192 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 00000000..b6eb442e --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/my_db_test + $ProjectFileDir$ + + + \ 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/libraries/Maven__antlr_antlr_2_7_7.xml b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml new file mode 100644 index 00000000..b8d93d8e --- /dev/null +++ b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml b/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml new file mode 100644 index 00000000..bc7d7fd8 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_protobuf_protobuf_java_3_11_4.xml b/.idea/libraries/Maven__com_google_protobuf_protobuf_java_3_11_4.xml new file mode 100644 index 00000000..d60deb07 --- /dev/null +++ b/.idea/libraries/Maven__com_google_protobuf_protobuf_java_3_11_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_sun_istack_istack_commons_runtime_3_0_7.xml b/.idea/libraries/Maven__com_sun_istack_istack_commons_runtime_3_0_7.xml new file mode 100644 index 00000000..4d7e82ee --- /dev/null +++ b/.idea/libraries/Maven__com_sun_istack_istack_commons_runtime_3_0_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_sun_xml_fastinfoset_FastInfoset_1_2_15.xml b/.idea/libraries/Maven__com_sun_xml_fastinfoset_FastInfoset_1_2_15.xml new file mode 100644 index 00000000..de27a396 --- /dev/null +++ b/.idea/libraries/Maven__com_sun_xml_fastinfoset_FastInfoset_1_2_15.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml b/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml new file mode 100644 index 00000000..ff49512a --- /dev/null +++ b/.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_persistence_javax_persistence_api_2_2.xml b/.idea/libraries/Maven__javax_persistence_javax_persistence_api_2_2.xml new file mode 100644 index 00000000..b7d39c62 --- /dev/null +++ b/.idea/libraries/Maven__javax_persistence_javax_persistence_api_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml b/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml new file mode 100644 index 00000000..059f88ff --- /dev/null +++ b/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml new file mode 100644 index 00000000..d4110417 --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_25.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_25.xml new file mode 100644 index 00000000..3eb0cdbc --- /dev/null +++ b/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_25.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_22.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_22.xml new file mode 100644 index 00000000..db4968ea --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_glassfish_jaxb_jaxb_runtime_2_3_1.xml b/.idea/libraries/Maven__org_glassfish_jaxb_jaxb_runtime_2_3_1.xml new file mode 100644 index 00000000..0c7a80a8 --- /dev/null +++ b/.idea/libraries/Maven__org_glassfish_jaxb_jaxb_runtime_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_glassfish_jaxb_txw2_2_3_1.xml b/.idea/libraries/Maven__org_glassfish_jaxb_txw2_2_3_1.xml new file mode 100644 index 00000000..638d9377 --- /dev/null +++ b/.idea/libraries/Maven__org_glassfish_jaxb_txw2_2_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 00000000..f58bbc11 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_1_2_Final.xml b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_1_2_Final.xml new file mode 100644 index 00000000..a775836a --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_5_1_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_core_5_5_3_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_core_5_5_3_Final.xml new file mode 100644 index 00000000..e52c280e --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_core_5_5_3_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_2_Final.xml b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_2_Final.xml new file mode 100644 index 00000000..1d8ce405 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_27_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_27_0_GA.xml new file mode 100644 index 00000000..39550dac --- /dev/null +++ b/.idea/libraries/Maven__org_javassist_javassist_3_27_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_jandex_2_2_3_Final.xml b/.idea/libraries/Maven__org_jboss_jandex_2_2_3_Final.xml new file mode 100644 index 00000000..e4e6c8c8 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_jandex_2_2_3_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_2_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_2_Final.xml new file mode 100644 index 00000000..5fb51814 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_1_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_1_1_Final.xml new file mode 100644 index 00000000..ec03510b --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_1_1_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jvnet_staxex_stax_ex_1_8.xml b/.idea/libraries/Maven__org_jvnet_staxex_stax_ex_1_8.xml new file mode 100644 index 00000000..ee8e8ef3 --- /dev/null +++ b/.idea/libraries/Maven__org_jvnet_staxex_stax_ex_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..5ac47e8d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..882550cd --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 00000000..56782cab --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,6 @@ + + + + + + \ 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/TaskJDBC.iml b/TaskJDBC.iml new file mode 100644 index 00000000..bcabf45d --- /dev/null +++ b/TaskJDBC.iml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0605a4c0..db77112e 100644 --- a/pom.xml +++ b/pom.xml @@ -13,8 +13,8 @@ org.apache.maven.plugins maven-compiler-plugin - 7 - 7 + 16 + 16 @@ -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.5.3.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..3e4fe836 100644 --- a/src/main/java/jm/task/core/jdbc/Main.java +++ b/src/main/java/jm/task/core/jdbc/Main.java @@ -1,7 +1,18 @@ package jm.task.core.jdbc; +import jm.task.core.jdbc.service.UserService; +import jm.task.core.jdbc.service.UserServiceImpl; + public class Main { public static void main(String[] args) { - // реализуйте алгоритм здесь + UserService userService = new UserServiceImpl(); + userService.createUsersTable(); + userService.saveUser("Ivan", "Ivanov", (byte) 25); + userService.saveUser("Petr", "Petrov", (byte) 33); + userService.saveUser("Alexandr", "Alexandrov", (byte) 32); + userService.saveUser("Denis", "Denisov", (byte) 35); + System.out.println(userService.getAllUsers()); + userService.cleanUsersTable(); + 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..b43cc45d 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,74 @@ package jm.task.core.jdbc.dao; import jm.task.core.jdbc.model.User; +import org.hibernate.Session; +import org.hibernate.SessionFactory; import java.util.List; +import static jm.task.core.jdbc.util.Util.*; + public class UserDaoHibernateImpl implements UserDao { - public UserDaoHibernateImpl() { + private final SessionFactory sessionFactory = getSessionFactory(); + public UserDaoHibernateImpl() { } - @Override public void createUsersTable() { - + Session session = sessionFactory.openSession(); + session.beginTransaction(); + session.createSQLQuery("CREATE TABLE IF NOT EXISTS users (`id` INT NOT NULL AUTO_INCREMENT," + + " `name` VARCHAR(45) NULL, " + + "`lastName` VARCHAR(45) NULL, " + + "`age` INT(45) NULL, PRIMARY KEY (`id`), " + + "UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE);") + .executeUpdate(); + session.getTransaction().commit(); + session.close(); } @Override public void dropUsersTable() { - + Session session = sessionFactory.openSession(); + session.beginTransaction(); + session.createSQLQuery("DROP TABLE IF EXISTS my_db_test.users;").executeUpdate(); + session.getTransaction().commit(); + session.close(); } @Override public void saveUser(String name, String lastName, byte age) { + Session session = sessionFactory.openSession(); + session.beginTransaction(); + session.save(new User(name, lastName, age)); + session.getTransaction().commit(); + session.close(); + System.out.println("User с именем – " + name + " добавлен в базу данных"); } @Override public void removeUserById(long id) { - + Session session = sessionFactory.openSession(); + session.beginTransaction(); + session.delete(session.get(User.class, id)); + session.getTransaction().commit(); + session.close(); } @Override public List getAllUsers() { - return null; + Session session = sessionFactory.openSession(); + return session.createQuery("From User").list(); } @Override public void cleanUsersTable() { - + Session session = sessionFactory.openSession(); + session.beginTransaction(); + session.createQuery("DELETE from User").executeUpdate(); + session.getTransaction().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..3a5f360b 100644 --- a/src/main/java/jm/task/core/jdbc/dao/UserDaoJDBCImpl.java +++ b/src/main/java/jm/task/core/jdbc/dao/UserDaoJDBCImpl.java @@ -2,34 +2,94 @@ import jm.task.core.jdbc.model.User; +import static jm.task.core.jdbc.util.Util.getConnection; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; import java.util.List; public class UserDaoJDBCImpl implements UserDao { public UserDaoJDBCImpl() { - } public void createUsersTable() { - + try { + Statement statement = getConnection().createStatement(); + statement.execute("CREATE TABLE `my_db_test`.`user` (\n" + + " `id` INT NOT NULL AUTO_INCREMENT,\n" + + " `name` VARCHAR(45) NULL,\n" + + " `lastName` VARCHAR(45) NULL,\n" + + " `age` TINYINT NULL,\n" + + " PRIMARY KEY (`id`))\n" + + "ENGINE = InnoDB\n" + + "DEFAULT CHARACTER SET = utf8;"); + } catch (SQLException ignored) { + } } public void dropUsersTable() { - + try (Statement statement = getConnection().createStatement()) { + statement.execute("drop table user;"); + } catch (SQLException ignored) { + } } public void saveUser(String name, String lastName, byte age) { + try (PreparedStatement statement = getConnection().prepareStatement("INSERT INTO my_db_test.user" + + " (name, lastName, age) VALUES (?, ?, ?);")) { + statement.setString(1, name); + statement.setString(2, lastName); + statement.setByte(3, age); + statement.executeUpdate(); + System.out.println("User с именем – " + name + " добавлен в базу данных"); + } catch (SQLException e) { + e.getMessage(); + System.err.println("Не удалось добавить User'a "); + } } public void removeUserById(long id) { - + try (PreparedStatement statement = getConnection().prepareStatement("DELETE FROM my_db_test.user WHERE id = ?;")) { + statement.setLong(1, id); + statement.executeUpdate(); + } catch (SQLException e) { + e.getMessage(); + System.err.println("Не удалось Удалить User'a "); + } } public List getAllUsers() { + List list = new ArrayList<>(); + try (Statement statement = getConnection().createStatement()) { + ResultSet resultSet = statement.executeQuery("SELECT * FROM user;"); + while (resultSet.next()) { + User user = new User(); + user.setId(resultSet.getLong("id")); + user.setName(resultSet.getString("name")); + user.setLastName(resultSet.getString("lastName")); + user.setAge(resultSet.getByte("age")); + list.add(user); + } + return list; + } catch (SQLException e) { + e.getMessage(); + System.err.println("Не удалось получить список User'ов "); + } + return null; } public void cleanUsersTable() { - + int i = 0; + try (Statement statement = getConnection().createStatement()) { + statement.execute("TRUNCATE TABLE user"); + } catch (SQLException e) { + e.getMessage(); + System.err.println("Не удалось очистить таблицу"); + } } } 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..6ccbbcca 100644 --- a/src/main/java/jm/task/core/jdbc/model/User.java +++ b/src/main/java/jm/task/core/jdbc/model/User.java @@ -1,18 +1,18 @@ 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 private String name; - @Column + @Column(name = "lastName") private String lastName; @Column @@ -59,4 +59,9 @@ public Byte getAge() { public void setAge(Byte age) { this.age = age; } + + @Override + public String toString() { + return '\n' + " ID: " + id + ". Name: " + name + ". Last Name: " + 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..24a9f4e8 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,37 @@ 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 { - public void createUsersTable() { + private UserDao userDaoHibernate = new UserDaoHibernateImpl(); + public void createUsersTable() { + userDaoHibernate.createUsersTable(); } public void dropUsersTable() { - + userDaoHibernate.dropUsersTable(); } public void saveUser(String name, String lastName, byte age) { - + userDaoHibernate.saveUser(name, lastName, age); } public void removeUserById(long id) { + userDaoHibernate.removeUserById(id); } public List getAllUsers() { - return null; + return userDaoHibernate.getAllUsers(); } public void cleanUsersTable() { + userDaoHibernate.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..5db98729 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,38 @@ + 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.*; + + public class Util { - // реализуйте настройку соеденения с БД + private static final String URL = "jdbc:mysql://localhost:3306/my_db_test"; + private static final String USERNAME = "root"; + private static final String PASSWORD = "192837465aA.A1"; + private static SessionFactory sessionFactory; + + public static Connection getConnection() throws SQLException { + return DriverManager.getConnection(URL, USERNAME, PASSWORD); + } + + public static SessionFactory getSessionFactory() { + Configuration configuration = new Configuration() + .setProperty(Environment.URL, URL) + .setProperty(Environment.USER, USERNAME) + .setProperty(Environment.PASS, PASSWORD) + .setProperty(Environment.SHOW_SQL, "true") + .setProperty(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread") + .addAnnotatedClass(User.class); + + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() + .applySettings(configuration.getProperties()).build(); + + return sessionFactory = configuration.buildSessionFactory(serviceRegistry); + } }