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