📌나이가 18살 이상인 회원을 모두 검색하고 싶다면?
엔티티 객체를 중심으로 개발
한다.엔티티 객체를 대상으로 검색
한다.검색 조건이 포함된 SQL
이 필요JPQL
이라는 객체 지향 쿼리 언어 제공SELECT
, FROM
, WHERE
, GROUP BY
, HAVING
, JOIN
지원엔티티 객체
를 대상으로 쿼리데이터 베이스 테이블
을 대상으로 쿼리String jpql = "select m from Member m where m.age>18";
List<Member> result = em.createQuery(jpql,Member.class)
.getResultList();
//실행된 SQL
select m.id as id, m.age as age, m.username as username, m.team_id as team_id
from Member m
where m.age > 18
//Criteria 사용 준비
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Member> query = cb.createQuery(Member.class);
//루트 클래스 (조회를 시작할 클래스)
Root<Member> m = query.from(Member.class);
//쿼리 생성
CriteriaQuery<Member> cq = query.select(m).where(cb.equal(m.get("username"), “kim”));
List<Member> resultList = em.createQuery(cq).getResultList()
❌실무에선 거의 사용되지 않는다.
너무 복잡하고 실용성이 없음
➡️Criteria 대신에 QueryDSL 사용 권장
//JPQL
//select m from Member m where m.age > 18
JPAFactoryQuery queryFactory= new JPAQueryFactory(em);
QMember m = QMember.member;
List<Member> list = queryFactory.selectFrom(m)
.where(m.age.gt(18))
.orderBy(m.name.desc())
.fetch();
String sql ="SELECT ID, AGE, TEAM_ID, NAME FROM MEMBER WHERE NAME = ‘kim’";
List<Member> resultList = em.createNativeQuery(sql, Member.class)
.getResultList();