
Persistence:
ORM:
JPA:
Hibernate:
Spring Data JPA:
이제까지 사용한 MyBatis -> Persistence Context
Entity:



Entity Manager:
엔티티 Manager 메소드의 상태
Optional:
Optional 사용 시 주의사항:
// Optional 생성
Optional<String> opt1 = Optional.empty(); // 빈 Optional
Optional<String> opt2 = Optional.of("값"); // null이 아닌 값으로 Optional 생성
Optional<String> opt3 = Optional.ofNullable(nullable); // null일 수도 있는 값으로 생성
// 값 처리
opt.isPresent(); // 값이 존재하는지 확인
opt.isEmpty(); // 값이 없는지 확인
opt.get(); // 값 가져오기 (값이 없으면 예외 발생)
opt.orElse("기본값"); // 값이 없을 때 기본값 반환
opt.orElseGet(() -> "기본값 생성"); // 값이 없을 때 기본값 생성
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}
@Service
public class UserService {
public User getUser(String email) {
return userRepository.findByEmail(email)
.orElseThrow(() -> new UserNotFoundException("사용자를 찾을 수 없습니다"));
}
}
Flush:
QueryByExample(QBE)
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
User findByEmail(String email);
}
User findByEmail(String email);
User getByEmail(String email);
User readByEmail(String email);
User queryByEmail(String email);
User searchByEmail(String email);
User streamByEmail(String email);
List<User> findByAgeGreaterThan(int age); // >
List<User> findByAgeGreaterThanEqual(int age); // >=
List<User> findByAgeLessThan(int age); //
List<User> findByAgeLessThanEqual(int age); // <=
List<User> findByEmailAndName(String email, String name); // AND
List<User> findByEmailOrName(String email, String name); // OR
List<User> findByCreatedAtBetween(LocalDateTime start, LocalDateTime end);
List<User> findByAgeBetween(int start, int end);
List<User> findByNameStartingWith(String prefix); // LIKE 'prefix%'
List<User> findByNameEndingWith(String suffix); // LIKE '%suffix'
List<User> findByNameContains(String word); // LIKE '%word%'
List<User> findByNameLike(String likePattern); //
List<User> findByIdIsNotNull();
List<User> findByIdIsNull();
List<User> findByNameIn(List<String> names);
// 메소드 이름으로 정렬
List<User> findByNameOrderByIdDesc(String name);
// Sort 파라미터로 정렬
List<User> findByName(String name, Sort sort);
// Pageable 파라미터로 페이징 처리
Page<User> findByName(String name, Pageable pageable);
// 사용 예시
PageRequest pageRequest = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "id"));
Page<User> userPage = userRepository.findByName("John", pageRequest);
// 최근 24시간 내 생성된 활성 사용자 찾기
List<User> findByCreatedAtAfterAndActiveTrue(LocalDateTime yesterday);
// 특정 이메일 도메인을 사용하는 사용자 찾기
List<User> findByEmailEndingWith(String domain);
// 이름으로 검색하고 ID로 정렬하여 상위 5명 가져오기
List<User> findTop5ByNameContainingOrderByIdDesc(String name);