diff --git a/hibernate/build.gradle.kts b/hibernate/build.gradle.kts new file mode 100644 index 0000000..c24c5a2 --- /dev/null +++ b/hibernate/build.gradle.kts @@ -0,0 +1,19 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-java") +} + +dependencies { + implementation ("org.hibernate:hibernate-core:5.4.27.Final") + + runtimeOnly ("com.h2database:h2:1.4.200") + runtimeOnly ("org.apache.derby:derby:10.15.2.0") + runtimeOnly ("org.xerial:sqlite-jdbc:3.36.0.1") + //implementation("com.zsoltfabok:sqlite-dialect:1.0") +} diff --git a/hibernate/src/main/java/kr/pe/elex/examples/db/Derby.java b/hibernate/src/main/java/kr/pe/elex/examples/db/Derby.java new file mode 100644 index 0000000..aca1412 --- /dev/null +++ b/hibernate/src/main/java/kr/pe/elex/examples/db/Derby.java @@ -0,0 +1,42 @@ +package kr.pe.elex.examples.db; + +import com.elex_project.abraxas.Console; + +import java.sql.*; + +public class Derby { + public static void main(String... args){ + try { + Connection connection = DriverManager.getConnection("jdbc:derby:dbtest/derby;create=true"); + + try { + connection.createStatement() + .execute("CREATE TABLE person(name VARCHAR(16), age INT)"); + } catch (SQLException e){ + if (e.getSQLState().equals("X0Y32")){ + System.out.println("Already exists."); + } + } + + PreparedStatement statement = connection + .prepareStatement("INSERT INTO person (name, age) VALUES (?,?)"); + statement.setString(1, "Steve"); + statement.setInt(2, 37); + statement.executeUpdate(); + + ResultSet result = connection.createStatement() + .executeQuery("SELECT * FROM person"); + + while (result.next()) { + Console.writeLine("{} is {}-year-old.", + result.getString("name"), result.getInt("age")); + } + result.close(); + + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/hibernate/src/main/java/kr/pe/elex/examples/db/H2.java b/hibernate/src/main/java/kr/pe/elex/examples/db/H2.java new file mode 100644 index 0000000..7414240 --- /dev/null +++ b/hibernate/src/main/java/kr/pe/elex/examples/db/H2.java @@ -0,0 +1,39 @@ +package kr.pe.elex.examples.db; + +import com.elex_project.abraxas.Console; + +import java.sql.*; + +public class H2 { + + public static void main(String... args) { + try { + Connection connection = DriverManager.getConnection("jdbc:h2:./dbtest/h2"); + + connection.createStatement() + .execute("CREATE TABLE IF NOT EXISTS person(name TEXT, age INT);"); + + PreparedStatement statement = connection + .prepareStatement("INSERT INTO person (name, age) VALUES (?,?);"); + statement.setString(1, "Charlie"); + statement.setInt(2, 14); + statement.executeUpdate(); + + ResultSet result = connection.createStatement() + .executeQuery("SELECT * FROM person;"); + + while (result.next()) { + Console.writeLine("{} is {}-year-old.", + result.getString("name"), result.getInt("age")); + } + result.close(); + + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + } + + +} diff --git a/hibernate/src/main/java/kr/pe/elex/examples/db/SQLite.java b/hibernate/src/main/java/kr/pe/elex/examples/db/SQLite.java new file mode 100644 index 0000000..7c2d830 --- /dev/null +++ b/hibernate/src/main/java/kr/pe/elex/examples/db/SQLite.java @@ -0,0 +1,36 @@ +package kr.pe.elex.examples.db; + +import com.elex_project.abraxas.Console; + +import java.sql.*; + +public class SQLite { + public static void main(String... args){ + try { + Connection connection = DriverManager.getConnection("jdbc:sqlite:dbtest/hibernate.sqlite"); + + connection.createStatement() + .execute("CREATE TABLE IF NOT EXISTS person(id INT, name TEXT, age INT);"); + + PreparedStatement statement = connection + .prepareStatement("INSERT INTO person (name, age) VALUES (?,?);"); + statement.setString(1, "Steve"); + statement.setInt(2, 37); + statement.executeUpdate(); + + ResultSet result = connection.createStatement() + .executeQuery("SELECT * FROM person;"); + + while (result.next()) { + Console.writeLine("{} is {}-year-old.", + result.getString("name"), result.getInt("age")); + } + result.close(); + + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/hibernate/src/main/java/kr/pe/elex/examples/hibernate/BaseCrudRepository.java b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/BaseCrudRepository.java new file mode 100644 index 0000000..588ba2e --- /dev/null +++ b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/BaseCrudRepository.java @@ -0,0 +1,34 @@ +package kr.pe.elex.examples.hibernate; + +import org.hibernate.Session; + +public abstract class BaseCrudRepository extends BaseRepository { + + public T create(T o) { + Session session = getSession(); + session.beginTransaction(); + session.save(o); + session.getTransaction().commit(); + session.close(); + + return o; + } + + public T update(T person) { + Session session = getSession(); + session.beginTransaction(); + session.update(person); + session.getTransaction().commit(); + session.close(); + + return person; + } + + public void delete(T person) { + Session session = getSession(); + session.beginTransaction(); + session.delete(person); + session.getTransaction().commit(); + session.close(); + } +} diff --git a/hibernate/src/main/java/kr/pe/elex/examples/hibernate/BaseRepository.java b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/BaseRepository.java new file mode 100644 index 0000000..5c1d6ee --- /dev/null +++ b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/BaseRepository.java @@ -0,0 +1,30 @@ +package kr.pe.elex.examples.hibernate; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +abstract class BaseRepository { + private static final Configuration configuration; + private static SessionFactory factory; + + static { + try { + configuration = new Configuration().configure(); + factory = configuration.buildSessionFactory(); + + } catch (Throwable ex) { + System.err.println("Failed to create sessionFactory object." + ex); + throw new ExceptionInInitializerError(ex); + } + } + + protected Session getSession(){ + Session session = factory.openSession(); + if (!session.isConnected()){ + factory = configuration.buildSessionFactory(); + session = getSession(); + } + return session; + } +} diff --git a/hibernate/src/main/java/kr/pe/elex/examples/hibernate/ORM.java b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/ORM.java new file mode 100644 index 0000000..1fe4d9c --- /dev/null +++ b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/ORM.java @@ -0,0 +1,26 @@ +package kr.pe.elex.examples.hibernate; + +import java.util.List; + +public class ORM { + + public static void main(String... args) { + PersonRepository repository = new PersonRepository(); + + Person p; + p = repository.create(new Person("Charlie", 17)); + System.out.println(p); + p = repository.create(new Person("Steve", 37)); + System.out.println(p); + p = repository.create(new Person("Agatha", 19)); + System.out.println(p); + + List list = repository.retrieveAll(); + for (Person person : list){ + System.out.println(person); + } + + repository.retrieveById(3) + .ifPresent(System.out::println); + } +} diff --git a/hibernate/src/main/java/kr/pe/elex/examples/hibernate/Person.java b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/Person.java new file mode 100644 index 0000000..8ee250b --- /dev/null +++ b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/Person.java @@ -0,0 +1,26 @@ +package kr.pe.elex.examples.hibernate; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Data +@NoArgsConstructor +@Entity +public class Person { + + @Id + @GeneratedValue(strategy = GenerationType.TABLE) + public Long id; + @Column(name = "name") + public String name; + @Column(name = "age") + public int age; + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + +} diff --git a/hibernate/src/main/java/kr/pe/elex/examples/hibernate/PersonRepository.java b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/PersonRepository.java new file mode 100644 index 0000000..fa7da84 --- /dev/null +++ b/hibernate/src/main/java/kr/pe/elex/examples/hibernate/PersonRepository.java @@ -0,0 +1,43 @@ +package kr.pe.elex.examples.hibernate; + +import org.hibernate.Session; + +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaQuery; +import java.util.List; +import java.util.Optional; + +public class PersonRepository extends BaseCrudRepository { + + public PersonRepository() { + super(); + } + + public List retrieveAll2() { + Session session = getSession(); + CriteriaQuery query = session.getCriteriaBuilder() + .createQuery(Person.class); + TypedQuery q = session.createQuery(query.select(query.from(Person.class))); + session.close(); + return q.getResultList(); + } + + public List retrieveAll() { + Session session = getSession(); + List list = session + .createQuery("FROM Person p", Person.class).list(); + session.close(); + return list; + } + + public Optional retrieveById(long id) { + Session session = getSession(); + Person person = (Person) session + .createQuery("FROM Person p where p.id = :id") + .setParameter("id", id) + .setMaxResults(1) + .uniqueResult(); + session.close(); + return Optional.ofNullable(person); + } +} diff --git a/hibernate/src/main/resources/hibernate.cfg.xml b/hibernate/src/main/resources/hibernate.cfg.xml new file mode 100644 index 0000000..afa57db --- /dev/null +++ b/hibernate/src/main/resources/hibernate.cfg.xml @@ -0,0 +1,19 @@ + + + + + + org.h2.Driver + jdbc:h2:./dbtest/hibernate.h2 + org.hibernate.dialect.H2Dialect + + true + true + validate + + + + + + diff --git a/settings.gradle.kts b/settings.gradle.kts index c4b6e4a..033525d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,4 +10,4 @@ include("json-web-token", "mockito", "mosquitto", "rabbit-mq", "ssh", "web-socket-servlet","web-socket-client", - "thread") + "thread", "hibernate")