우주먼지
JPQL Type Query & Sub Query
Database/JPQL 2023. 3. 11. 13:57

💡 TypeQuery & Query TypeQuery 반환 타입이 명확할 때 사용 Query 반환 타입이 명확하지 않을 때 사용 // Member 타입, 명확한 반환 타입 TypedQuery query = em.createQuery("SELECT m FROM member m", Member.class); // String, int 2가지의 명확하지 않은 반환 타입 Query query = em.createQuery("SELECT m.username, m.age from Member m"); 💡 JPA Sub Query 쿼리 안에 서브 쿼리 작성 가능 JPA 서브 쿼리의 한계 JPA는 WHERE, HAVING 에서만 서브 쿼리 사용 가능 SELECT도 가능 (Hibernate에서 지원) FROM의 서브 쿼..

JPQL Paging API & Search Result API
Database/JPQL 2023. 3. 11. 13:55

💡 Paging API JPA는 페이징 API를 다음 두 API로 추상화 해뒀다. 조회 시작위치(0부터 시작) setFirstResult(int startPosition) 조회할 데이터 수 setMaxResults(int maxResult) 예시 모든 데이터 베이스의 방언이 동작한다. LIMIT & OFFSET은 MySQL 방언이다. hibernate.dialect를 Oracle12cDialect로 변경해주면 Oracle 방언인 rownum 3 depth 전략으로 페이징을 짠다. // Member Class에 toString()을 Override 해준다. for (int i=0, i

JPQL Projection
Database/JPQL 2023. 3. 11. 13:52

💡 프로젝션 Select에 조회할 대상을 지정하는 것이다. 프로젝션의 대상은 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자 등 기본 데이터 타입)이다. 프로젝션 조회 대상은 전부 영속성 컨텍스트의 관리 대상이다. 엔티티 프로젝션(멤버 조회) SELECT m FROM Member m ... 결과는 멤버가 조회된다. 엔티티 프로젝션(멤버 안에 있는 팀 조회) SELECT m.team FROM Member m ... 결과는 멤버가 아닌 멤버의 팀이 결과로 조회된다. List result = em.createQuery("select m.team from Member m", Team.class) .getResultList(); // --- 쿼리 튜닝의 편리함을 위해 명시적 Join 형식으로 Join을 하는걸 ..

JPQL Parameter Binding
Database/JPQL 2023. 3. 11. 13:51

💡 파라미터 바인딩 왠만하면 이름으로 바인딩하자. 위치 기준으로 바인딩 시 위치가 바뀌면 꼬일 수 있다. 이름 기준 Member result = em.createQuery( "select m from Member m where m.username = :username", Member.class) .setParameter("username", "member1") .getSingleResult(); SELECT m FROM Member m where m.username=:username 위치 기준 Member result = em.createQuery( "select m from Member m where m.username = ?1", Member.class) .setParameter(1, "member1..

Flood Fill 알고리즘
Data Architect/Algorithm 2023. 3. 8. 18:53

💡 Flood Fill 알고리즘 다차원 배열의 어떤 칸과 연결된 영약을 찾는 알고리즘이다. 바둑이나 지뢰찾기 같은 게임에서 어떤 비어 있는 칸을 표시할 지 를 결정할 때도 사용된다. DFS와 Stack을 이용하여 구현하기도 하고, BFS와 Queue를 이용해 구현하기도 한다. DFS & Stack을 이용한 Flood Fill 구현 import java.util.Scanner; import java.util.Stack; public class DFS_FloodFill { // 상하좌우를 의미하는 델타 배열 생성 static int[][] deltaArray = {{-1,0}, {1,0}, {0,-1}, {0,1}}; static final int max = 10; static int n; static in..

고득점 Kit - 완전탐색 (모의고사)

💡 문제 파악 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를..

고득점 Kit - 완전탐색 (최소직사각형)

💡 문제 파악 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다. 명함 번호 가로 길이 세로 길이 1 60 50 2 30 70 3 60 30 4 80 40 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. ..

검색 태그