Spring Boot+JOOQ(5)진급 조회 조작

3281 단어 자바 학습
제3 장 에서 기본 적 인 첨삭 검사 조작 을 소개 한 다음 에 Jooq 를 사용 하여 진 급 된 데이터 베 이 스 를 조작 하 는 것 을 살 펴 보 자.
count()
코드:
dslContext.selectCount().from(YOUR_TABLE).fetchOne().value1();
dslContext.selectCount().from(YOUR_TABLE).fetchOne().component1();

selectCount()는 count 작업 을 수행 하고 fetchOne()은 검색 결 과 를 얻 는 첫 줄,value 1()또는 component 1()은 첫 번 째 열의 수 치 를 얻 습 니 다.value 1()과 component 1()방법 은 모두 RecordImpl 에 포함 되 어 있 으 며 같은 방법 을 호출 하 였 습 니 다.
public final T1 component1() {
    return this.get(0);
}

public final T1 value1() {
    return this.get(0);
}

groupBy()
코드:
dslContext.select(POJO.COLUMN).from(YOUR_TABLE).groupBy(POJO.COLUMN).fetchInto(POJO.class);

sql 문법 처럼 groupby 필드 는 select 에 나타 나 야 합 니 다.그렇지 않 으 면 컴 파일 기간 에 프로그램 이 이상 을 던 집 니 다.fetch Into()는 fetch 후의 결 과 를 어떤 종류 로 매 핑 할 지 지정 합 니 다.실제로,우 리 는 분류 한 그룹의 데 이 터 를 저장 하기 위해 맵 을 더 많이 만 들 것 이다.따라서 우 리 는 우리 가 필요 로 하 는 모든 데 이 터 를 직접 추출 한 다음 에 자바 8 의 Stream.Foreach()와 결합 하여.filter()로 실현 할 수 있다.
Map> map = new HashMap<>();
    List keys= dslContext.select().from(YOUR_TABLE).fetchInto(POJO1.class);
    List values= dslContext.select().from(YOUR_TABLE).fetchInto(POJO2.class);
    values.stream().forEach(v->{
        map.put(v.VALUENAME,keys.stream().filter(k -> CONDITION).collect(Collectors.toList()));
    });

having()
코드:
dslContext.select(POJO.COLUMN).from(YOUR_TABLE).groupBy(POJO.COLUMN).having(CONDITION).fetchInto(POJO.class);

join()
코드:
dslContext.select().from(TABLE1).join(TABLE2).on(CONDITION).fetch();

join()이후 에 얻 은 실 체 는 보통 jooq 가 생 성 한 실체 와 다른 새로운 실체 로 다음 과 같은 방법 으로 유형 전환 을 할 수 있 습 니 다.
dslContext.select(TABLE1.id, TABLE1.name, TABLE2.age).from(TABLE1).join(TABLE2).on(CONDITION).fetch().map(r->{
        NewModel nm = new NewModel();
        nm.setId(r.get(0,String.class));
        nm.setName(r.get(1,String.class));
        nm.setAge(r.get(2,Integer.class));
        return nm;
    });
@Data
@AllArgsConstructor
@NoArgsConstructor
public class NewModel {
    private String id;
    private String name;
    private Integer age;
}

우 리 는 Table 1 에 두 열,id 와 name,Table 2 에 두 열,id 와 age 가 있다 고 가정 합 니 다.select()에서 지정 한 조회 열,lambda 표현 식 의 set 방법 은 select 의 필드 순서 와 일치 해 야 합 니 다.
fetchOne()과 fetchAny()
fetchOne()과 fetchAny()는 모두 결과 집합 을 되 돌려 주 는 한 줄 의 데이터 입 니 다.이들 의 차 이 는 fetchOne()이 조회 한 결과 집합 데이터 줄 수 는 0 줄 또는 1 줄 이 고 그 중에서 첫 줄 로 돌아 가 0 줄 의 경우 null 을 돌려 주 는 것 입 니 다.fetchAny()에서 조회 한 결과 집합의 데이터 줄 수 는 임의의 줄 수 이 며,그 중에서 첫 줄 을 되 돌려 줍 니 다.fetchOne()방법 으로 되 돌아 오 는 데이터 세트 줄 수가 한 줄 이상 일 때 TooMany Rows Exception 이 발생 합 니 다.
org.jooq.exception.TooManyRowsException: Cursor returned more than one result
	at org.jooq.impl.Tools.fetchOne(Tools.java:1815) ~[jooq-3.11.10.jar:na]
	at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:545) ~[jooq-3.11.10.jar:na]
	at org.jooq.impl.AbstractResultQuery.fetchOneInto(AbstractResultQuery.java:568) ~[jooq-3.11.10.jar:na]
	at org.jooq.impl.SelectImpl.fetchOneInto(SelectImpl.java:2899) ~[jooq-3.11.10.jar:na]

좋은 웹페이지 즐겨찾기