일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 즉시로딩
- 힙
- dfs
- 일대다
- 연결리스트
- querydsl
- shared lock
- 연관관계
- 스프링 폼
- 비관적락
- CHECK OPTION
- 유니크제약조건
- eager
- 지연로딩
- PS
- exclusive lock
- 낙관적락
- 다대다
- SQL프로그래밍
- 데코레이터
- execute
- BOJ
- 백트래킹
- 다대일
- 동적sql
- JPQL
- 이진탐색
- fetch
- FetchType
- 스토어드 프로시저
- Today
- Total
목록All (557)
흰 스타렉스에서 내가 내리지
기본값(default) 정의는 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 방법이다. 예를 들어 키를 입력하지 않고 기본적으로 160이라고 입력되도록 하고 싶다면 다음과 같이 정의할 수 있다. CREATE TABLE member ( ... ... height TINYINT UNSIGNED NULL DEFAULT 160, ... ); ALTER TABLE 사용 시 열에 DEFAULT 를 지정하기 위해서는 ALTER COLUMN 문을 사용한다. 예를 들어, 다음과 같이 연락처의 국번을 입력하지 않으면 자동으로 02가 입력되도록 할 수 있다. ALTER TABLE member ALTER COLUMN phone SET DEFAULT '02'; 기본 값이 설정된 열에 기본값을 입력하려면 def..
체크 제약조건은 입력되는 데이터를 점검하는 기능을 한다. 예를 들어, 키에 마이너스 값이 입력되지 않도록 하거나, 연락처의 국번에 02, 031, 062 중 하나만 입력되도록 할 수 있다. 키를 100 이상의 값만 입력되도록 하기 CREATE TABLE member ( mem_id CHAR(8) NOT NULL PRIMARY KEY, mem_name VARCHAR(10) NOT NULL, height TINYINT UNSIGNED NULL CHECK (height >= 100) ); 필요하다면 테이블을 만든 후에 ALTER TABLE 문으로 제약 조건을 추가해도 된다. 연락처의 국번에 02, 031, 062 중 하나만 입력되도록 하기 ALTER TABLE member ADD CONTRAINT CHECK ..
1. Dependency 설치 dependencies { implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } 2. Configuration 프로젝트 어디에서나 접근할 수 있도록, QueryDSL 빈을 생성한다. 이때 EntityManager 도 여기서 주입해 놓는다. @Configuration @RequiredAr..
설명 : 스칼라식을 차례대로 조회해서 null 이 아니면 반환한다. m.username 이 null 이면 '이름 없는 회원' 을 반환 select coalesce (m.username, '이름 없는 회원') from Member m
# 서브쿼리 나이가 평균보다 많은 회원 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 이 쿼리는 컬렉션 값 연관 필드의 size 기능을 사용해도 같은 결과를 얻을 수 있다. select m from Member m where m.orders.size > 0 # 서브쿼리 - EXISTS 서브 쿼리에 결과가 존재하면 참이다. NOT 은 반대. 팀 A 소속의 회원 select m from Member m where exists (select t from m..
# 페치 조인 JPQL 에서 성능 최적화를 위해 제공하는 기능이다. 이것은 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능이다. # 엔티티 페치 조인 회원 엔티티를 조회하면서 연관된 팀 엔티티도 함께 조회하는 JPQL SELECT m FROM Member m JOIN FETCH m.team 회원 (m) 과 팀 (m.team) 을 함께 조회한다. * 실행된 SQL SELECT M.*, T.* FROM Member M INNER JOIN Team T ON M.team_id = T.id 엔티티 페치 조인 JPQL 에서 select m 으로 회원 엔티티만 선택했는데 실행된 SQL 을 보면 SELECT M.*, T.* 로 회원과 연관된 팀도 함께 조회된 것을 확인할 수 있다. * 페치 조인을 사용하는 코드 ..
데이터베이스 종류마다 페이징을 처리하는 SQL 문법이 다르다. JPA 는 페이징을 아래 두 API 로 추상화했다. 1. setFirstResult (int startPosition) : 조회 시작 위치 2. setMaxResults (int maxResult) : 조회할 데이터 수 # 예제 TypedQuery query = em.createQuery("SELECT m FROM Member m ORDER BY m.username DESC", Member.class); query.setFirstResult(10); query.setMaxResults(20); query.getResultList(); FirstResult 의 시작은 10 이므로, 11번째부터 시작해서 총 20건의 데이터를 조회한다. 따라서 1..
TypedQuery query = em.createQuery("SELECT new com.example.test.UserDTO(m.username, m.age) FROM Member m", UserDTO.class); List resultList = query.getResultList(); SELECT 다음에 NEW 명령어를 사용하면 반환받을 클래스를 지정할 수 있는데, 이 클래스의 생성자에 JPQL 조회 결과를 넘겨줄 수 있다. NEW 명령어를 사용한 클래스로 TypedQuery 를 사용할 수 있어서 지루한 객체 변환 작업을 줄일 수 있다. 단, 주의할 점이 있다. 1. 패키지 명을 포함한 전체 클래스 명을 입력해야 한다. 2. 순서와 타입이 일치하는 생성자가 필요하다.
# 이름 기준 파라미터 :: Named parameters String usernameParam = "User1"; TypedQuery query = em.createQuery("SELECT m FROM Member m where m.username = :username", Member.class); query.setParameter("username", usernameParam); List resultList = query.getResultList(); JPQL API 는 대부분 메소드 체인 방식으로 설계되어 있어서 다음과 같이 연속해서 작성할 수 있다. List members = em.createQuery("SELECT m FROM Member m WHERE m.username = :username"..
반환할 타입을 명확하게 지정할 수 있으면 TypeQuery 객체를 사용한다 반환 타입을 명확하게 지정할 수 없으면 Query 객체를 사용한다. # TypeQuery TypedQuery query = em.createQuery("SELECT m FROM Member m", Member.class); List resultList = query.getResultList(); for (Member member : resultList) { System.out.println("member = " + member); } em.createQuery() 의 두 번째 파라미터에 반환할 타입을 지정하면 TypeQuery 를 반환하고, 지정하지 않으면 Query 를 반환한다. 조회 대상이 Member 엔티티이므로 조회 대상 ..