본문 바로가기

프로그래밍/스프링[Spring]

[Spring] Datepicker 사용시 Mybatis 에서 날짜 기간 검색(Mysql)



안녕하세요 오늘은 Datepicker 사용 시 Mybatis에서 기간을 조회하는 방법에 대해 다뤄 보겠습니다.

 

사용한 DB는 Mysql입니다.

 

우선 datepicker의 스크립트 부분입니다.

$(function(){
    $('.datepicker').datepicker({
        startDt: new Date('2022'),
        calendarWeeks: false,
        todayHighlight: true,
        autoclose: true,
        format: "yyyy-mm-dd",
        language: "ko"
    });
});

 

구현한 부분은 다음과 같습니다.

<div class="row">
  <div class="input-group">
    <input type="text" id="startDt" class="form-control datepicker startDt" placeholder="시작날짜" name="startDt">
      <label class="input-group-text" for="startDt" ><i class="fa-solid fa-calendar" ></i></label>
  </div>
  <div class="text-center"  style="font-size: x-large;">~ </div>
  <div class="input-group">
    <input type="text" id="endDt" class="form-control datepicker endDt" placeholder="종료날짜"  name="endDt">
      <label class="input-group-text" for="endDt" ><i class="fa-solid fa-calendar" ></i></label>
  </div>            
</div>

 

VO는 다음과 같이 String으로 선언합니다.

 

VO를 String으로 하면 Mybatis에서 Date로 변환하여 날짜 검색이 가능합니다.

//검색 시작 날짜
private String startDt;
    
//검색 종료 날짜
private String endDt;

 

 

Mybatis는 다음과 같이 사용합니다

 

+1을 한 이유는 예를 들어

 

22.12.14~ 22.12.14 인경우 14일에 등록된 날짜를 포함하기 위해 +1을 하였습니다. String에서 본인이 선언한 Format에 맞게 입력합니다.

<if test='startDt !=null and startDt !=""'>
  <![CDATA[
     AND REG_DT >= STR_TO_DATE(#{startDt},'%Y-%m-%d')
  ]]>
</if>
<if test='endDt !=null and endDt !=""'>
  <![CDATA[
    AND REG_DT < STR_TO_DATE(#{endDt},'%Y-%m-%d')+1
  ]]>
</if>

 

Mysql에서 Beetween을 이용하여 검색하는 방법도 있지만

 

위와 같이 작성하는 게 사용하기도 편하고 성능에서도 좋은 부분이 있다고 합니다.

 

감사합니다.