JPAのCRUD経由
Create
Jpa RepositoryのユーザーRepositoryインタフェースを継承する一輪オブジェクトを宣言します.作成するテーブルにオブジェクトを作成し、カラム値にオブジェクトを設定し、save()メソッドを呼び出してDBに保存します.
クエリー文で特定のユーザーを選択し、ID付きでselectターゲットを再度検索し、その値に対してupdateを実行します.findById(2 L)を使用して特定のユーザーIdを選択して値を更新しますが、jpaは既存のselectUserに対して再び値をポップアップし、最初に設定する値とともに既存のオブジェクトを更新します.
->@Transactionalプロンプトは、データベース内のクエリーを実行しても最後にロールバックされます.(Rolled back transaction for test)
JpaRepositoryからEntityをインポートする際の注意点
1)JPA RepositoryからEntityをインポートする場合は、基本ジェネレータが必要です.
2)デフォルト作成者のアクセス制御者がprivateに設定されている場合、Lazy Loadingを使用するとProxy関連の例外が発生する可能性があります.
3)Entityの基本作成者は、publicまたはprotectedと宣言することが望ましい.
*参考資料
https://wbluke.tistory.com/6
Jpa RepositoryのユーザーRepositoryインタフェースを継承する一輪オブジェクトを宣言します.作成するテーブルにオブジェクトを作成し、カラム値にオブジェクトを設定し、save()メソッドを呼び出してDBに保存します.
@Autowired
private UserRepository userRepository;
@Test
public void create() {
User user = new User();
// user.setId(10); Id는 Auto increment 이므로 set 하지 않아도된다.
user.setAccount("TestUser03");
user.setEmail("[email protected]");
user.setPhoneNumber("010-1111-3333");
user.setCreatedAt(LocalDateTime.now());
user.setCreatedBy("TestUser3");
User newUser = userRepository.save(user);
System.out.println("newUser : " + newUser);
}
Read @Test
public void read() {
Optional<User> user = userRepository.findById(2L);
// selectUser가 있으면 값을 출력
user.ifPresent(selectUser -> {
System.out.println("user : " + selectUser);
System.out.println("email : " + selectUser.getEmail());
});
}
Updateクエリー文で特定のユーザーを選択し、ID付きでselectターゲットを再度検索し、その値に対してupdateを実行します.findById(2 L)を使用して特定のユーザーIdを選択して値を更新しますが、jpaは既存のselectUserに対して再び値をポップアップし、最初に設定する値とともに既存のオブジェクトを更新します.
@Test
public void update(){
// findById에서 2L (id가 2번인 아이디에 해당하는 것을 업데이트)
Optional<User> user = userRepository.findById(2L);
user.ifPresent(selectUser -> {
selectUser.setAccount("PPPP");
// selectUser.setId(3L); // 3L로 셋팅하고 해당 아이디에 업데이트
selectUser.setUpdatedAt(LocalDateTime.now());
selectUser.setUpdatedBy("update method()");
userRepository.save(selectUser);
});
}
Hibernate: select user0_.id as id1_0_0_, user0_.account as account2_0_0_, user0_.created_at as created_3_0_0_, user0_.created_by as created_4_0_0_, user0_.email as email5_0_0_, user0_.phone_number as phone_nu6_0_0_, user0_.updated_at as updated_7_0_0_, user0_.updated_by as updated_8_0_0_ from user user0_ where user0_.id=?
Hibernate: select user0_.id as id1_0_0_, user0_.account as account2_0_0_, user0_.created_at as created_3_0_0_, user0_.created_by as created_4_0_0_, user0_.email as email5_0_0_, user0_.phone_number as phone_nu6_0_0_, user0_.updated_at as updated_7_0_0_, user0_.updated_by as updated_8_0_0_ from user user0_ where user0_.id=?
Hibernate: update user set account=?, created_at=?, created_by=?, email=?, phone_number=?, updated_at=?, updated_by=? where id=?
Delete@Test
public void delete() {
Optional<User> user = userRepository.findById(1L);
// user.isPresent()가 true이어야함
Assertions.assertTrue(user.isPresent());
user.ifPresent(selectUser -> {
// selectUser.setId(3L); // 3L로 셋팅하고 해당 아이디를 삭제
userRepository.delete(selectUser);
});
// 삭제가 잘 되었는지 확인
Optional<User> deleteUser = userRepository.findById(1L);
Assertions.assertFalse(deleteUser.isPresent()); // 삭제되었으면 isPresent()가 false
}
データを削除するたびに、最終データベースにはデータがありません...テストは面倒ではありませんか?...->@Transactionalプロンプトは、データベース内のクエリーを実行しても最後にロールバックされます.(Rolled back transaction for test)
JpaRepositoryからEntityをインポートする際の注意点
1)JPA RepositoryからEntityをインポートする場合は、基本ジェネレータが必要です.
2)デフォルト作成者のアクセス制御者がprivateに設定されている場合、Lazy Loadingを使用するとProxy関連の例外が発生する可能性があります.
3)Entityの基本作成者は、publicまたはprotectedと宣言することが望ましい.
*参考資料
https://wbluke.tistory.com/6
Reference
この問題について(JPAのCRUD経由), 我々は、より多くの情報をここで見つけました https://velog.io/@gkskaks1004/JPA를-통한-CRUDテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol