https://www.acmicpc.net/problem/1268실버 5 / 구현1. 문제학생 수는 3~1000명반은 1~9반1학년부터 5학년까지 같은 반이었던 사람이 가장 많은 사람을 찾아야한다.동점이라면 앞 번호를 출력한다.2. 아이디어1) 같은 반이었던 학생이 중복되면 안된다. 예를 들어, 1번과 2번 학생이 1~5학년 때까지 항상 같은 반이었다면 한 번만 카운트를 해야한다.2) 반의 수가 1~9인데, 반이 몇 반까지 있냐는 문제 풀이에 중요하지 않다. 같은 반이었냐가 중요한 것.3) 학생이 1번부터 차례대로 있는 걸보면, 인덱스로 활용할 수 있겠다.3) 동점이 나오면 앞 번호를 출력해야하는데, 최솟값을 찾을 필요없다. index()를 쓰면 제일 앞 인덱스를 출력한다. 처음에 학생이 중복되면 안되고..
⭐벌크 연산- UPDATE, DELETE를 실행할 때, 쿼리 한 번으로 여러 테이블 로우를 변경하는 것- 하이버네이트에서 INSERT를 지원함. 100명의 Member의 나이를 일괄적으로 변경한다고 해보자.두 가지 방법으로 엔티티의 속성을 변경할 수 있다. 1. (벌크 연산X) - JPA 변경 감지 기능으로 엔티티 속성 변경 String jpql = "SELECT m FROM Member m";List members = em.createQuery(jpql, Member.class).getResultList();// 2. 엔티티 속성 변경for (Member member : members) { member.setAge(20);} 이 경우, 멤버가 100명이면 100번의 UPDATE 쿼리가 실행된다.비..
페치조인을 공부하기 전에 즉시로딩, 지연로딩의 개념을 먼저 복습하자! JPA 기본 | 즉시 로딩과 지연 로딩즉시 로딩과 지연 로딩을 이해하기 위해 프록시 개념을 먼저 이해해야한다. JPA 기본 | 프록시 (즉시 로딩, 지연 로딩을 이해하기 위한)1. 프록시란?JPA에서 연관된 엔티티를 지연 로딩하기 위해ururuwave.tistory.com1. 페치 조인이란?- JPQL에서 'join fetch' 을 사용하여 연관된 엔티티나 컬렉션을 한번에! 함께! 로딩하는 것.- 필요한 경우에만 연관된 데이터를 로딩하여 성능을 최적화할 수 있다.- 문법 : [LEFT [OUTER] | INNER ] JOIN FETCH 대괄호 안은 생략 가능하나, 생략하면 기본적으로 INNER로 동작한다. 2. 페치조인 사용법예제의 M..
1. 경로표현식점을 찍어 그래프를 탐색하는 것ex) select m.username from Member m경로 표현식에는 상태 필드, 단일 값 연관 필드, 컬렉션 값 연관 필드가 있다. 2. 상태 필드상태 필드란, 단순히 값을 저장하기 위한 필드다.(ex. m.username ) 오늘 예시로 사용할 Member 엔티티와 Team 엔티티다. ✅Member 엔티티@Entity@Getter@Setterpublic class Member { @Id @GeneratedValue private Long id; private String username; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "..
JPQL 기본 함수문자열, 숫자, 컬렉션 등의 처리를 돕는 함수다. ✔️CONCAT두 개 이상의 문자열을 연결한다.SELECT CONCAT(m.firstName, ' ', m.lastName) FROM Member m ✔️SUBSTRING문자열 일부를 추출한다.SELECT SUBSTRING(m.username, 1, 3) FROM Member m첫번째부터 세글자를 잘라낸다. ✔️TRIM문자열 앞,뒤 공백을 제거한다.SELECT TRIM(m.nickname) FROM Member m ✔️LOWER문자열을 소문자로 변환한다.SELECT LOWER(m.email) FROM Member m ✔️UPPER문자열을 대문자로 변환한다.SELECT UPPER(m.username) FROM Member m ✔️LENG..
1. CASE WHENSQL 문법과 동일하다. ✅예시String query = "select " + "case when m.age =60 then '경로요금' " + " else '일반요금' " + "end " + "from Member m";CASE WHEN 문법이 SQL과 동일해서 예시만 쓰고 넘어간다..(*JPQL은 문자열로 쿼리를 작성해서 문자열을 합치기 때문에 공백을 신경써줘야된다.) 2. COALESCE하나씩 조회해서 NULL이 아니면 반환하고 NULL이면 다음 인수를 반환한다.이 함수는 표준 SQL 함수다.코우얼레스,,,빨리 발음하면 '코올레스'로 읽으면 된다. ✅예시(1)sel..
1. ENUM 타입 표현ENUM 타입을 표현할 때 , '패키지명.ENUM클래스명.ENUM' 으로 표현한다.MemberType에 ADMIN, USER가 있다.MemberType이 ADMIN인 멤버를 조회해보자. ✅MemberType public enum MemberType { ADMIN,USER} ✅ENUM 타입 표현(1)String query = "select m.username from Member m " + "where m.type = jpql.MemberType.ADMIN";List result = em.createQuery(query, Object[].class) .getResultList();- jpql이라는 패키지에 MemberType 이라는 EN..
1. 페이징 APIsetFirstResult(int startPosition) : 조회 시작 위치 (0 부터 시작)setMaxResults(int maxResult): 조회할 데이터 수✅ 사용 예시 //페이징 API List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(10) .setMaxResults(20) .getResultList();이렇게 페이징API를 쓰면 10번 인덱스부터 20개의 결과를 받을 수 있다.JPQL을 사용하면 이렇게 페이징 처리가 편하다. 관계형 데이터베이스인 Oracle에서는 페이징처..