분류 전체보기
-
Spring Data JPA 3. 쿼리 메서드Spring/Spring Data JPA 2020. 6. 2. 00:30
쿼리 메서드 정의하기 2가지 방법 메서드 이름에서 직접 쿼리를 끄집어내는 방법 직접 정의되어 있는 쿼리를 애노테이션을 통해 가져오는 방법 Query를 가져오는 전략 3가지 EnableJPARepositories에 보면 queryLookupStrategy라는 애노테이션이 있고 3가지 중 하나를 설정할 수 있다. 1. CREATE 쿼리 메소드 이름 가지고 쿼리를 만든다. well-known prefix를 제거하고 나머지를 파싱해서 메서드를 만든다. findById 등 2. USE_DECLARED_QUERY 미리 정의된 쿼리를 찾으려 한다. 찾지 못하면 예외를 던지게 된다. App이 뜨는 시점에 쿼리를 못 찾으면 fail. 3. CREATE_IF_NOT_FOUND ( default ) 1,2를 합친 것. 선언..
-
Spring Data JPA 2. null 처리 관련 애노테이션Spring/Spring Data JPA 2020. 6. 1. 23:00
리포지토리를 튜닝해보기 리포지토리는 Repository, CrudRepository, PagingAndSortingRepository를 상속받을 것이다. @RepositoryDefinition 이런 상속을 받고 싶지 않은 경우 애노테이션으로 처리가 가능하다. @RepositoryDefinition로 가능하며 CrudRepository를 상속받는 식으로 만든다면 메서드 들은 전부 공개가 되게 되지만 이런 어노테이션 방식은 노출하고 싶은 메서드만 노출이 가능한 것 같다. @NoRepositoryBean 다음과 같이 CRUD repository를 대신하는 Repository만 쓰고 Repository는 빈 영역이니 직접 CRUD repository를 만들고 선택적인 노출을 가능하게 할 수도 있다. 스프링 데이..
-
WebMvcConfigurer 살펴보기Spring/Spring MVC 2020. 5. 31. 21:13
WebMvcConfigurer로 할 수있는 일들을 살펴보았다. addFormatters addInterceptors addResourceHandlers 하지만 이 외에도 WebMvcConfigurer는 다양한 설정들을 제공한다. addReturnValueHandlers ReturnValueHandler는 핸들러에서 리턴되는 Person , String 등을 처리하는 핸들러 addReturnValueHandlers를 통해 리턴 값 핸들러를 설정 할 수 있다. 스프링 MVC가 제공하는 리턴 값 핸들러 이외에 커스텀한 리턴 핸들러를 추가할 수 있다. 이러한 리턴타입이 오면 이런식으로 처리하게끔 알려줄 수 있다. addViewController /hi 를 입력했을떄 hi에 해당하는 뷰로 바로 이동시키려면? 이런..
-
Json 컨버터Spring/Spring MVC 2020. 5. 28. 22:03
기본 HTTP message Converter가 제공이 되지만 의존성을 통해 컨버터를 등록하는 경우가 많다. 기본적으로 스프링 부트는 스타터 웹만 추가해도 JacksonJSON을 의존성에 넣어준다. (스프링 부트 기반이 아니라면 JacksonJSON 의존성을 넣어주면 된다) 따라서 해당 컨버터를 사용할 수 있게 되고 jacksonJSON이 제공하는 ObjectMapper을 활용할 수 있다. 의존성만 추가가 되면 아무런 설정을 하지 않아도 JSON 컨버터를 사용할 수 있다. 다음과 같이 요청 본문으로 들어오는 Json을 person 객체로 받아보자. 그리고 person을 그대로 return 해보자. 이때 응답으로 보내는 리턴 타입인 Person을 Json 타입으로 보내보자. 여러 가지 Http Messag..
-
HTTP 메세지 컨버터와 StringSpring/Spring MVC 2020. 5. 28. 00:02
@RequestBody를 통해 요청 본문에 있는 메시지를 읽어 들이거나 @ResponseBody 나 @RestController를 통해 응답 본문에 메시지를 작성할 때 HTTP 메세지 컨버터를 통해 컨버전하게 된다 여러 가지 기본 Http message converter 바이트 배열 컨버터 문자열 컨버터 Resource 컨버터 From 컨버터 : Html에서 보내는 Form데이터를 Map으로 변환 ( or Map -> Form ) 스프링 부트 역시 기본 HTTP message Converter를 사용한다. 요청 본문에 있는 문자열을 그대로 문자열에 받거나 핸들러에서 리턴하는 문자열을 그대로 응답 메시지에 쓰는 것이 가능하다. 특정 classpath에 class가 있는 경우에만 등록이 되는 게 HTTP 테..
-
JPA의 Dialect(방언)Spring/Spring Data JPA 2020. 5. 25. 15:09
Dialect(방언)이란? SQL은 다음과 같이 표준 SQL인 ANSI SQL이 있으며 ANSI SQL 이외에 각 DBMS Vendor(벤더, 공급업체)인 MS-SQL, Oracle, MySQL, PostgreSQL 에서 자신만의 기능을 추가한 SQL이 있다. ANSI SQL이 모든 DBMS에서 공통적으로 사용가능한 핵심 표준 SQL이지만 여러 제품의 DBMS에서는 자신만의 독자적인 기능을 위해서 추가적인 SQL을 만들었다. 예를 들어 MS-SQL의 T-SQL 그리고 Oracle의 PL/SQL이 대표적이다. 또한 기본키를 할당하는 방법에도 MySQL의 경우는 AUTO_INCREMENT라는 기능과 오라클 DB에는 시퀀스라는 기능이 있다. 이것은 마치 대한민국의 수도인 서울에서 사용하는 표준어가 있고 충청,..
-
영속성 컨텍스트(persistence context)Spring/Spring Data JPA 2020. 5. 24. 00:53
Entity 객체의 생명주기 New ( 비 영속 객체 ) : Entity 객체가 DB에 반영되지 않았고, Managed 상태가 아닌 상태를 말한다. 이 상태는 new 키워드를 사용해 생성한 Entity 객체를 말하고 영속화되지 않는다. Managed ( 영속 객체 ) : . New (비 영속 객체) 상태에서 persist 메소드를 이용해 저장한 경우이다. Removed ( 삭제 객체 ) : 이 상태에 객체는 작업 단위가 종료되는 동시에 DB에서 삭제되므로 재사용하면 안된다. Detached ( 준 영속 객체 ) : 이 상태는 더 이상 DB와 동기화를 보장하지 않는다. 다시 Managed (영속 객체) 상태로 만들기 위한 merge 메소드가 존재한다. 기본적으로 Open EntityManager in Vi..
-
왜 Wrapper 클래스는 쓰이는 걸까?JAVA/Java 2020. 5. 21. 22:46
자바는 기본 타입 ( byte, char, short, int, long , float, double, boolean )의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 포장 ( Wrapper ) 객체 라고 하는데, 기본 타입의 값을 내부에 두고 포장하기 때문에 포장 객체이다. 포장 클래스는 java.lang 패키지에 포함되고 다음과 같이 기본 타입에 대응되는 클래스들이 있게 된다. 이러한 Wrapper 클래스를 사용하는 이유는 뭘까? 다음과 같이 4가지로 정리해 볼 수 있을 것 같다. 1. 래퍼 클래스는 기본 데이터 타입을 Object로 변환할 수 있다. 메소드에 전달된 인수를 수정하려는 경우 오브젝트가 필요하다. ( 기본 유형은 값에 의한 변경 Object는 참조에 의한 변경이기 때문이다. ) 2...