Programming-[Backend] (394) 썸네일형 리스트형 [spring data JPA]4. 구현체 분석, 기타 기능 : Specification, Query by Example, Projections, Native query 1. 스프링 데이터 JPA 구현체 분석1 이때까지 학습했던 스프링 데이터 JPA의 JpaRepository를 자세히 살펴보자. 스프링 데이터 JPA의 구현체는 JpaRepository의 구현체로, SimpleJpaRepository라는 클래스이다. EntityManager를 사용한다. 스프링 데이터 JPA의 구현체들도 결국엔 EntityManager를 사용한다. em으로 축약해서 사용하고 있고, 필요하면 JPQL문법을 사용해서 구현이 된 것을 확인할 수 있다. @Repository를 사용한다. 클래스에 @Repository가 정의된 것을 확인할 수 있다. 이렇게 함으로써 기본적으로 스프링에서 요구하는 sepc을 맞출 수 있다. 또한 Repository에서 발생하는 Exception들을 스프링에 맞게 변환.. [spring data JPA] 3. 확장 : Auditing, Paging - @CreatedAt, @PageableDefault 등 1. 사용자 정의 레포지토리 구현 JpaRepository를 상속받는 Repository를 사용해야되는 경우, 내가 정의하는 메소드 외에 기본적으로 Spring Data JPA에서 제공하는 모든 메서드를 구현해야되서 사용이 힘들다. 따라서 내가 정의한 메서드만 Override 할 수 있도록 사용자 정의 레포지토리를 작성할 수 있다. 인터페이스를 MemberRepository 라고 하고, 그에 맞는 구현체는 MemberRepositoryImpl이라고 작성해주면, 스프링 부트가 알아서 사용자 정의 구현체임을 식별하여 Spring data JPA의 기능을 활용할 수 있도록 처리해준다. [인터페이스 이름 + Impl] 이라는 규칙을 적용해야되는 것을 기억하자. xml 이나 JavaConfig에서 설정을 바꾸어 .. [spring data JPA] 2. 페이징과 정렬, 벌크 연산 @EntityGraph, JPA Hint Lock 1. 순수 JPA 페이징 JPA만 사용해서 페이징을 하는 방법은, JPQL문을 작성해서 setFirstResult, setMaxResults를 넣어주면 된다. Repository 파일에 다음과 같이 작성한다. 이미 API 상 setFirstResult, setMaxResults가 주어져서 상당히 편하다. setFirstResult는 어디부터 시작할지 결정하는, 말 그대로 offset이고, limit은 offset부터 몇개까지 결과를 반환할지를 결정한다. totalCount 메서드로 총 갯수를 구해서 구 메서드의 합계 결과를 바탕으로 Page 결과를 도출할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 public List findByPage(int age, int offset, int .. [TIL][작성중] 자바 일급 객체로 소프트웨어 안정성 높이기, 한계점 https://jojoldu.tistory.com/412 일급 컬렉션 (First Class Collection)의 소개와 써야할 이유 최근 클린코드 & TDD 강의의 리뷰어로 참가하면서 많은 분들이 공통적으로 어려워 하는 개념 한가지를 발견하게 되었습니다. 바로 일급 컬렉션인데요. 왜 객체지향적으로, 리팩토링하기 쉬운 코 jojoldu.tistory.com 일급객체 만들기 : 객체를 클래스로 Wrapping하고 객체에 add나 set을 할 수 없게 막는다. 1. 불변으로 만들 수 있다. Setter, Getter를 만들지 않고, validation하는 코드를 넣어놓으면 외부에서 다른 사람이 파라미터로 받아오는 객체를 마음대로 수정할 수 없다. 2. 하나의 기능을 온전히 표현한다. 각 필드값을 마음대로 .. [TIL][TDD] TDD 4편. 자바 Reflection 의 원리와 활용, Spring의 ReflectionTestUtils.invokeMethod 1. Reflection의 정의와 원리 자바의 Reflection은 어떤 클래스의 구현 내용을 모를 때, 해당 내용들을 조회할 수 있도록 자바에서 제공하는 API라고 한다. 이것은 참조 2에 따르면, 자바는 클래스 파일을 바이트 코드로 컴파일하여 static 영역에 위치하게 되므로 여기서 해당 클래스의 정보를 가져올 수 있는 것이라고 한다. 가져올 수 있는 정보는 아래와 같다. ClassName Class Modifiers Package Info Superclass Implemented interfaces Constructors MethodsFields Annotations 2. Reflection 사용해보기 TestClassForReflection라는 클래스를 임시로 만들고 .class 뒤에 .을 붙이.. [TIL] 자바 리스트 2개 이상 stream으로 순차적으로 비교 처리하기 : LongStream, IntStream for문을 안쓰고 길이가 같은 리스트의 정보들을 순차적으로 처리할려면, stream 문법으로 LongStream 또는 IntStream을 사용하면 된다. for(int i = 0; ...) 을 쓰지 않는 방법이다. 1 2 3 4 5 6 7 8 9 10 int size = AList.size(); List result = IntStream.range(0, size).boxed().map(i -> { ADto aDto = AList.get(i); BDto bDto = BList.get(i); //필요한 로직 처리... //ex) aDto.setName(bDto.getName()); return aDto }).collect(Collectors.toList()); Colored by Color Scripter cs [TIL][TDD] TDD 3편. 인터페이스 분리로 테스트는 분리, 서비스는 트랜잭션으로 묶기 TDD 2편에서는 서비스 메서드를 기능(의미)적으로 분리해가며 작성하는 것이 TDD 방식의 기본이라고 기록했다. 이번 글에서는 이것을 각 인터페이스로 분리해서 설계하는 방법에 대해 정리한다. 정확한 정보는 아닐 수 있으니 이 글을 발견하시는 분이 있다면 참조만 하시길. TDD 2편 [TIL][TDD] 테스트 코드 기반으로 짜되, service 코드에서 의미적으로(기능적으로) 분리해가며 작성하기 1. 문제점 1-1. 메서드를 분리하면 트랜잭션 하나로 묶이지 않는다. 다른 사용자가 실행 순서를 기억해야한다. 2편에서 다룬 것처럼 서비스 코드를 메서드별로 분리하면서 테스트하면 좋다. 그런데, 분리만 하다보면 모든 서비스 코드가 개별 트랜잭션으로 분리되고, Controller에서 각 service 메서드들을 불.. [spring data JPA] 1. 초기 설정 및 Data Jpa 기본 1. 초기 세팅 이전 강의와 거의 동일하게 프로젝트를 만들고 환경 설정을 해준다. application.yml 파일은 다음과 같다. 환경 설정에서 띄어쓰기, 오타 등의 실수는 치명적이다. 정확히 써야한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 spring: datasource: url: jdbc:h2:tcp://localhost/~/datajpa username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show-sql: true format_sql: true logging.level: org.hibernate.S.. 이전 1 ··· 31 32 33 34 35 36 37 ··· 50 다음