
String query = "select m.username, 'HELLO', true from Member m where m.memberType = jpabook.jpashop.domain.MemberType.ADMIN "; List resultList = em.createQuery(query).getResultList(); for (Object[] o : resultList) { System.out.println("object" + o[0]); System.out.println("object" + o[1]); System.out.println("object" + o[2]); } 혹은 String query = "select m.username, 'HELLO', true from Member m " +..

JPQL 소개 - JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리 하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. - JPQL은 SQL을 추상화해서 특정 데이터 베이스 SQL에 의존하지 않는다. - JPQL은 결국 SQL로 변환된다. JPQL 문법 - select m from Member as m where m.age > 18 - 엔티티와 속성은 대소문자 구분O (Member, age) - JPQL 키워드는 대소문자 구분X (SELECT, FROM, where) - 엔티티 이름 사용, 테이블 이름이 아님(Member) - 별칭은 필수(m) (as는 생략 가능) Member singleResult = em.createQuery("select m from Member m where m.u..

다양한 쿼리 방법 을 지원 -JPQL - JPA Criteria - QueryDsl - 네이티브 SQL - JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL 소개 - 가장 단순한 조회 방법 ㄴ EntityManager.find() ㄴ 객체 그래프 탐색 (a.getB().getC()) - 나이가 18살 이상인 회원을 모두 검색하고 싶다면? JPQL - JPA를 사용하면 엔티티 객체를 중심으로 개발 - 문제는 검색 쿼리 - 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 - 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 - 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 - JPA는 SQL을 추상화..

값 타입 컬렉션 - 값 타입을 하나 이상 저장할 때 사용 - @ElementCollection, @CollectionTable 사용 - 데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없다. - 컬렉션을 저장하기 위한 별도의 테이블이 필요함 package jpabook.jpashop.domain; import javax.persistence.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @Entity public class Member extends BaseEntity{ @Id @GeneratedValue priv..

값 타입의 비교 - 동일성(identity) 비교 : 인스턴스의 참조 값을 비교, == 사용 - 동등성(equivalence) 비교 : 인스턴스의 값을 비교, equals() 사용 - 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 함 - 값 타입의 equals() 메소드를 적절하게 재정의 (주로 모든 필드 사용) 값을 비교하기 위해서 equals로 값 비교로 사용한다. package jpabook.jpashop.domain; import javax.persistence.Embeddable; import java.util.Objects; @Embeddable public class Address { private String city; private String street; private..

- 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 값 타입 공유 참조 - 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험함 - 부작용 (side effect) 발생 부작용이 있는 것은 이런 코드인데 Address address = new Address("city", "street", "zup"); Member member1 = new Member(); member1.setUsername("hello1"); member1.setAddress(address); em.persist(member1); Member member2 = new Member(); member2.setUsername("hello2"); memb..
- Total
- Today
- Yesterday
- Java
- thymleaf
- 인터셉터
- JPA
- BindingResult
- SpringBoot
- HTTP
- 로그인
- 향해플러스
- 향해플러스백엔드
- exception
- Intercepter
- rejectValue
- 백엔드 개발자 역량
- hypertexttransferprotocol
- 향해99
- 백엔드 개발자 공부
- 스프링공부
- jpa api
- ArgumentResolver
- React
- 항해플러스
- filter
- 스프링부트
- 컨트
- reject
- 리터럴
- 항해99
- react실행
- 예외처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |