- 따로 쿼리문 작성하지 않아도 CRUD 사용 가능
< UserRepository >
@Repository // 데이터타입, pk의 타입
public interface UserRepository extends JpaRepository<User, Long> {
}
UserRepository 인터페이스를 만들고,
이미 만들어져 있는 JpaRepository 상속 받는다.
< UserRepositoryTest >
public class UserRepositoryTest extends StudyApplicationTests {
// DI (Dependency Injection)
@Autowired
private UserRepository userRepository;
@Test
public void create(){
// String sql = insert into user ( ) values ( ); 쓰지 않아도 됨. JPA 기능
User user = new User();
// user.setId(); auto_increment 속성을 사용하기 때문에 생략
user.setAccount("TestUser02");
user.setEmail("TestUser02@gmail.com");
user.setPhoneNumber("010-2222-2222");
user.setCreatedAt(LocalDateTime.now());
user.setCreatedBy("TestUser02");
User newUser = userRepository.save(user); // user 타입을 넘겨서 저장,
// DB에 저장된 새로운 user 객체 반환
System.out.println(newUser);
}
@Test
public void read(){
Optional<User> user = userRepository.findById(3L); //id Long타입
// optional : 있을 수도 있고 없을 수도 있음
// findAll : DB에 있는 user테이블 리스트를 모두 가져옴
// findById : Id 한 건 가져옴
user.ifPresent(selectUser -> {
//selectUser가 Optional에 들어있으면 ifPresent로 꺼냄
System.out.println(selectUser);
System.out.println(selectUser.getEmail());
});
}
@Test
public void update(){
Optional<User> user = userRepository.findById(2L); //먼저 특정 데이터 select
user.ifPresent(selectUser -> { // user가 반드시 있어야 하므로 ifPresent 사용
// selectUser.setId(3L); 이라고 쓰면 2L이 아니라 3L이 수정됨.
// 해당 id를 다시 확인하기 때문에
selectUser.setAccount("pppp");
selectUser.setUpdatedAt(LocalDateTime.now());
selectUser.setUpdatedBy("update method()");
userRepository.save(selectUser); // 마지막엔 항상 save 해줘야함
// 값을 바꿔서 save 하면 JPA에서는 해당 ID가 있는지를 먼저 확인하고 update함
});
}
@Test
@Transactional // 메소드는 실행되지만 DB에 반영되지 않음. 마지막에 롤백.
public void delete(){
Optional<User> user = userRepository.findById(2L);
Assertions.assertTrue(user.isPresent()); // 2L에 값이 들어있으면 true
user.ifPresent(selectUser -> {
// selectUser.setId(3L); 이라고 쓰면 2L이 아니라 3L이 수정됨.
userRepository.delete(selectUser);
});
Optional<User> deleteUser = userRepository.findById(2L);
Assertions.assertFalse(deleteUser.isPresent()); // 2L에 값이 있으면 false
}
}
- application.properties ⇒ spring.jpa.show-sql=true 추가 ⇒ 쿼리문 보여줌
- update() 실행 결과
- 특정 user Select
- ID로 한번 더 Select
- update
'개발공부 > Java(JPA)' 카테고리의 다른 글
[Java] String VS StringBuilder 차이점 (0) | 2025.02.17 |
---|---|
JPA 란? (1) | 2025.02.13 |
Entity (0) | 2025.02.13 |
JPA 연관 관계 설정 (0) | 2023.06.18 |
JPA 자동 설정 기능 (0) | 2023.06.18 |