목록BE (354)
오봉이와 함께하는 개발 블로그
벌크성 수정 쿼리 스프링 데이터 JPA는 데이터의 값을 한 번에 변경할 수 있는 벌크성 수정 쿼리도 지원한다. JPA를 사용한 벌크성 수정 쿼리 public int bulkAgePlus(int age) { int resultCount = em.createQuery("update Member m set m.age = m.age + 1 where m.age >:age") .setParameter("age", age) .executeUpdate(); return resultCount; } @Test public void bulkUpdate() throws Exception { //given memberJpaRepository.save(new Member("member1", 10)); memberJpaRepos..
스프링 데이터 JPA 페이징과 정렬 페이징과 정렬 파라미터 org.springframework.data.domain.Sort : 정렬 기능 org.springframework.data.domain.Pageable : 페이징 기능 (내부에 Sort 포함) 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count 쿼리 결과를 포함하는 페이징 org.springframework.data.domain.Slice : 추가 count 쿼리 없이 다음 페이지만 확인 가능 내부적으로 limit + 1을 조회한다. List (자바 컬렉션) : 추가 count 쿼리 없이 결과만 반환 Page는 보통 우리가 아는 1 ~ n으로 이뤄진 페이지를 구현할 때 사용하고, Slice는 ..
순수 JPA 페이징과 정렬 JPA에서 페이징을 어떻게 할 것인가? 조건 검색 조건 : 나이가 10살 정렬 조건 : 이름으로 내림차순 페이징 조건 : 첫 번째 페이지, 페이지당 보여줄 데이터는 3건 JPA 페이징 리포지토리 코드 public List findByPage(int age, int offset, int limit) { return em.createQuery("select m from Member m where m.age = :age order by m.usernamdesc", Member.class) .setParameter("age", age) .setFirstResult(offset) .setMaxResults(limit) .getResultList(); } public long totalC..
반환 타입 스프링 데이터 JPA는 유연한 반환 타입을 지원한다. List findByUsername(String name); //컬렉션 Member findByUsername(String name); //단건 Optional findByUsername(String name); //단건 Optional (null일 수도 아닐 수도 있다.) Optional을 사용했을 때 결과가 2개 이상이면 IncorrectResultSizeDataAccessException이 발생한다. Optional은 결과가 null이거나 1개(단건)가 나와야 하기 때문인데, 사실 javax.persistence.NonUniqueResultException예외가 발생하지만 스프링이 바꿔서 예외를 반환한다. 스프링이 추상화 하는 예외에 ..
파라미터 바인딩 위치 기반 이름 기반 select m from Member m where m.username = ?0 // 위치 기반 select m from Member m where m.username = :name // 이름 기반 코드 가독성과 유지보수를 위해 이름 기반 파라미터 바인딩을 사용하자. 위치기반은 순서를 실수하면 버그가 생길 수 있다. 이름 기반 파라미터 바인딩 public interface MemberRepository extends JpaRepository { @Query("select m from Member m where m.username = :name") Member findMembers(@Param("name") String username); } 컬렉션 파라미터 바인딩 C..