From 6d25f17356b005c4afc7be01d3f5b638bc44e158 Mon Sep 17 00:00:00 2001
From: Laurine <lenetlaurine@gmail.com>
Date: Sun, 8 Oct 2023 16:06:16 +0200
Subject: [PATCH] 9- Hibernate

---
 initdb/3_INCREASE_IDS.sql                     |  1 +
 pom.xml                                       |  6 +++
 .../com/example/livecodingjavaspring/App.java |  3 +-
 .../example/livecodingjavaspring/User.java    | 19 ++++----
 .../example/livecodingjavaspring/UserDao.java | 46 ++-----------------
 .../UserLibraryController.java                | 10 ++--
 src/main/resources/application.properties     |  4 ++
 7 files changed, 33 insertions(+), 56 deletions(-)
 create mode 100644 initdb/3_INCREASE_IDS.sql

diff --git a/initdb/3_INCREASE_IDS.sql b/initdb/3_INCREASE_IDS.sql
new file mode 100644
index 0000000..2e8fced
--- /dev/null
+++ b/initdb/3_INCREASE_IDS.sql
@@ -0,0 +1 @@
+SELECT setval(pg_get_serial_sequence('users', 'id'), coalesce(max(id)+1, 1), false) FROM users;
diff --git a/pom.xml b/pom.xml
index 878037c..042c9c5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,6 +42,12 @@
 		    <artifactId>postgresql</artifactId>
 		    <version>42.6.0</version>
 		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core -->
+		<dependency>
+		    <groupId>org.hibernate.orm</groupId>
+		    <artifactId>hibernate-core</artifactId>
+		    <version>6.3.1.Final</version>
+		</dependency>
 
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/example/livecodingjavaspring/App.java b/src/main/java/com/example/livecodingjavaspring/App.java
index 7969c29..f0ac0f4 100644
--- a/src/main/java/com/example/livecodingjavaspring/App.java
+++ b/src/main/java/com/example/livecodingjavaspring/App.java
@@ -1,10 +1,9 @@
 package com.example.livecodingjavaspring;
 
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 
-@SpringBootApplication(exclude={ DataSourceAutoConfiguration.class })
+@SpringBootApplication()
 public class App {
     public static void main(String[] args) {
         new SpringApplicationBuilder(App.class).run(args);
diff --git a/src/main/java/com/example/livecodingjavaspring/User.java b/src/main/java/com/example/livecodingjavaspring/User.java
index cc9fa8b..11f8113 100644
--- a/src/main/java/com/example/livecodingjavaspring/User.java
+++ b/src/main/java/com/example/livecodingjavaspring/User.java
@@ -1,21 +1,22 @@
 package com.example.livecodingjavaspring;
 
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import java.util.Random;
-
+@Entity
+@Table(name = "users")
 @Data
 @Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class User {
-    private final int id = new Random().nextInt(1000);
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
     private String firstName;
     private String lastName;
     private Integer age;
-
-    public User(String firstName, String lastName, Integer age) {
-        this.firstName = firstName;
-        this.lastName = lastName;
-        this.age = age;
-    }
 }
diff --git a/src/main/java/com/example/livecodingjavaspring/UserDao.java b/src/main/java/com/example/livecodingjavaspring/UserDao.java
index 8c085e7..39a63d3 100644
--- a/src/main/java/com/example/livecodingjavaspring/UserDao.java
+++ b/src/main/java/com/example/livecodingjavaspring/UserDao.java
@@ -1,48 +1,10 @@
 package com.example.livecodingjavaspring;
 
-import org.springframework.stereotype.Service;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
 
-import java.sql.*;
-import java.util.ArrayList;
-import java.util.List;
+@Repository
+public interface UserDao extends CrudRepository<User, Integer> {
 
-@Service
-public class UserDao {
-    private static final String FETCH_ALL_USERS_QUERY = "SELECT * FROM users";
-    private static final String ADD_USER_QUERY = "INSERT INTO users (id, first_name, last_name, age) VALUES (?, ?, ?, ?)";
 
-
-    public List<User> getUsers() {
-        List<User> users = new ArrayList<>();
-        try (Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost/db-name", "user", "pwd");
-             PreparedStatement preparedStatement = connection.prepareStatement(FETCH_ALL_USERS_QUERY)) {
-            ResultSet resultSet = preparedStatement.executeQuery();
-            while (resultSet.next()) {
-                User user = User.builder()
-                        .firstName(resultSet.getString("first_name"))
-                        .lastName(resultSet.getString("last_name"))
-                        .age(resultSet.getInt("age"))
-                        .build();
-                users.add(user);
-            }
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-        return users;
-
-    }
-
-    public int addUser(User user) {
-        try (Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost/db-name", "user", "pwd");
-             PreparedStatement preparedStatement = connection.prepareStatement(ADD_USER_QUERY)) {
-            preparedStatement.setInt(1, user.getId());
-            preparedStatement.setString(2, user.getFirstName());
-            preparedStatement.setString(3, user.getLastName());
-            preparedStatement.setInt(4, user.getAge());
-            return preparedStatement.executeUpdate();
-        } catch (SQLException e) {
-            throw new RuntimeException(e);
-        }
-
-    }
 }
diff --git a/src/main/java/com/example/livecodingjavaspring/UserLibraryController.java b/src/main/java/com/example/livecodingjavaspring/UserLibraryController.java
index e528c9f..6688b4c 100644
--- a/src/main/java/com/example/livecodingjavaspring/UserLibraryController.java
+++ b/src/main/java/com/example/livecodingjavaspring/UserLibraryController.java
@@ -3,6 +3,7 @@ package com.example.livecodingjavaspring;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @RestController
@@ -17,13 +18,16 @@ public class UserLibraryController {
 
     @GetMapping("")
     public List<User> getUsers() {
-        return userDao.getUsers();
+        Iterable<User> it = userDao.findAll();
+        List <User> users = new ArrayList<>();
+        it.forEach(users::add);
+        return users;
     }
 
     @PostMapping("")
     public List<User> addUser(@RequestBody User user) {
-        userDao.addUser(user);
-        return userDao.getUsers();
+        userDao.save(user);
+        return getUsers();
     }
 
 }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 8b13789..211a08b 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,5 @@
+spring.datasource.url=jdbc:postgresql://localhost/db-name
+spring.datasource.username=user
+spring.datasource.password=pwd
+spring.datasource.driver-class-name=org.postgresql.Driver
 
-- 
GitLab