resultList = em.createQuery(jpql, Member.class) .getFirstResult(10) .getMaxResults(20) .getResultList();"> resultList = em.createQuery(jpql, Member.class) .getFirstResult(10) .getMaxResults(20) .getResultList();"> resultList = em.createQuery(jpql, Member.class) .getFirstResult(10) .getMaxResults(20) .getResultList();">

<aside> ❗

JPA는 다양한 쿼리 방법을 지원

**** JPQL만 잘 사용하면 QueryDSL 사용하기 쉬움 ****

</aside>

<aside> ❗

JPQL

<aside> ❗

JPQL

// 엔티티 대상으로 쿼리 
String jpql = "select m From Member m where m.name like '%kim%'";

List<Member> result = em.createQuery(jpql, Member.class)
		.getResultList();
/*
// 테이블 대상 쿼리로 번역된 후 실행 
select
            m1_0.MEMBER_ID,
            m1_0.city,
            m1_0.street,
            m1_0.zipcode,
            m1_0.name 
        from
            Member m1_0 
        where
            m1_0.name like '%kim%'
*/

</aside>

<aside> ❗

JPQL

String jpql = "select m FROM Member m where m.age > 18";

List<Member> result = em.createQuery(jpql, Member.class)
			.getResultList();
/*
	SELECT
		m.id as id,
		m.age as age,
		m.USERNAME as USERNAME,
		m.TEAM_ID as TEAM_ID
	FROM 
		Membmer m
	WHERE
		m.age > 18;
*/

</aside>

<aside> ❗

Criteria

// 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()l

</aside>

<aside> ❗

QueryDSL 소개

JPAFactoryQuery query = new JPAQueryFactory(em);
QMember m = QMember.member;

List<Member> list = 
	query.selectFrom(m)
		.where(m.age.at(18))
		.orderBy(m.name.desc())
		.fetch();

</aside>

<aside> ❗

네이트브 SQL 소개

String sql =
	"SELECT ID, AGE, TEAM_ID, NAME FROM MEMBER WHERE NAME = 'KIM'";
	
List<Member> resultList = 
	em.createNativeQuery(sql, Member.class).getResultList();

</aside>

<aside> ❗

JDBC 직접 사용, SpringJdbcTemplate 등