자바와 데이터베이스는 서로 독립적이다. JDBC를 통해 자바로 데이터베이스에 접속하는 것이다. 즉 JDBC는 자바와 데이터베이스의 다리역할이다.도커를 사용해 postgresql을 띄워서 사용한다.도커는 포트를 매핑시켜 로컬에서도 접속할 수 있게 해주는 것이다.참고: h
Object-Relation Mapping의 약자이다.도메인 모델을 사용하는 것이 Obeject 데이터베이스에 있는 테이블이 Relation을 나타낸다고 생각하면 된다.Hibernate나 JPA같은 ORM tool을 사용하는 방법은 간단하게 아래와 같다.JDBC와 달리
스프링부트 프로젝트를 하나 생성한다.(세팅하는 시간이 확 줄어들기 때문)아래 링크를 참조하여 데이터베이스를 띄운다.참고: https://velog.io/@max9106/Spring-Boot-PostgreSQLJPA 프로그래밍에 필요한 의존성과 데이터베이스 드라
Entity 매핑 JPA 프로그래밍에서 가장 기본적인 것이다. 도메인 모델을 만들었으면, 하이버네이트에게 만든 도메인 모델을 릴레이션에 어떻게 적용시킬지 정보를 줘야한다. 방법은 두가지가 있다. 애노테이션을 사용하는 방법 xml을 사용하는 방법 그렇지만 요즘은 2
식별자의 유무독립적으로 존재가능 한지 확인위의 그림의 Value타입은 기본적인 Value타입이다.Composite Value타입은 기본적인 Value타입보다 단위가 조금 더 크다. 흔한 예시로 address가 있다.(address는 엔티티가 아니라는 가정)Account
Account, Study 엔티티를 추가해준다.관계는 오직 2개의 entity끼리의 관계이다.Study와 Account의 관계를 설정해보겠다.한 사람은 여러개의 Study를 만들 수 있다.따라서 Study 입장에서는 ManyToOne 이다.(클래스 안의 referenc
cascade 옵션이란 @OneToMany 나 @ManyToOne에 옵션으로 줄 수 있는 값이다.Entity의 상태 변화를 전파시키는 옵션이다.만약 Entity의 상태 변화가 있으면 연관되어 있는(ex. @OneToMany, @ManyToOne) Entity에도 상태
Fetch 모드란? 연관 관계에 있는 엔티티의 정보를 어떻게 가져올 것인가에 대한 설정이다. @OneToMany 등에 fetch 옵션으로 모드를 설정할 수 있다.지금 가져올 것이다 -> Eager나중에 가져올 것이다 -> Lazy기본적으로 OneToMany관계는 Laz
JPA 또는 hibernate를 이용하여 DB에서 데이터를 가져오는 방법.Java Persistent Query Language(Hibernate Query Language)의 약자이다.SQL과 비슷하지만, 데이터베이스 테이블 기준이 아니라, 엔티티 모델 기준이라는 점
Data Access Object 역할을 하는 Repository를 만들 수 있다.예전에는 아래와 같이 Repository를 만들어 사용했었다.그러나, 이렇게 하면 테스트 코드도 작성해야하고, 여러 번거로움이 많다.Spring data JPA는 repository를 오
JpaRepository는 PagingAndSortingRepository를 상속받고있고, PagingAndSortingRepository는 CrudRepository를 상속받고있고, CrudRepository는 Repository를 상속받고 있다.Repository:
자바 8부터 Optional을 지원해준다.리턴 값이 하나인 경우에 Optional을 써서 해당 엔티티의 리턴 타입을 isEmpty등의 Optional을 지원해주는 여러 메서드를 사용해서 테스트를 쉽게 할 수 있다.(점점 null을 안쓰는 추세이기 때문에 Optional
Query 만들기 쿼리를 만드는 방법은 크게 3가지가 있다. CREATE(메서드 이름을 분석해서 쿼리를 만드는 방법) 스프링 데이터 JPA가 메서드 이름을 분석해서 자동으로 쿼리를 만들어준다. 예를 들면 아래같은 경우이다. > List findByTitleCont
쿼리메소드로 해결을 할 수 없는 경우 코딩으로 구현할수가 있다.기능을 새로 추가 할 수도 있고, 기존 기능을 덮어 쓸 수도 있다. 새로 기능을 추가해보겠다.그럴려면 임의로 인터페이스를 만들어줘야한다.(이름은 맘대로 하면 된다.)Post를 가져오는 메서드를 만들어보겠다.
Domain Event Publishing 도메인의 변화. 즉, 도메인의 entity의 변화를 이벤트로 발생시키는 것. 그 이벤트를 리스닝하는 이벤트 리스너가 domain entity 클래스의 변화를 감지하고, 어떠한 이벤트 기반의 프로그래밍을 할 수 있게 하는 것.
Query를 자바코드로 만들 수 있게 해주는 것이다.타입 세이프하다.Predicate라는 인터페이스 자바코드로 조건문을 표현할 수 있다. 조건문들을 조합할 수도 있고 따로 관리 할 수도 있다. 위의 장점들 때문에 QueryDSL을 사용한다.기존의 방법으로 메서드를 만들
제공하는 기능 DomainClassConverter PathVariable 또는 RequestParameter로 들어오는 도메인의 Id값은 도메인으로 변환받아서 파라미터로 받을 수 있다. Converter는 하나의 타입을 다른 타입으로 변환해주는 것이다.(ex. L
repository.save()를 하면 엔티티가 하나 추가된다.save()는 추가 뿐만 아니라 수정에도 사용한다.save()는 이 객체가 새로운 객체인지 기존 객체인지 판단하여, 새로운 객체가 아닌경우 EntityManager의 merge쪽으로 보낸다. EntityMa
And, OrIs, EqualsLessThan, LessThanEqual, GreaterThan, GreaterThanEqualAfter, BeforeIsNull, IsNotNull, NotNullLike, NotLikeStartingWith, EndingWith, C
쿼리 메서드마다 연관 관계의 fetch모드를 유연하게 설정할 수 있는 기능을 제공해준다.연관관계(OneToMany, ManyToOne 등)에 제공할 수 있다.끝이 One으로 끝나는 연관관계는 기본값이 EAGER모드이고, 끝이 Many로 끝나는 연관관계는 기본값이 LAZ
엔티티의 속성들이 너무 많을 때, 일부 데이터만 가져오는 방법이다.아래와 같이 comment 엔티티가 있다고 하자위의 정보들 중 comment, up, down만 관심있다고 가정하여, 임의로 인터페이스를 만들어준다.어떤 Post안에 있는 comment를 조회한다.(fi
QueryDSL의 Predicate와 유사하다.이 기능을 사용하기 위해서는 의존성을 추가해줘야한다.maven plugin 설정도 해준다.IntelliJ의 Preference > Build, Execution, Deployment > Compiler > Annotatio
트랜잭션 스프링 프레임워크에 관련된 내용이다. 기본적으로 모든 repository는 기본적으로 트랜잭션이 적용되어 있다.(repository 구현체인 SimpleJpaRepository에 @Transactional이 적용되어 있기 때문이다.) @Transactiona
어떠한 entity의 변화가 발생했을 때, 변화가 언제, 누구에 의해 발생했는지를 기록하는 기능. Account, Comment라는 Entity가 있다.comment라는 엔티티에 변경이 있을 때 마다, 언제 만들어졌으며(created), 언제 업데이트가 되었는지(upd