분류 전체보기

    JPA :: 벌크성 수정 쿼리

    JPA :: 벌크성 수정 쿼리

    벌크 연산 여러 건의 데이터를 한 번에 수정하거나 삭제 조건에 맞는 객체를 다 가지고 와서 수정할 필요 없이 DB 쿼리로 해결하는 것. JPA Bulk 예제 코드 : 파라미터로 받은 나이보다 많은 회원들의 나이를 +1 시킨다. public int bulkAgePlus(int age) { return em.createQuery( "update Member m set m.age = m.age + 1" + " where m.age >= :age") .setParameter("age", age) .executeUpdate(); } 테스트 코드 @Test public void bulkUpdate() { //given memberJpaRepository.save(new Member("member1", 10)); m..

    JPA :: 페이징과 정렬

    JPA :: 페이징과 정렬

    기존 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.username desc") .setParameter("age", age) .setFirstResult(offset) .setMaxResults(limit) .getResultList(); } public long totalCount(int age) { return em.createQuery("select count(m) from Member m where m.age = :age", Long.class) .setParameter("age", a..

    JPA :: Query Method 기능

    JPA :: Query Method 기능

    스프링 데이터 JPA 가 제공하는 마법같은 기능이 있다. 바로 “쿼리 메소드” 기능인데, 결론부터 말하면 3가지 기능이 있다. 메소드 이름으로 쿼리 생성 메소드 이름으로 JPA NamedQuery 호출 @Query 어노테이션을 사용해서 Repository interface 에 쿼리 직접 정의 Method 이름으로 Query 생성 메소드 이름을 분석해서 JPQL 쿼리 실행 예) 이름과 나이를 기준으로 회원을 조회하려면 ? // 순수 JPA Repository public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :us..

    Spring Boot :: Spring Data 패키지 구조

    Spring Boot :: Spring Data 패키지 구조

    Spring Data JPA 를 활용해서 인터페이스를 사용할 때 JpaRepository 를 상속받아서 사용한다. 이 JpaRepository 안에 들어가면 또 다른 Repository 를 상속받고 또 상속받고 ,, 이 구조에 대해서 기록해두고자 한다. 인터페이스 살펴보기 먼저 MemberRepository 라는 레포지토리를 만들어보았다. public interface MemberRepository extends JpaRepository { } 여기서 JpaRepository 안에 들어가보자. 패키지 위치는 org.springframework.data.jpa.repository 이다. JpaRepository 는 PagingAndSortingRepository 를 상속받고 있고, PagingAndSort..

    Spring Boot :: Spring Data JPA

    Spring Boot :: Spring Data JPA

    인터페이스만 정의해도 CRUD 기능을 사용할 수 있다 ? 테스트 코드를 통해서 CRUD 기능이 동작하는지 간단하게 테스트해보자. 테스트 순서 Entity 생성 순수 JPA Repository 생성 후 테스트 Data JPA Repository 생성 후 테스트 Entity 생성 먼저 Member Entity 를 만들자. @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id", "username"}) public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String usernam..

    JPA :: Auditing 엔티티 공통 정보 추가하기

    JPA :: Auditing 엔티티 공통 정보 추가하기

    Auditing JPA 에서 도메인을 RDB 테이블에 매핑할 때, 도메인들이 공통으로 가지고 있는 필드들 존재 생성일자, 수정일자, 생성자, 수정자 등 JPA 에서 Audit 기능 제공 Spring Data JPA 에서 시간 값을 자동으로 넣어줌 Auditing 예시 코드 build.gradle 에 의존성 추가 dependency { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' } 스프링 부트에서 gradle 로 의존성을 관리한다면 spring-boot-starter-data-jpa 만 추가해주면 된다. BaseTimeEntity.java @Getter @MappedSuperclass @EntityListeners(Audi..

    Java :: Stream으로 Random 수 생성

    Java :: Stream으로 Random 수 생성

    난수를 생성하는데 사용하는 Random 클래스 에는 아래 인스턴스 메소드들이 포함되어 있다. 이 메소드들은 해당 타입의 난수들로 이루어진 스트림을 반환한다. IntStream ints() LongStream longs() DoubleStream doubles() 이 메소드들이 반환하는 스트림은 크기가 정해지지 않은 무한 스트림 이므로 limit() 도 같이 사용해서 스트림의 크기를 제한해주어야 한다. limit() 은 스트림의 개수를 지정하는데 사용되고 무한 스트림을 유한 스트림으로 만들어준다. IntStream intStream = new Random().ints(); //무한 스트림 intStream.limit(5).forEach(System.out::println); //5개의 요소만 출력 매개변수..

    Java :: 람다와 스트림 (2/2)

    Java :: 람다와 스트림 (2/2)

    남궁성 저자의 Java의 정석 3판 스터디 스트림이란 ? 많은 수의 데이터를 다룰 때, 컬렉션이나 배열에 데이터를 담고, for 문이나 Iterator 를 이용해 코드를 작성했었다. 하지만 이런 방식의 코드는 너무 길고 가독성이 떨어진다. (재사용성도) 또 다른 문제는 데이터 소스마다 다른 방식으로 다뤄야한다는 것이다. 예를들어 List 를 정렬할 때는 Collections.sort() 를 사용해야 하고, 배열을 정렬할 때는 Arrays.sort() 를 사용해야 한다. 이런 문제점들을 해결하기 위해서 만든 것이 스트림(stream) 이다 ! 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메소드들을 정의해놓았다. 데이터 소스가 무엇이던 같은 방식으로 다룰 수 있게 되었고, 코드의 재사..