아주 간단히 말해 xml이나 애노테이션을 이용해 쿼리를 실행시켜주는 퍼시스턴트 프레임워크이다.Mybatis의 애노테이션을 이용해 데이터를 Insert하고 key값을 가져오는 방법은 아래와 같다.tbl_client라는 DB테이블에 새로운 레코드를 추가하고 Key를 가져
INSERT 시 pk 컬럼도 함께 주어야 Duplicate entry '0' for key 'PRIMARY' 에러가 안남. DB에 pk가 AI 체크 되어있는지도 확인
Model, View, Controller의 약자.소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴의 일종.비즈니스 로직과 UI를 분리하여 유지보수를 용이하게 해주는 장점이 있다.Controller에서 다루는 데이터들의 정의. DTO, DAO와 같은 아이들. Cont
Spring boot는 아래의 url 에서 간단하게 프로젝트를 생성하고 시작 할 수 있다. Spring initializer원하는 설정값을 입력하고 deplendencies 메뉴를 이용해 원하는 라이브러리를 쉽게 가져올 수 있다.Jar file로 압축된 프로젝트는 압축
@Configuration, @Bean 애너테이션을 사용해 Bean을 추가한다.Spring이 Spring Container에 등록되어있는 Bean을 자동으로 설정해준다.장점 : 코드가 상대적으로 짧다.단점 : 개발자가 Bean을 임의로 설정 할 수 없다.단점 : Set
생각나는 대로 작성중이라 정렬은 되어있지 않다 ... Ctrl + F Spring App @SpringBootApplication SpringBoot의 기능들을 활성화 시켜주며, 해당 어노테이션을 가진 파일의 위치부터 하위 디렉토리들까지 컴포넌트 스캔이 이루어진다.
필드주입 생성자주입 수정자(Setter)주입
스프링 Bean의 생명주기
작년 10월부터 회사에서 Mybatis를 사용하며 웹을 개발하고 있다.Mybatis는 데이터베이스에 테이블을 생성해두고 java 파일에 쿼리를 작성하며 DB에 접근했기 때문에 DTO에서 테이블 간의 관계에 대해 큰 염두를 하지 않고 코딩했었다하지만 최근 JPA를 공부하
Entity란 DB에서 영속적으로 저장된 데이터를 자바 객체로 매핑하여 '인스턴스의 형태'로 존재하는 데이터를 말합니다. 쉽게 말해서 DB와 직접 매핑되는 자바 객체입니다.특히 JPA를 사용하면 Entity == DB table모양이 되기때문에 구현하는 비즈로직들의 기
영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말합니다.해당 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용하지 못합니다.임의로 만들어낸 엔티티도 기존 식별자(id)를 가지고 있는 경우네 준영속성 엔티티로 볼 수 있습니다.변경 감지 기능 사용병합(merge) 사용영속성
Spring을 이용해 API를 개발할 때, 참고하면 좋을 수 있는 글. 예시로 다음과 같이 Member라는 Entity가 있다고 가정하자 등록(Post) API 요청값으로 Entity를 직접 받았을 때 문제 Entity에 API 검증 로직이 추가되어야 한다.(@No
작성 중
김영한님 강의에서 공부한 컬렉션 조회 최적화. 컬렉션 조회는 Entity에서 일대다 관계(OneToMany)를 조회하는 것이다. fetch join을 사용한 컬렉션 조회 Controller Repository OrderItems를 fetch join으로 한번에 불러온다 -> SQL이 1번만 실행된다. 'distinct'를 사용한 이유는 일대다(One...
Open Session In View의 줄임말. 하이버네이트에서 사용하는 단어이다.JPA에서는 Open EntityManager In View가 정식 명칭이지만 관례상 OSIV라고 한다.OSIV는 영속성 컨텍스트의 생존 범위를 지정하는 것이다.'spring.jpa.op
Spring JPA의 엔티티(Entity)들은 대부분 서로 연관관계를 가지고 있습니다.이런 연관관계를 통해 엔티티간의 관계를 알 수 있고 영속성 컨텍스트 안에서 다른 엔티티의 값들을 쉽게 가져올 수도 있습니다.Spring JPA에서 이런 연관관계를 어떻게 만드는지 알아
Spring Data JPA를 알기전 우선 JPA에 대해 알아야 합니다.JPA란 Java Persistentce API의 약자로 JAVA에서 관계형 DB를 사용하는 방식을 정의한 인터페이스입니다.말 그대로 인터페이스이기 때문에 구현체가 없습니다.Java로 서버를 조금이
Spring JPA를 잘 모르겠다면 아래 글을 읽고 오자!Spring Data JPASpring Data JPA를 사용한 코드를 보기 전, 순수한 JPA를 이용해 구현된 코드를 보자!Entity Manager의 persist, remove, createQuery를 사용
Spring Data JPA의 쿼리 매소드 기능 중 하나로 인터페이스를 정의하면 자동으로 쿼리를 생성해주는 기능이다.예를 들어 아래와 같은 'Member' 엔티티가 있을 때 'username'으로 Member를 찾는 쿼리를 만든다고 해보자.직접 JPQL로 쿼리를 작성해
네임드 쿼리란 말 그대로 이름을 붙여놓은 쿼리를 말한다.사전에 쿼리에 이름을 붙여놓고 사용 할 때, 쿼리의 이름을 사용하여 메서드를 구현하는 기능이다.예를 들어 아래와 같은 'Member' 엔티티가 있을 때 'username'으로 Member를 찾는 쿼리를 만든다고 해
@Query란?
Spring Data JPA는 다양한 반환 타입을 지원한다.컬렉션단건단건 Optional컬렉션으로 조회시 결과가 없다면 빈 컬렉션을 반환한다단건 조회 시 결과가 없다면 null을 반환하고만약 2건 이상의 결과가 있다면 javax.persistence.NonUniqueR
벌크성 쿼리란 DB에서 여러개의 레코드를 한번에 추가/수정/삭제하는 쿼리를 말한다.예를 들어 나이가 10인 레코드들의 나이를 1살씩 추가하는 벌크성 쿼리는 다음과 같다.JPA에서도 이런 벌크성 쿼리를 지원한다. 오늘은 그 중에서 벌크성 수정 쿼리를 볼 것이다.먼저 순수
연관된 엔티티들을 SQL 한번으로 조회하는 방법이다.fetch join도 있지만 조금 더 간단한 방법이다.member -> team이 지연로딩 관계로 엮여있다면, 아래 코드에서는 team 데이터를 조회 할 때 마다 쿼리가 실행된다.(N+1 문제 발생...)그렇다면 N+
Spring Data JPA에서 Repository는 인터페이스만 정의하고 구현체는 스프링이 자동으로 생성한다.만약 Spring Data JPA가 제공하는 인터페이스를 직접 구현하려고 한다면 구현해야 하는 기능들이 너무 많아 오히려 비효율적이다.그렇다면 다양한 이유로
개발을 하다보면 DB테이블 마다 꼭 들어가는 4가지 값이 있다.바로 등록일, 수정일, 등록자, 수정자 이다.Spring Data JPA에는 이 4가지를 자동으로 관리해주는 기능이 있다.알아보자!먼저 순수한 JPA를 사용해서 등록일과 수정일을 관리해보자@PrePersis
HTTP 파라미터로 넘어온 Entity의 ID(PK)로 Entity객체를 찾아서 바인딩하는 기능이다.PathVariable로 받은 'id'를 이용해 직접 값을 조회하고 username을 반환한다.HTTP요청은 회원 'id'를 받지만 중간에 도메인 클래스 컨버터가 동작하
Spring Data JPA가 제공하는 페이징과 정렬 기능을 스프링 MVC에서 편리하게 사용 할 수 있다.Spring Data JPA가 제공하는 페이징과 정렬 기능은 아래처럼 사용 할 수 있다.파라미터로 "Pageable"을 받을 수 있다.여기서 Pageable은 인터
인프런에서 김영한님의 강의를 들으면서 “JPA의 Entity객체에는 기본 생성자가 있어야 한다” 라는 말을 들은적이 있다.왜 그런 걸까? 알아보도록 하자.위의 이유를 알기 위해서는 먼저 java Reflection를 알아야 한다.구체적인 클래스 타입을 알지 못해도, 그
잘못된 설계에서 비롯된 문제이지만 기존 Java-Spring프로젝트를 Kotlin-String으로 이주하면서 @OneToOne 관계에서 지연 로딩기능이 동작하지 않는 문제가 생겼다.하여 오늘은 관련 내용을 공부했다이유는 다음과 같다.JPA는 객체의 참조가 프록시 기반으