분류 전체보기 954

45. JPQL 함수

concat : 합쳐라 substring : 잘라내라 trim : 맨 끝 공백 제거 lower, upper : 다 소문자, 혹은 다 대문자. length : 문자열 길이 locate : 문자나 문자열의 위치 abs, sqrt, mod : abs(절대값), sqrt(제곱근), mod(나머지) size, index(이것들은 JPA용임) : 위의 것 들은 JPA 표준이라 DB 관계없이 쓰면 됨. 그리고, 사용자 정의 함수 concat List result1 = em.createQuery("select concat('a','b') from Member m", String.class) .getResultList(); for (String s : result1) { System.out.println("s = " +..

JPA/JPA 기본 2023.10.31

44. 조건식. case 등등

자바의 switch case 문과 비슷한데, when이 case고 else가 default 마지막은 end로 조건식 끝이라는 걸 표현해 줘야 함. em.createQuery("select " + "case " + "when m.age = 60 then '경로요금'" + "else '일반요금'" + "end " + "from Member m", Member.class) .getResultList(); 이런 식. CASE ~ END까지 조건식. if ~ else랑 비슷하다. 이게 기본 case 식 이고, 단순 case 식 em.createQuery("select " + "case t.name " + "when '팀A' then '인센티브110%'" + "when '팀B' then '인센티브120%'" + "..

JPA/JPA 기본 2023.10.31

43. JPA 타입 표현과 기타식

em.createQuery("select i from Item i where type(i) = Book", Item.class) .getResultList(); 문자 : '헬로' 숫자 : 10L(Long), 10D, 10F, 10 등 앞에 DF는 더블, 플로트 Boolean : true, false enum : 패키지명 다 포함해서 넣어야 함. jpashop(패키지명).MemberType(enum클래스).Admin(enum 값) jpashop.MemberType.Admin 엔티티 : type(별칭) -> select i from Item i where type(i) = Book 이렇게 하면 DTYPE 보고 찾아 줌. 상속관계. Book 이렇게 엔티티 그자체? 엔티티 다 JPQL에서 인지하니까.. 그냥 엔..

JPA/JPA 기본 2023.10.31

42. 서브쿼리

sql에서 처럼 쿼리 안의 쿼리 라는 느낌 List result = em.createQuery("select m from Member m where exists(select t from m.team t where t.name = 'teamA')", Member.class) .getResultList(); member를 가져오는데, exists, 즉 존재하는 경우만. 멤버의 팀의 이름이 teamA인 경우에만 가져옴. (where) select o from Order o where o.orderAmount > all(select p.stockAmount from Product p) 주문을 가져오는데, 주문량이 상품(Product)의 재고보다 클 경우만 select m from Member m where m...

JPA/JPA 기본 2023.10.31

41. 조인

sql 조인이랑 거의 비슷한데, JPQL은 엔티티 중심으로 동작한다. 내부(inner) 조인 List result = em.createQuery("select m from Member m inner join m.team t", Member.class) .getResultList(); for (Member m : result) { System.out.println("result = " + m.getUsername()); System.out.println("result = " + m.getTeam().getName()); } inner는 생략이 가능하다. 내부 조인은 만약 team이 없으면 아예 member까지 나오지 않는다. Hibernate: /* select m from Member m inner jo..

JPA/JPA 기본 2023.10.31

40. 페이징

페이징이란 한 화면에서 보여주는 데이터의 범위를 결정하는 일련의 방법이라고 하는데, 뭐 mysql에서 limit 하고 하던 걸 페이징 이라고 하는 것 같다. JPA는 페이징을 추상화 해버림 JPA에서는 페이징 할 때 2가지만 쓰면 됨. setFirstResult(인덱스) : 조회 시작 위치 setMaxResults(인덱스) : 조회 끝 위치. List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(0) .setMaxResults(10) .getResultList(); for (Member m : result) { System.out.println("result = " + m..

JPA/JPA 기본 2023.10.31

39. 프로젝션(select)

select 절에 조회할 대상을 지정하는 것. 그 뭐 sql에서 select 할 때 * 해서 모두 가져오기도 하고, select name, age 해서 뭐 이렇게 2개 가져오기도 하고 그거 말하는 거임. 일단 종류는 엔티티 임베디드 타입 스칼라타입(숫자, 문자 등 기본 데이터) 엔티티는 엔티티 자체, *랑 비슷할 거 같고, 임베디드 타입은 우리가 임베디드 정의한 거 사실 상 테이블에서는 그냥 열 몇개를 객체상에서는 모아놓은 거 이므로, 그냥 테이블에서 그 열들 조회해오는데 자바에서는 그게 그 임베디드 타입 객체로 얻어올 수 있단 이야기같고, 스칼라타입 기본 타입은 그냥 가져오면 됨. name, age 등 숫자나 문자 기본 타입 환경에서 보자면 m -> 엔티티 m,team -> 엔티티 m.address -..

JPA/JPA 기본 2023.10.30

38. JPQL 기본 문법

Java Persistence Query Language JPQL은 객체지향 쿼리 언어 테이블 대상이 아니라 자바 내의 엔티티 객체 대상. JPQL은 SQL을 추상화 한 것이라 특정DB에 의존하지 않음. JPQL은 결국 SQL로 변환됨. 예제 JPQL 해볼 예제임. 코드 @Entity public class Member { @Id @GeneratedValue private Long id; private String username; private int age; @ManyToOne @JoinColumn(name = "team_id") private Team team; } @Entity public class Team { @Id @GeneratedValue private Long id; private St..

JPA/JPA 기본 2023.10.30