식별자로 조회EntityManager.find() 사용정의데이터베이스에서 엔티티를 식별자(ID)를 사용하여 조회하는 가장 기본적인 방법엔티티 객체를 시작점으로 객체 그래프 탐색을 통해 관련됨 다른 엔티티들에 접근코드// EntityManager를 사용하여 ID로 엔티티 조회 MyEntity entity = entityManager.find(MyEntity.class, entityId);객체 그래프 탐색객체를 통해 연관된 다른 객체로 이동하는 것a.getB() getC() 같은 연쇄 호출을 통해 객체 접근// 객체 그래프 탐색을 통한 연관 엔티티 탐색 Address address = member.getAddress(); City city = address.getCity();복잡한 검색 요구 + JPQL설명..
정의JPA 를 사용하여 엔티티 객체를 조회하기 위한 객체지향 쿼리언어SQL 과 추상화DB의 테이블과 컬럼이 아닌 엔티티와 그 속성을 대상으로 쿼리를 작성함특정 DB에 의존 X데이터베이스 방언을 변경하는 것만으로 다른 DB로의 이전이 가능코드 간결성엔티티 직접 조회묵시적 조인다형성 지원 등의 장점@Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "NAME", nullable = false) private String name;테스트 코드@Autowired private EntityManager em; @BeforeEach void setUp() { Member member = new Member(); membe..
JPQL에서 가능한 문구SELECT , UPDATE , DELETE 문을 사용 가능하다EntityManager.persist() 메서드를 사용하므로, JPQL 자체에는 INSERT 문이 존재하지 않습니다SELECT 문SELECT m FROM Member AS m WHERE m.username = 'Hello'문법의 특징대소문자의 구분엔티티 이름과 속성(필드) 이름은 대소문자를 구분Member , username JPQL 키워드SELECT FROM AS 은 구분 X엔티티의 이름JPQL 의 엔티티 이름은 클래스명이 아니며@Entity(name="XXX") 로 지정된 엔티티 이름으로 사용별칭의 필수성JPQL 은 AS 키워드를 사용하여 별칭을 지정함별칭은 필수UPDATE 와 DELETE 문은 벌크 연산을 한다한..
JDBC 위치 기반 파라미터 바인딩 , 더 유연하고 명확한 이름 기반 파라미터 바인딩도 지원이름 기준 파라미터(Named Parameters)void findMemberByParamBinding() { String usernameParam = "ipeac"; String jpql = "select m from Member m where m.name = :username"; em.createQuery(jpql, Member.class) .setParameter("username", usernameParam) .getResultList() .forEach(System.out::println); }:변수명 의 형식으로 파라미터 바인딩JPQL API는 대부분 메서드 체인 방식으로 설계되어있음.위치 기준 파라미터..
정의select 문에서 특정 데이터를 선택하여 조회하는 행위JPQL 에서 프로젝션사용시원하는 엔티티임베디드 타입스칼라 타입 ⇒ 기본 데이터 타입 말하는겨 ㅇㅇ엔티티 프로젝션쿼리의 결과로 엔티티를 직접 반환함별건 없고회원 엔티티 조회SELECT m FROM Member m회원의 속한 팀 엔티티 조회SELECT m.team FROM Member m임베디드 타입 프로젝션엔티티 내부에 포함된 복합 값 타입을 간접적으로 조회임베디드 타입을 잘못 조회하는 경우SELECT a FROM Address a // 오류, Address는 엔티티가 아니므로 시작점으로 사용될 수 없음올바른 경우엔티티를 통한 임베디드 조회String query = "SELECT o.address FROM Order o"; List address..
사용자에게 데이터를 일정량씩 나눠 보여주는 기법SQL 에서 페이징은 DB마다 다름..복잡성을 추상화 해 일관된 방식으로 페이징 처리를 할 수 있도록 도와주는 API 제공JPA 페이징 API@BeforeEach void setUp() { for (int i = 0; i < 50; i++) { Member member = new Member(); member.setName("ipeac" + i); member.setAge(i); em.persist(member); } } @Test void testPaging() { TypedQuery query = em.createQuery( "select m from Member m order by m.age desc", Member.class ); query.setFi..