diff --git a/initdb/3_INCREASE_IDS.sql b/initdb/3_INCREASE_IDS.sql new file mode 100644 index 0000000000000000000000000000000000000000..2e8fced86f5493562b3841dfcb46258e8472ef11 --- /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 878037cce8f7116e18e1b930f4ee78b1715bc96d..042c9c5f8c1abab0f1980df29542fc69ffe53cbb 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 7969c29397c0cf4fe4d4c4b6315c374a502b4d21..f0ac0f4037bf67c85e014ae87e4db6f8cfc8aa81 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 cc9fa8b0a57f391389d089d41a8ff83cb97829f3..11f811366d028be77288bb0634bf5612cefe8b6e 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 8c085e71e6f921af03bbc4543bf3991d1a6b8da6..39a63d36c7a25b09f32036f5094de5573106c97d 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 e528c9f7958360173e5aca551751cb5e9cdf92ca..6688b4cf1c201953433226992b66028c1875d34a 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 8b137891791fe96927ad78e64b0aad7bded08bdc..211a08b2d93005b1a1a8bfa4298d6fe993206c34 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