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..
집합 함수SQL 의 통계 함수 기능임합계 평균최대값최소값 계산시 사용SELECT COUNT(m), -- 회원 수 SUM(m.age), -- 나이 합계 AVG(m.age), -- 평균 나이 MAX(m.age), -- 최대 나이 MIN(m.age) -- 최소 나이 FROM Member mCOUNT: 결과 수를 구합니다. 반환 타입은 Long입니다.MAX, MIN: 최대, 최소 값을 구합니다. 문자, 숫자, 날짜 등에 사용할 수 있습니다.AVG: 평균값을 구합니다. 숫자 타입만 사용 가능하며, 반환 타입은 Double입니다.SUM: 합계를 구합니다. 숫자 타입만 사용 가능하며, 반환 타입은 타입에 따라 Long, Double, BigInteger, BigDecimal 등이 될 수 있습니다.집합 함수 사용 시 ..
내부조인연관 엔티티 중 겹치는 부분만 결과로 들고온다INNERT JOIN 키워드를 사용JOIN 만 써도 된다.@Autowired private EntityManager em; @BeforeEach void setUp() { // 팀만들어주기 Team team = new Team(); team.setName("팀A"); em.persist(team); // 멤버 50개 만들어주기 for (int i = 0; i < 50; i++) { Member member = new Member(); member.setName("ipeac" + i); member.setAge(i); if (i % 2 == 0) { member.setTeam(team); } em.persist(member); } } @Test void ..