애정코딩 💻

Hibernate 에서 제공하는 @NotNull & @NotEmpty & @NotBlank 사용하기

Hibernate 가 뭐지? 하이버네이트 ORM은 자바 언어를 위한 객체 관계 매핑 프레임워크이다. 객체 지향 도메인 모델을 관계형 데이터베이스로 매핑하기 위한 프레임워크를 제공한다. JPA의 구현체의 한 종류로, JPA 인터페이스를 구현하며 내부적으로 JDBC API 를 사용한다. Hibernate 는 SQL 을 직접 사용하지 않고 메서드 호출만으로 쿼리를 수행합니다. ( SQL 반복작업을 하지 않아도 된다 ) 컬럼이 변경되었을 때, 테이블과 관련된 DAO 의 파라미터, 쿼리 ,SQL 등을 대신 수행해주기 때문에 특정 벤더사에 종속적이지 않습니다. 이러한 특징은 유지보수 측면에서도 큰 장점입니다. 예를 들어 Mysql 을 사용하다가 ORCLE 로 변경하더라도 Hibernate 는 변경한 ORCLE 로 ..

WEB/JPA 2022.08.16 Joana

[Querydsl] 내가 찾아 쓰려고 정리한 글

🏃‍♂️ 계속해서 업데이트 하기 🏃‍♂️ 마지막 업데이트 2022/03/29 1. Querydsl 을 왜 사용할까? 2. 작동방식? 3. 의존성 4. Repository 구조 5. Projection 의 대한 고찰 ... 6. 동적쿼리 (BooleanBuilder) 7. ExpressionUtils 8. 정렬 타입에 따른 정렬 처리 Querydsl 을 왜 사용할까? JPA 를 사용하면서 (@Query 포함) 조회 기능에 대한 한계가 있다. 동적인 쿼리인 경우인데 예를 들어 주문 페이지를 검색 한다고 했을 때 카테고리 or 상품명 or 기업명 등등... 으로 검색 조건이 달라지는 부분이다. 그래서 사용하게 된 것이 바로 Querydsl 프레임워크 이다. - 타입 체크가 바로 가능하다 - 자바 코드를 기반으..

WEB/JPA 2022.03.15 Joana

7. 자바 ORM 표준 JPA 프로그래밍 - 프록시와 연관관계 관리

프록시 Team에 속해있는 Member 를 조회할 시 Team까지 조회할 필요가 있을까? 비지니스 로직에서 필요하지 않을 때가 있는데 항상 Team을 함께 조회한다면 낭비가 발생된다. 이 낭비를 하지 않기 위해 프록시라는 갠며으로 해결한다. - 실제 클래스를 상속 받아서 만들어지기 때문에 겉 모양이 같다 - 사용하는 입장에서는 진짜, 가짜 객체인지 구분하지 않고 사용하면 된다. - 프록시 객체는 실제 객체의 참조를 보관 -> 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 // 호출한 순간 쿼리 실행 Member findMember..

WEB/JPA 2021.05.18 Joana

6. 자바 ORM 표준 JPA 프로그래밍 - 고급매핑

상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다.(슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다) 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 1. 각각 테이블로 변환 -> 조인 전략 (정석) - 테이블 정규화 - 외래 키 참조 무결성 제약조건 활용 가능 - 저장공간 효율화 - 조회시 조인을 많이 사용 -> 성능 저하, 조회 쿼리가 복잡함 - 데이터 저장시 INSERT 쿼리가 2번 호출 된다. 비지니스적으로 중요하고 복잡할 때 선택! 부모 클래스 설정 @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn 자식 클래스 설정 -> dtype에 표시될 이름을 정해 줄 경우 @DiscriminatorVa..

WEB/JPA 2021.05.17 Joana

5. 자바 ORM 표준 JPA 프로그래밍 - 다양한 연관관계 매핑

연관관계 매핑시 고려사항 3가지 1. 다중성 2. 단방향, 양방향 3. 연관관계의 주인 - 객체 양방향 관계는 참조가 2군데 있기 때문에 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 - 외래 키를 관리하는 참조 - 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회 다대일[N:1] 가장 많이 사용함 단반향 아래와 같이 [N]에서 외래 키를 관리하고 Team을 조회 하고 추가할 수 있다. Team에 서는 조회하지 못함 -> Team에서 Member을 조회하는일이 빈번하다고 하면 -> 양반향 으로 매핑해주는게 좋음. 양반향 단반향에서 TEAM이 MEMBER를 mapped by 를 추가하여 MEMBER를 조회할 수 있다. (읽기 전용) 일대다[1:N] 1이 연관관계의 주인이다. 단방향 TEAM 에서..

WEB/JPA 2021.05.14 Joana

