분류 전체보기 (1002) 썸네일형 리스트형 [TIL][링크] 트랜잭션의 전파, Spring @Transactional 중첩 참조 링크의 블로그에 너무 잘 정리되어 있어서 읽어보면 될 것 같다. 요약하자면 다음과 같다. 스프링에서는, @Transactional의 propagation 설정을 통해 트랜잭션의 전파를 설정할 수 있다. 1. REQUIRED 기본 설정은 REQUIRED이다. 트랜잭션A(부모) 내부에 트랜잭션B(자식)가 실행되는 경우, 트랜잭션A에 트랜잭션 B가 합류한다. 다시말해 커밋이나 롤백의 기준이 트랜잭션 A만 존재하는 경우와 같다. 아래는 자식 트랜잭션에 주는 속성을 소제목과 같이 바꿨을 때의 동작 방식을 설명한다. 2. REQUIRES_NEW A, B 개별 트랜잭션으로 취급한다. 각각 커밋과 롤백이 이루어진다. 3. MANDATORY 부모에 자식이 합류한다. 다만, 부모 트랜잭션이 없으면 에러가 발생한다. .. [비공개] Weekly Report - 21/11/15~21/11/21, 511일차 보호되어 있는 글입니다. [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 이전 1 ··· 75 76 77 78 79 80 81 ··· 126 다음