반응형

1. DATE_FORMAT() 사용하기

, ExpressionUtils.as(
			Expressions.stringTemplate(
					"DATE_FORMAT({0}, {1})"
					, accountLog.logTime
					, ConstantImpl.create("%Y-%m-%d %H:%i:%S.%f")).substring(0, 23)
, "_logTime")

ExpressionUtils.as([Expressions], [Alias])를 통해서 select 쿼리 시 해당 필드가 날짜 형식일 경우 다음과 같이 원하는 포맷형태로 변경 가능하다.

 

2. 다른 테이블 데이터 조회 결과 sub query

, ExpressionUtils.as(
					JPAExpressions.select(group.groupName)
					.from(group).where(group.groupId.eq(accountLog.assignedGroupId))
					, "assignedGroupName")

JPAExpressions.select 메서드를 사용하여 해당 필드 조건에 해당하는 다른 테이블의 데이터를 조회해서 필드를 정의 할 수 있다.

3. when ~ case문 사용하여 sub query 사용하기

JPAExpressions.select(
  new CaseBuilder().when(clientDeleteWeb.idx.count().gt(0))
                   .then("Y")
                   .otherwise("N"))
              .from(clientDeleteWeb)
              .where(clientDeleteWeb.groupId.eq(client.groupIdx.groupId)
              .and(clientDeleteWeb.uid.eq(client.uid)));

jpa에서는 일반적인 rdb query 작성시 사용하는 when case 문법을 CaseBuilder() 메서드를 사용해서 구현 가능하다.

728x90
반응형

1. jpql

String jpql = "select a from AccountLog a where ";
if (!vo.getSearchType().equalsIgnoreCase("all"))
jpql += JpqlQueryUtil.getWhereQueryByFileName(vo.getSearchType());

jpql += " a.logTime >= :startDate and a.logTime <= :endDate";

TypedQuery<AccountLog> typedQuery = em.createQuery(jpql, AccountLog.class);

if (!vo.getSearchType().equalsIgnoreCase("all")) {
typedQuery.setParameter("searchWord", vo.getSearchWord());
}

typedQuery.setParameter("startDate", DateUtils.parseDateFormatHHMMSS(vo.getStartDate() + " 00:00:00"));
typedQuery.setParameter("endDate", DateUtils.parseDateFormatHHMMSS(vo.getEndDate() + " 23:59:59"));

result = typedQuery.setFirstResult(vo.getPageNumber() - 1)
				   .setMaxResults(vo.getPageSize())
				   .getResultList();

2. QueryDSL

JPAQuery query = new JPAQuery(em);
QAccountLog accountLog = new QAccountLog("accountLog");

Date startDate = DateUtils.parseDateFormatHHMMSS(vo.getStartDate() + " 00:00:00");
Date endDate = DateUtils.parseDateFormatHHMMSS(vo.getEndDate() + " 23:59:59");

com.querydsl.core.types.Predicate condition = makeWhereQuery(vo, accountLog, startDate, endDate);

FetchableQueryBase queryBase = (FetchableQueryBase) query.from(accountLog)
														.where(condition)
                                                        .limit(vo.getPageSize())
                                                        .offset(vo.getPageNumber() - 1);
                                                                                            
result = queryBase.fetch();
728x90

+ Recent posts