String jpql = "select m From Member m where m.name like `%hello%`";
List<Member> result = em.createQuery(jpql, Member.class).getResultList();
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> result = em.createQuery(cq).getResultList();
김영한 개발자님 曰 : 나는 실무에서 안씀. 생각보다 알아보기 힘들고, 유지보수가...
JPAFactoryQuery query = new JPAQueryFactory(em);
QMember m = QMember.member;
List<Member> list = query.selectFrom(m)
.where(m.age.gt(18))
.orderBy(m.name.desc())
.fetch();
====>>> 실무 사용 권장 JPQL 마스터 하면, 자동으로 따라옴!!
String sql = "SELECT ID, AGE, TEAM_ID, NAME FROM MEMBER WHERE NAME = 'kim'";
List<Member> resultList = em.createNativeQuery(sql, Member.class).getResultList();
TypedQuery<Member> query = em.createQuery("select m from Member m", Member.class);
Query query2 = em.createQuery("select m.username, m.age from Member m");
List<Member> resultList = query.getResultList();
=> 결과가 없으면 빈 리스트 반환
Member result = query.getSingleResult();
=> 결과 없거나, 2개 이상이면 에러
Member result = em.createQuery("select m from Member m where m.username = :username", Member.class)
.setParameter("username", "member1")
.getSingleResult();
Member member = new Member();
member.setUsername("changer");
member.setAge(10);
em.persist(member);
em.flush();
em.clear();
List<Member> results = em.createQuery("select m from Member m", Member.class).getResultList();
Member findMember = results.get(0);
findMember.setAge(20);
// 자동으로 jpql이 변환
List<Team> teamResults1 = em.createQuery("select m.team from Member m",Team.class).getResultList();
// 애초에 jpql 로 선언
List<Team> teamResults2 = em.createQuery("select t from Member m join m.team t",Team.class).getResultList();
List<Address> addressResults = em.createQuery("select o.address from Order o", Address.class).getResultList();
List scalarResults = em.createQuery("select distinct m.username, m.age from Member m").getResultList();
Object o = scalarResults.get(0);
Object[] result = (Object[]) o;
System.out.println("result[0] = " + result[0]);
System.out.println("result[1] = " + result[1]);
List<Object[]> scalarResults = em.createQuery("select distinct m.username, m.age from Member m").getResultList();
Object[] result = scalarResults.get(0);
System.out.println("result[0] = " + result[0]);
System.out.println("result[1] = " + result[1]);
MemberDTO.java
public class MemberDTO {
private String username;
private int age;
public MemberDTO(String username, int age) {
this.username = username;
this.age = age;
}
}
em.createQuery("select new org.example.MemberDTO(m.username, m.age) from Member m", MemberDTO.class);
List<Member> pageResults = em.createQuery("select m from Member m order by m.age desc", Member.class)
.setFirstResult(0)
.setMaxResults(10)
.getResultList();
for (Member mmm : pageResults) {
System.out.println("member = " + mmm.toString());
}
String query = "select m from Member m inner join m.team t"; // inner 생략 가능
String query = "select m from Member m left outer join m.team t"; // outer 생략 가능
String query = "select m from Member m right outer join m.team t"; // outer 생략 가능
String query = "select m from Member m, Team t where m.username = t.name";
// 나이가 평균보다 많은 회원
select m from Member m where m.age > (select avg(m2.age) from Member m2)
// 한 건이라도 주문한 고객
select m from Member m where (select count(o) from Order o where m = o.member) > 0