이런 경우가 있다. 모든 직원의 연봉을 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..
package study.datajpa.dto; import lombok.Data; @Data public class MemberDto { private Long id; private String username; private String teamName; public MemberDto(Long id, String username, String teamName) { this.id = id; this.username = username; this.teamName = teamName; } } @Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join m.team t") List findMemberDto..
package study.datajpa.entity; import jakarta.persistence.*; import lombok.*; @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) // 기본생성자 만들기, 기본생성자는 JPA 스펙으로 private는 안된다. @ToString(of = {"id", "username", "age"}) //toString을 만들 때에는 가급적이면 연관관계객체는 넣지 않는것이 좋다(서로 부르면서 무한루프 된다.) @NamedQuery( name="Member.findByUsername", query="select m from Member m where m.username =: usern..
package study.datajpa.repository; import org.springframework.data.jpa.repository.JpaRepository; import study.datajpa.entity.Member; import java.util.List; public interface MemberRepository extends JpaRepository { List findByUsernameAndAgeGreaterThan(String username, int age); } @Test public void findByUsernameAndAgeGreaterThen(){ Member m1 = new Member("AAA", 10); Member m2 = new Member("AAA", 2..
System.out.println("memberRepository = " + memberRepository.getClass()); log memberRepository = class jdk.proxy2.$Proxy123 jpaRepository를 extends한 repository를 로그에 찍어봤다. 정체는 프록시였는데, 스프링jpa가 인터페이스를 보고 구현체를 꼿아버린거다. 구현체를 스프링 JPA가 만들어주기 때문에 인터페이스 만으로 메소드를 다 사용이 가능한 것이다. 제네릭 타입 - T : 엔티티 - ID : 엔티티의 식별자 타입 - S : 엔티티와 그 자식 타입 주요 메서드 - save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다. - delete(T) : 엔티티 하나를 삭제한다...
- Total
- Today
- Yesterday
- 백엔드 개발자 역량
- rejectValue
- jpa api
- Intercepter
- 향해99
- BindingResult
- 스프링공부
- hypertexttransferprotocol
- exception
- 인터셉터
- SpringBoot
- reject
- react실행
- thymleaf
- HTTP
- React
- 향해플러스
- 향해플러스백엔드
- ArgumentResolver
- Java
- 항해플러스
- 리터럴
- 로그인
- 컨트
- 예외처리
- 항해99
- filter
- 스프링부트
- JPA
- 백엔드 개발자 공부
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |