JPAのCRUD経由


Create
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