Skip to content

Instantly share code, notes, and snippets.

@an-sangkil
Created January 17, 2016 13:36
Show Gist options
  • Save an-sangkil/bb0ce33ceff627b727de to your computer and use it in GitHub Desktop.
Save an-sangkil/bb0ce33ceff627b727de to your computer and use it in GitHub Desktop.
QueryDSL Paging / Hibernate
/**
* <pre>
* Class Name : CattleController.java
* Description :
* Modification Information
*
* 수정일       수정자    수정내용
* ──────────── ───────── ───────────────────────────────
* 2016. 1. 11. ask 최초생성
* </pre>
*
* @author ahn
* @since 2016. 1. 11.
* @version
*
* Copyright (C) 2016 by SKAN.COMPANY All right reserved.
*/
package com.skan.potal.web.potal.cattle.controller;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.mysema.query.jpa.impl.JPAQuery;
import com.skan.potal.web.potal.cattle.model.HmCattleBuyInfo;
import com.skan.potal.web.potal.cattle.model.HmCattleCalfRecode;
import com.skan.potal.web.potal.cattle.model.HmCattleCalfRecodeId;
import com.skan.potal.web.potal.cattle.model.HmCattleChildbirthRecode;
import com.skan.potal.web.potal.cattle.model.HmCattleChildbirthRecodeId;
import com.skan.potal.web.potal.cattle.model.HmCattleCureInfo;
import com.skan.potal.web.potal.cattle.model.HmCattleCureInfoId;
import com.skan.potal.web.potal.cattle.model.HmCattleRegister;
import com.skan.potal.web.potal.cattle.model.HmCattleSellStoreInfo;
import com.skan.potal.web.potal.cattle.model.QHmCattleChildbirthRecode;
import com.skan.potal.web.potal.cattle.model.QHmCattleRegister;
import com.skan.potal.web.potal.cattle.repository.CattleBuyInfoRepository;
import com.skan.potal.web.potal.cattle.repository.CattleCalfRecodeRepository;
import com.skan.potal.web.potal.cattle.repository.CattleChildbirthRecodeRepository;
import com.skan.potal.web.potal.cattle.repository.CattleCureInfoRepository;
import com.skan.potal.web.potal.cattle.repository.CattleRegisterRepository;
import com.skan.potal.web.potal.cattle.repository.CattleSellStoreInfoRepository;
import com.skan.potal.web.potal.common.util.CalendarUtils;
import com.skan.potal.web.potal.common.util.CalendarUtils.CalendarPattermn;
import com.skan.potal.web.potal.common.util.PageUtils;
/**
* @author ahn
*
*/
@Controller
public class CattleController {
private final Logger logger = LoggerFactory.getLogger(CattleController.class);
@Autowired CattleRegisterRepository cattleRegisterRepository;
@Autowired CattleBuyInfoRepository cattleBuyInfoRepository;
@Autowired CattleCalfRecodeRepository cattleCalfRecodeRepository;
@Autowired CattleChildbirthRecodeRepository cattleChildbirthRecodeRepository;
@Autowired CattleCureInfoRepository cattleCureInfoRepository;
@Autowired CattleSellStoreInfoRepository cattleSellStoreInfoRepository;
@Autowired private EntityManager entityManager;
@RequestMapping("cattle/cattle_list")
public String cattleList(@RequestParam(required=false , defaultValue="0") Integer page,
@RequestParam(required=false , defaultValue="10") Integer size,
@RequestParam(required=false , defaultValue="DESC") Direction direction,
@RequestParam(required=false , defaultValue="") String searchEntityDiscernNo,
@RequestParam(required=false , defaultValue="") String searchGender,
@RequestParam(required=false , defaultValue="") String expectedDateConfinementFrom,
@RequestParam(required=false , defaultValue="") String expectedDateConfinementTo,
@RequestParam(required=false , defaultValue="") String searchBirthDayFrom,
@RequestParam(required=false , defaultValue="") String searchBirthDayTo,
ModelMap modelMap,
HttpServletRequest request) throws Exception {
Sort sort = new Sort(
new org.springframework.data.domain.Sort.Order(Direction.ASC, "birthDay"),
new Order(Direction.DESC , "entityDiscernNo")
);
QHmCattleRegister hmCattleRegister = QHmCattleRegister.hmCattleRegister;
JPAQuery query = new JPAQuery(entityManager);
query.from(hmCattleRegister);
query.leftJoin(QHmCattleRegister.hmCattleRegister.hmCattleChildbirthRecodeSet, QHmCattleChildbirthRecode.hmCattleChildbirthRecode);
//.leftJoin(QHmCattleRegister.hmCattleRegister.hmCattleBuyInfoSet, QHmCattleBuyInfo.hmCattleBuyInfo);
{
// 개체 번호
if(StringUtils.isNotEmpty(searchEntityDiscernNo)) {
query.where(QHmCattleRegister.hmCattleRegister.entityDiscernNo.eq(searchEntityDiscernNo));
}
// 성별
if(StringUtils.isNotEmpty(searchGender)) {
query.where(QHmCattleRegister.hmCattleRegister.gender.eq(searchGender));
//query.where(QHmCattleRegister.hmCattleRegister.gender.eq("황소").or(QHmCattleRegister.hmCattleRegister.gender.eq("암소")));
}
// 출생일
if(StringUtils.isNotEmpty(searchBirthDayFrom) || StringUtils.isNotEmpty(searchBirthDayTo)) {
query.where(QHmCattleRegister.hmCattleRegister.birthDay
.between(
CalendarUtils.convertStringToDate(searchBirthDayFrom, CalendarPattermn.CALENDER_TYPE_YYYY_MM_DD),
CalendarUtils.convertStringToDate(searchBirthDayTo, CalendarPattermn.CALENDER_TYPE_YYYY_MM_DD))
);
}
// 분만 예정일
if(StringUtils.isNotEmpty(expectedDateConfinementFrom) || StringUtils.isNotEmpty(expectedDateConfinementTo)) {
query.where(QHmCattleChildbirthRecode.hmCattleChildbirthRecode.expectedDateConfinement
.between(
CalendarUtils.convertStringToDate(expectedDateConfinementFrom, CalendarPattermn.CALENDER_TYPE_YYYY_MM_DD),
CalendarUtils.convertStringToDate(expectedDateConfinementTo, CalendarPattermn.CALENDER_TYPE_YYYY_MM_DD))
);
}
}
Page<HmCattleRegister> hmCattlePage = cattleRegisterRepository.buildPage(query, query, new PageRequest(page, size, sort));
PageUtils pageUtils = new PageUtils();
int current = hmCattlePage.getNumber() + 1;
int begin = pageUtils.pagingBegin(current);
int end = pageUtils.pagingEnd(hmCattlePage.getTotalPages());
logger.debug("pageInfo = " , hmCattlePage);
modelMap.put( "current" , current );
modelMap.put( "begin" , begin );
modelMap.put( "end" , end );
modelMap.put( "hmCattlePage" , hmCattlePage );
modelMap.put( "searchEntityDiscernNo" , searchEntityDiscernNo );
modelMap.put( "searchGender" , searchGender );
modelMap.put( "searchBirthDayFrom" , searchBirthDayFrom );
modelMap.put( "searchBirthDayTo" , searchBirthDayTo );
modelMap.put( "searchGender" , searchGender );
return "/cattle/cattle_list.tiles";
}
/**
* 개체 관리 저장
* @param hmCattleRegister
* @param bindingResult1
* @param hmCattleBuyInfo
* @param bindingResult2
* @param hmCattleCalfRecode
* @param bindingResult3
* @param hmCattleChildbirthRecode
* @param bindingResult4
* @param hmCattleCureInfo
* @param bindingResult5
* @param hmCattleSellStoreInfo
* @return
* @throws Exception
*/
@RequestMapping("cattle/cattle_form")
public String cattleForm(@Valid HmCattleRegister hmCattleRegister , BindingResult bindingResult1
,@Valid HmCattleBuyInfo hmCattleBuyInfo , BindingResult bindingResult2
,@Valid HmCattleCalfRecode hmCattleCalfRecode , BindingResult bindingResult3
,@Valid HmCattleChildbirthRecode hmCattleChildbirthRecode , BindingResult bindingResult4
,@Valid HmCattleCureInfo hmCattleCureInfo , BindingResult bindingResult5
,@Valid HmCattleSellStoreInfo hmCattleSellStoreInfo, BindingResult bindingResult6) throws Exception {
//1. 기본정보
cattleRegisterRepository.save(hmCattleRegister);
if(StringUtils.isNotEmpty(hmCattleBuyInfo.getBuyStoreName())){
if(bindingResult2.hasErrors()){
return "";
}
//2. 구입정보
cattleBuyInfoRepository.save(hmCattleBuyInfo);
}
//3.
HmCattleCalfRecodeId hmCattleCalfRecodeId = new HmCattleCalfRecodeId();
hmCattleCalfRecodeId.setHmCattleRegister(hmCattleRegister);
cattleCalfRecodeRepository.save(hmCattleCalfRecode);
//4.
HmCattleChildbirthRecodeId hmCattleChildbirthRecodeId = new HmCattleChildbirthRecodeId();
hmCattleChildbirthRecodeId.setHmCattleRegister(hmCattleRegister);
cattleChildbirthRecodeRepository.save(hmCattleChildbirthRecode);
//5. 판매정보
HmCattleCureInfoId hmCattleCureInfoId = new HmCattleCureInfoId();
hmCattleCureInfoId.setHmCattleRegister(hmCattleRegister);
cattleCureInfoRepository.save(hmCattleCureInfo);
//6.
cattleSellStoreInfoRepository.save(hmCattleSellStoreInfo);
return "/cattle/cattle_form.tiles";
}
@ModelAttribute
public void commonAttribute(ModelMap modelMap) {
modelMap.put("MENU_CODE", "CATTLE");
}
}
/**
* <pre>
* Class Name : CattleRepository.java
* Description :
* Modification Information
*
* 수정일       수정자    수정내용
* ──────────── ───────── ───────────────────────────────
* 2016. 1. 11. ask 최초생성
* </pre>
*
* @author ahn
* @since 2016. 1. 11.
* @version
*
* Copyright (C) 2016 by SKAN.COMPANY All right reserved.
*/
package com.skan.potal.web.potal.cattle.repository;
import java.util.Collections;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.stereotype.Repository;
import com.mysema.query.jpa.JPQLQuery;
import com.skan.potal.web.potal.cattle.model.HmCattleRegister;
import com.skan.potal.web.potal.cattle.model.QHmCattleRegister;
/**
* @author ahn
*
*/
@Repository
public interface CattleRegisterRepository
extends JpaRepository<HmCattleRegister, String>, QueryDslPredicateExecutor<HmCattleRegister> {
default Page<HmCattleRegister> buildPage(JPQLQuery countQuery, JPQLQuery query, Pageable pageable) {
Long total = countQuery.count();
query.offset(pageable.getOffset());
query.limit(pageable.getPageSize());
List<HmCattleRegister> content = total > pageable.getOffset() ? query.list(QHmCattleRegister.hmCattleRegister) : Collections.<HmCattleRegister> emptyList();
return new PageImpl<HmCattleRegister>(content, pageable, total);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment