본문 바로가기
전자정부프레임워크

Blaze Persistence 사용하기

by improve 2024. 8. 7.

쿼리문이랑 똑같이 작성하는데 형식이 따로 있다.

 


public List<PcStatRentVo4> selectMcList(PcStatRentVo4 searchVo) throws InplabRuntimeException, ParseException {
 String searchKeywordFrom = searchVo.getSearchKeywordFrom(); // 작성일자(From)
        String searchKeywordTo = searchVo.getSearchKeywordTo(); // 작성일자(To)
        StringBuilder query = new StringBuilder();

 

해당테이블을 직접 입력해줘서 테이블안에있는 어떤 칼럼을 쓰는지 적어준다.


CriteriaBuilder<TbPotMchn> cb = cbf.create(em, TbPotMchn.class)
.from(TbPotMchn.class,"a")
.leftJoinOn(TbPotMachineMaster.class, "b").on("a.mchnCd").eqExpression("b.amdNo").end();

 

 

조인을 할땐 조인할 테이블명을 적고, 조인 조건을 on과 eq 에 적어준다. 여기서 Expression 은 쿼리문을 그대로 적어주는 역할을 한다. 

 

 

여기서 농기계의 동력기/ 작업기/ 농기계그룹을 그룹바이해줘서 하나의 그룹으로 묶어준다.

cb.groupBy("b.amdNm");
cb.groupBy("b.workNm");
cb.groupBy("a.mchnGrpNm");

 

 

해당하는 날짜를 찾고 싶을때 날짜를 선택하게 되면, 해당날짜로 이동하게 된다.


if (StringUtils.isNotBlank(searchKeywordFrom) && StringUtils.isNotBlank(searchKeywordTo)) {
          cb.whereExpression("DATE(frstRgsrDttm) BETWEEN '" + searchKeywordFrom + "' AND '" + searchKeywordTo + "'"); // 날짜(파라미터포멧) 조회 조건 처리
       }

 

selectDt 를 선택하면 0과 1, 2 를 선택하면 년도와 월 일을 차례로 보여줄 수 있다.


Long selectDt = searchVo.getSelectDt();
if (selectDt == 0L) {
cb.groupBy("YEAR(a.frstRgsrDttm)");
}else if(selectDt == 1L ) {
cb.groupBy("YEAR(a.frstRgsrDttm)");
cb.groupBy("MONTH(a.frstRgsrDttm)");
}else if (selectDt == 2L) {
cb.groupBy("YEAR(a.frstRgsrDttm)");
cb.groupBy("MONTH(a.frstRgsrDttm)");
cb.groupBy("DAYOFMONTH(a.frstRgsrDttm)");


 

이부분에 쿼리문의 select 문을 적어준다.

// 결과를 써준다.
CriteriaBuilder<PcStatRentVo4> bindedCb = cb.selectNew(
new ObjectBuilder<PcStatRentVo4>() {
            @Override
                public <X extends SelectBuilder<X>> void applySelects(X selectBuilder) {
             Long selectDt = searchVo.getSelectDt();
             if(selectDt == 0L ) {
             selectBuilder.select("CONCAT(YEAR(a.frstRgsrDttm), '')");
             }else if (selectDt == 1L) {
             selectBuilder.select("CONCAT(YEAR(a.frstRgsrDttm), '-', LPAD(MONTH(a.frstRgsrDttm), 2, '0'))");
             }else if (selectDt == 2L) {
             selectBuilder.select("CONCAT(YEAR(a.frstRgsrDttm), '-' ,LPAD(MONTH(a.frstRgsrDttm),2, '0'), '-', LPAD(DAYOFMONTH(a.frstRgsrDttm), 2, '0'))");
             }
            
                selectBuilder
                .select("b.amdNm")
                .select("b.workNm")
                .select("a.mchnGrpNm")
                .select("SUM(a.purchsAmt)")
                .select("COUNT(*)");
                
            }

이부분에는 select 한 순서와 맞게 프론트쪽이랑 연결시켜준다. Vo를 사용한다.



            @Override
            public PcStatRentVo4 build(Object[] tuple) {
return PcStatRentVo4.builder()
.year((String) tuple[0])
.mov_mac((String) tuple[1])
.work_mac((String) tuple[2]) 
.noung_group((String) tuple[3])
.total_price((BigDecimal) tuple[4])
.total_count((Long) tuple[5])
        .build();
            }

            @Override
            public List<PcStatRentVo4> buildList(List<PcStatRentVo4> list) {
                return list;
            }
        });

return bindedCb.getResultList();
}



이렇게 하면 프론트쪽이랑 연결이 가능해진다.