@GetMapping("/members") public Page list(Pageable pageable){ Page findMembers = memberRepository.findAll(pageable); return findMembers; } 이렇게 사용하는 것 만으로 페이징이 가능하다. - GET 요청의 파라미터 값을 주는 것으로 페이징을 조절 가능하다. default는 20개로 되어있으며 변경이 가능하다. 글로벌 변경 spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties..
package study.datajpa.controller; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import study.datajpa.entity.Member; import study.datajpa.repository.MemberRepository; @RestController..
등록 수정에 대한 내용이 없으면 유지보수 등 나중에 확인할 때에 문제가 생길 수도 있다. 김영한개발자님은 모든 테이블에 등록, 수정 내용을 꼭 남긴다고 한다. 같은 데이터의 모양이므로 하나의 클래스로 진행한다. 실무에서도 자주 쓰는 기술이라 한다. 순수 JPA package study.datajpa.entity; import jakarta.persistence.Column; import jakarta.persistence.MappedSuperclass; import jakarta.persistence.PrePersist; import jakarta.persistence.PreUpdate; import java.time.LocalDateTime; @MappedSuperclass public class Jp..
간혹 개발 중에 JpaRepository가 아닌 사용자가 직접 구현한 쿼리들.. 순수 JPA 또는 mybatis, 데이터베이스 직접 커넥션 등을 사용하고 싶을 때가 있다. 하나의 레퍼지토리로 엮어 사용하면 되는데 1. 인터페이스를 먼저 만들고 2. 상속받아 구현체를 만든 뒤에 3. JPA레퍼지토리를 상속받은 레퍼지토리에 상속시키면 된다. 1. package study.datajpa.repository; import study.datajpa.entity.Member; import java.util.List; public interface MemberRepositoryCustom { List findMemberCustom(); } 2. package study.datajpa.repository; import..
JPA 쿼리 힌트 (SQL 힌트가 아니라 JPA 구현체에게 제공하는 힌트) @Test public void queryHint(){ Member member = new Member("member1", 10); memberRepository.save(member); em.flush(); em.clear(); Member findMember = memberRepository.findById(member.getId()).get(); findMember.setUsername("member2"); em.flush(); } 만약 이런 식의 코드가 있다면 현재 변경감지가 일어나서 setUsername이 변경되었을 것이다. 만약에 업데이트(수정)을 하지 않는다고 해도 조회시에 변경감지를 위해 어딘가에 원본을 놔두게 된다..
참고로 이 기능은 순수 JPA 2.2 부터 들어간 기능이라 한다. @Test public void findMemberLazy(){ Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 10, teamB); memberRepository.save(member1); memberRepository.save(member2); em.flush(); em.clear(); List members = ..
이런 경우가 있다. 모든 직원의 연봉을 10% 인상해! 라는 경우이다. 이런 것을 벌크성 수정 쿼리라 한다. 이런 경우에는 db를 호출해서 로직을 짜는 것 보다, 업데이트 쿼리를 날리는 것이 효과 적인데 이걸 벌크성 수정 쿼리라 한다. 순수 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; } DataJPA 업데이트 @Modifying @Query("update Member m set m.age = m...
JPA Repository를 상속하면 다음과 같이 자유롭게 find...By 안에 어떤 이름이든 지을 수 있으며 BY 이후가 중요하다. List findListByUsername(String username); //컬렉션 Member findMemberByUsername(String username); //단건 Optional findOptionalByUsername(String username); //단건 Optional 주의점 - list로 받으면 절대 null이 아니다 size가 0으로 나온다. 그러므로 Null 체크 조심해야 한다. - 단건 조회에서는 Member일 경우 null을 반환한다. - 그러므로 자바8 이상에서 부터는 그냥 Optional로 받아서 처리해야한다. 순수 JPA 페이징 pub..
- Total
- Today
- Yesterday
- 예외처리
- HTTP
- ArgumentResolver
- 항해99
- React
- Java
- filter
- 백엔드 개발자 역량
- reject
- BindingResult
- exception
- rejectValue
- JPA
- 컨트
- Intercepter
- hypertexttransferprotocol
- jpa api
- 향해플러스백엔드
- 스프링공부
- 로그인
- 향해플러스
- 향해99
- 스프링부트
- 백엔드 개발자 공부
- thymleaf
- react실행
- 인터셉터
- 리터럴
- SpringBoot
- 항해플러스
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
