728x90

자바 25

동적 쿼리 - BooleanBuilder 사용

동적 쿼리를 해결하는 두가지 방식 BooleanBuilder Where 다중 파라미터 사용 @Test public void 동적쿼리_BooleanBuilder() throws Exception { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); Assertions.assertThat(result.size()).isEqualTo(1); } private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder builder = new BooleanBuilder(); if (userna..

QueryDSL 2022.06.25

@Converter (부제 - 데이터 변환)

컨버터(converter)를 사용하면 엔티티의 데이터를 변환해서 데이터베이스에 저장할 수 있다. 자바의 boolean 타입은 방언에 따라 다르지만 데이터베이스에 저장될 때 0 또는 1인 숫자로 저장된다. 그런데 데이터베이스에 숫자 대신 문자 Y 또는 N으로 저장하고 싶다면 컨버터를 사용하면 된다. CREATE TABLE MEMBER ( ID VARCHAR(255) NOT NULL, USERNAME VARCHAR(255), VIP VARCHAR(1) NOT NULL, -- 변환할 컬럼 PRIMARY KEY(ID) ) 매핑할 테이블을 보면 문자 Y, N을 입력하려고 VIP 컬럼을 VARCHAR(1)로 지정했다. @Entity public class Member { @Id private String id; p..

JPA 2022.06.21

다형성(Polymorphism)

다형성이라는 개념은 OOP에서 아주 중요한 개념이므로 모르면 OOP에 대해서 제대로 안다고 할 수 없는 개념입니다. 각 요소들이 여러 가지 자료형으로 표현될 수 있다는 것을 말하게 되는데, 반댓말로는 단형성이 있습니다. 한가지의 요소는 한가지의 형태로만 매칭된다는 것을 의미합니다. 여기 People이라는 클래스가 있습니다. 아주 간단하게 정의한 클래스죠. 그 안에는 printInfo라는 멤버메소드가 있군요. class People{ public void printInfo() { System.out.println("나는 사람입니다."); } } People 클래스에서 printInfo를 호출하게 되면 지가 사람이라는 군요. 그 밑에 Man과 Woman 클래스는 People클래스를 상속합니다. class M..

JAVA 2022.06.21

페이징과 정렬

스프링 데이터 JPA는 쿼리 메소드에 페이징과 정렬 기능을 사용할 수 있도록 2가지 특별한 파라미터를 제공한다. org.springframework.data.domain.Sort: 정렬 기능 org.springframework.data.domain.Pageable: 페이징 기능(내부에 Sort 포함) 파라미터에 Pageable을 사용하면 반환 타입으로 List나 org.springframework.data.domain.Page를 사용할 수 있다. Page를 사용하면 스프링 데이터 JPA는 페이징 기능을 제공하기 위해 검색된 전체 데이터 건수를 조회하는 count 쿼리를 추가로 호출한다. //count 쿼리 사용 Page findByName(String name, Pageable pageable); //c..

SpringDataJPA 2022.06.21

@Query 와 파라미터 바인딩

리포지토리 메소드에 직접 쿼리를 정의하려면 @org.springframework.data.jpa.repository.Query 어노테이션을 사용한다. 이 방법은 실행할 메소드에 정적 쿼리를 직접 작성하므로 이름 없는 Named 쿼리라 할 수 있다. 또한 JPA Named 쿼리처럼 애플리케이션 실행 시점에 문법 오류를 발견할 수 있는 장점이 있다. public interface MemberRepository extends JpaRepository { @Query("select m from Member m where m.username = ?1") Member findByUsername(String username); } 파라미터 바인딩 스프링 데이터 JPA는 위치 기반 파라미터 바인딩과 이름 기반 파라미터..

SpringDataJPA 2022.06.21

스프링 데이터 JPA 설정

필요 라이브러리 스프링 데이터 JPA는 spring-data-jpa 라이브러리가 필요하다. org.springframework.data spring-data-jpa 1.8.0.RELEASE 환경설정 스프링 설정에 XML을 사용하면 를 사용하고 리포지토리를 검색할 base-package를 적는다. 참고로 해당 패키지와 그 하위 패키지를 검색한다. 스프링 설정에 JavaConfig를 사용하면 아래와 같이 org.springframework.data.jpa.repository.config.EnableJpaRepositories 어노테이션을 추가하고 basePackages에는 리포지토리를 검색할 패키지 위치를 적는다. @Configuration @EnableJpaRepositories(basePackages =..

SpringDataJPA 2022.06.20

스프링 데이터 JPA 소개(부재 - 편리한 개발)

스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트 이 프로젝트는 데이터 접근 계층을 개발할 때 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결한다. 그 방법은 리포지토리를 개발할 때 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해준다. 따라서, 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다. public interface MemberRepository extends JpaRepository{ Member findByUsername(String username); } public interface ItemRepository extends JpaRepositor..

SpringDataJPA 2022.06.19
728x90