흰 스타렉스에서 내가 내리지

스프링 데이터 JPA 본문

Spring

스프링 데이터 JPA

주씨. 2023. 2. 26. 19:22
728x90

파라미터 바인딩

public interface MemberRepository extends JpaRepository<Member, Long>{
    
    @Query("select m from Member m where m.username = :name")
    Member findByUsername(@Param("name") String username);
}

 

벌크성 수정 쿼리

public interface MemberRepository extends JpaRepository<Member, Long> {
    @Modifying
    @Query("update Product p set p.price = p.price * 1.1 where p.stockAmount < :stockAmount")
    int bulkPriceUp(@Param("stockAmount") String stockAmount);
}

 

 

사용자 정의 리포지토리 구현

public interface MemberRepositoryCustom {
    public List<Member> findMemberCustom();
}

public class MemberRepositoryImpl implements MemberRepositoryCustom{
    @Override
    public List<Member> findMemberCustom() {
        return null;
    }
}

public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
}

 

도메인 클래스 컨버터 기능

@Controller
public class MemberController {
    @RequestMapping("member/memberUpdateForm")
    public String memberUpdateForm(@RequestParam("id") Member member, Model model){
        model.addAttribute("member", member);
        return "member/memberSaveForm";
    }
}

HTTP 요청으로 id를 받지만 도메인 클래스 커버터가 중간에 동작해서 아이디를 회원 엔티티 객체로 변환해서 넘겨준다. 

 

 

페이징과 정렬 기능

@GetMapping("/members")
public String list(Pageable pageable, Model model){
    Page<Member> page = memberService.findMembers(pageable);
    model.addAttribute("members", page.getContent());
    return "members/memberList";
}

- page : 현재 페이지, 0부터 시작

- size : 한 페이지에 노출할 데이터 건수

- sort : 정렬 조건 정의

ex) /members?page=0&size=20&sort=name,desc&sort=address.city

 

@GetMapping("/members")
public String list(@PageableDefault(size = 12, sort = "name", direction = Sort.Direction.DESC) Pageable pageable, Model model){
}

ㄴ 기본값