본문 바로가기
웹 개발자 준비 과정🐳/스마트팩토리,MES 시스템 개발

SQL.xml 코드 분석/리뷰

by @ENFJ 2022. 11. 23.

전체코드

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="ui700">
	<select id="CPMES_UI710_search" parameterType="hashmap" resultType="hashmap">
	<![CDATA[  
	SELECT 
		CONVERT(CHAR(23), LOG_PASSTIME_CP, 21) AS LOG_PASSTIME_CP,
		LOG_PASS_CONTENT_CP,
		LOG_PASS_COUNT_CP
 	FROM dbo.TB_PASSENGER_LOG_CP
 			WHERE 1=1
            AND LOG_PASSTIME_CP BETWEEN REPLACE(#{pSearchStaDt},'-','') 
            AND DATEADD(DAY, 1,  REPLACE(#{pSearchEndDt},'-','')) 
    ORDER BY LOG_PASSTIME_CP
		]]>
	</select>

 


 

코드 분석 / 리뷰

<?xml version="1.0" encoding="UTF-8"?>

XML 선언부(XML Declaration)이라고 하는데, 뒤에 나올 문서가 XML이라는 표시를 앞에다 하는 것이다.

  • version="1.0" 이것은이 파일이 준수하는 XML 표준임을 의미
  • encoding="utf-8" 파일이 UTF-8 유니 코드 인코딩을 사용하여 인코딩되었음을 의미
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

위 코드에 대해서 구글링 하던 중 https://mybatis.org/mybatis-3/ko/index.html (mybatis 공식사이트)에서 기본적으로 코드를 넣고 시작하는 것을 발견하였다.

느낌상 mybatis 를 사용하기 위해 들어가는 코드임을 짐작할 수 있었다.

 

 

*여기서 Mybatis 가 뭔지 궁금해 하시는 분이 계실수 있는데 프레임워크(FrameWork)이다.

mybatis 공식사이트 - 매핑된 sql 구문 살펴보기 예제

<mapper namespace="ui700">

위 코드는 namespace 는 해당 파일의 이름이다.

mapper 시킬 파일 이름을 " " 안에 넣어주면 된다.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="ui700">
	<select id="CPMES_UI710_search" parameterType="hashmap" resultType="hashmap">
	<![CDATA[  
/*  쿼리 문 */
		]]>
	</select>

 그럼 위 코드를 해석해보면

 

매퍼 시킬 파일은 ui700 인데,, ui700의 CPMES_UI710_search 가 id 인 녀석이랑 연결 시켜줄거야 !! 라고 보면 될거 같다.

(이 부분에 대해서 https://lemontia.tistory.com/407 <-- 참고하면 됩니다.)

 

다음으로 /* */ 쿼리문 내용도 분석해보겠습니다.


 	FROM dbo.TB_PASSENGER_LOG_CP
 			WHERE 1=1
            AND LOG_PASSTIME_CP BETWEEN REPLACE(#{pSearchStaDt},'-','')

 

말그대로 WHERE 1=1은 조건문에서 항상 참을 의미합니다. 즉 특별히 의미가 있는 조건은 아닙니다.

WHERE 1 = 1

WHERE 2 = 2

WHERE 3 = 3

모두 같은 의미입니다.

 

 

MSSQL의 문자열 치환 함수는 REPLACE가 매우 유용합니다.

Replace() 함수로 특정 문자열 바꾸기( 참고 )

 

   AND DATEADD(DAY, 1,  REPLACE(#{pSearchEndDt},'-',''))

DATEADD() 함수 에 대해서는 아래  샘플 사진을 보고 이해하자.

 

ORDER BT (정렬 함수)

ORDER BY LOG_PASSTIME_CP

기본 값은 오름차순이지만 내림차순으로 해주고 싶다면  뒤에 DESC 를 덧 붙여주면 된다.

 

ORDERY BY ____DESC
https://gent.tistory.com/504