4. 자바 ORM 표준 JPA 프로그래밍 - 연관관계

목표 - 객체와 테이블 연관관계의 차이를 이해 - 객체의 참조와 테이블의 외래 키를 매핑 객체와 테이블 연관관계의 차이를 이해 객체를 테이블에 맞추어 모델링 했을 때 문제점 (참조 대신에 외래 키를 그대로 사용) 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾기 때문에 아래와 같이 번거로운 코드가 발생된다. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); // 외래키 식별자를 직접 다룬다. member.setTeamId(team.getId()); em.persist(member); // 멤버의 ..

WEB/JPA 2021.05.14 Joana

3. 자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑

객체와 테이블 매핑 @Entity - @Entity가 정의되어있는 클래스는 JPA가 관리한다. - 기본 생성자가 꼭 있어야 한다. - 속성: name ->JPA에 사용할 엔티티 이름을 지정한다, 기본값 : 클래스 이름을 그대로 사용 @Table - name, catalog, schema 등등. . 필드와 컬럼 매핑 @Column 데이터베이스 컬럼명을 설정해줄 수 있다. unique(실무에서 잘 사용하지 않는다 -> 유니크 제약조건 이름을 설정할 수 없다 대신 @Table(uniqueCons.. 사용), length 등 설정할 수 있다. @Temporal 날짜 타입 매핑 하지만 LocalDate, LocalDateTime을 사용할 때는 생략 가능하다. @Enumerated enum 타입 매핑 default..

WEB/JPA 2021.05.13 Joana

2. 자바 ORM 표준 JPA 프로그래밍 - 내부 동작 방식

JPA에서 가장 중요한 2가지 - 객체와 관계형 데이터베이스 매핑하기 - 영속성 컨텍스트 영속성 컨텍스트가 뭘까? JPA를 이해하는데 가장 중요한 용어이다. "엔티티를 영구 저장하는 환경"이라는 뜻. -> EntityManager.persist(entity); - persist는 사실 DB에 저장하는게 아니고 Entity를 영속성 컨텍스트에 저장한다는 뜻이다. - 논리적인 개념으로 눈에 보이지 않는다. EntityManager를 통해서 영속성 컨텍스트에 접근한다. - 여러개의 EntityManager가 하나의 영속성 컨텍스트를 바라본다. 엔티티의 생명주기는 어떻게 될까? 비영속 - 영속성 컨텍스트와 전혀 관계과 없는 새로운 상태 영속 - 영속성 컨텍스트에 관리되는 상태 준영속 - 영속성 컨텍스트에 저장되..

WEB/JPA 2021.05.13 Joana

1. 자바 ORM 표준 JPA 프로그래밍 - 간단한 실습

아래와 같이 작성했을 때 저장이 될까? 에러가 생긴다. 왜냐하면 JPA는 트렌젝션이는 단위가 매우 중요하기 때문에 JPA의 모든 기능은 트렌젝션 안에서 이루어져야 한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); Member member = new Member(); member.setId(1L); member.setName("AE"); em.persist(member); em.close(); emf.close(); 트렌젝션을 추가한 코드 EntityManagerFactory emf = Persistence.createEntityMa..

WEB/JPA 2021.05.13 Joana

0. 자바 ORM 표준 JPA 프로그래밍 - 기본편

www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔 www.inflearn.com 인프런에 있는 강의를 보며 정리한 내용입니다! 목표 : 객체와 테이블 설계 매핑 - 객체와 테이블을 제대로 설계하고 매핑하는 방법 - 기본 키와 외래 키 매핑 - 1:N, N:1, 1:1, N:M 매핑 - 실무 노하우 + 성능 고려 - JPA 내부 동작 방식 이해하기 - JPA가 언제, 어떤 SQL을 만들어 실행하는지 이해 J..

WEB/JPA 2021.05.11 Joana

JAP Pageable 사용하기

Page까지 왔다는건... 기본적인 CRUD를 알고 계신 상태로 이해하고 작성하겠습니다! 할일 : 간단한 리스트 데이터에 Page, Sort 구현하여 API를 구현한다. Service Entity자체를 반환하는건 절때로 하지 않기 때문에 Response dto를 만들어서 반환하기로 합니다. Repository에서 받아온 Page UserEntity를 Response에 맵핑해줘야 하기 때문에 반환할때 생성자에 stream을 사용하여 각각 맵핑 해줍니다! 여기서 finAny().orElse("") 는 user의 이미지가 필수는 아니기 때문에 NPE이 발생할 수 있기 때문에 null일 경우 String 타입의 null을 반환하게 했습니다. 이부분은 좀더 찾아서 업데이트 하도록 하겠습니다! public Page..

WEB/JPA 2021.02.03 Joana