간펴니
간편 자바프로그래밍
간펴니
전체 방문자
오늘
어제
  • 전체보기 (185)
    • 알고리즘 (2)
    • JAVA (69)
      • 이펙티브 자바 (47)
      • JAVA 병렬프로그래밍 (5)
      • 자바 (17)
    • SPRING (60)
      • Spring (12)
      • IceWater Community (37)
      • Homme Shop (10)
      • 토비의 스프링 (1)
    • SPRING BOOT (4)
      • WhiteRecord (7)
    • 오류 (9)
    • DB (10)
      • ORACLE (5)
      • MYSQL (1)
      • MYBATIS (4)
      • JPA (0)
      • 대용량 데이터 베이스 (0)
      • SQL (0)
    • FRONT (8)
      • JSP (2)
      • JavaScript (2)
      • Jquery (3)
      • Thymeleaf (1)
    • AWS (6)
    • JNI (10)
    • 회고 (0)
    • MQ (0)
    • Radis (0)
    • Git (0)
    • Docker (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 컨셉 변경

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
간펴니

간편 자바프로그래밍

DB/MYBATIS

MYBATIS에서 include문 사용법

2021. 7. 31. 18:52
728x90
<!-- 게시판 목록 구현 -->
	<select id="listPage" resultType="kr.co.vo.BoardVO"
		parameterType="kr.co.vo.Criteria">
		SELECT BNO,
		TITLE,
		CONTENT,
		WRITER,
		REGDATE
		FROM (
		SELECT BNO,
		TITLE,
		CONTENT,
		WRITER,
		REGDATE,
		ROW_NUMBER() OVER(ORDER BY BNO DESC) AS
		RNUM
		FROM MP_BOARD
		WHERE 1=1
		<include refid="search"></include>
		) MP
		WHERE RNUM BETWEEN #{rowStart} AND #{rowEnd}
		<!-- 1페이지 1and 10 ,2페이지 11and 20 -->
		ORDER BY BNO DESC
	</select>

	<select id="listCount" parameterType="kr.co.vo.SearchCriteria"
		resultType="int">
		SELECT COUNT(BNO)
		FROM MP_BOARD
		WHERE 1=1
		<include refid="search"></include>
		AND BNO > 0
	</select>

	<!-- include refid= 이 부분은 반복되는 부분을 sql id=을 통해 이을 수 있게 해줌
	where 1=1은 if문에 해당하는 것이 있으면 이어지고 없으면 없는 것과 같다.
	 -->
	<sql id="search">
		<if test="searchType != null">
			<if test="searchType == 't'.toString()">AND TITLE LIKE '%' || #{keyword} || '%'</if>
			<if test="searchType == 'c'.toString()">AND CONTENT LIKE '%' || #{keyword} || '%'</if>
			<if test="searchType == 'w'.toString()">AND WRITER LIKE '%' || #{keyword} || '%'</if>
			<if test="searchType == 'tc'.toString()">AND (TITLE LIKE '%' || #{keyword} || '%') or (CONTENT
				LIKE '%' || #{keyword} || '%')</if>
		</if>
	</sql>

refid(reference id)는 반복되는 쿼리를 미리 작성해 놓고 재활용 할 수 있게 해준다.

위의 예제에서 확인해야 할 것은 

WHERE 1=1
<include refid="search"></include>

이다.

 

where 1=1은 

refid = "search" search라는 id로 이어지는

 

<sql id="search">
<if test="searchType != null">
<if test="searchType == 't'.toString()">AND TITLE LIKE '%' || #{keyword} || '%'</if>
<if test="searchType == 'c'.toString()">AND CONTENT LIKE '%' || #{keyword} || '%'</if>
<if test="searchType == 'w'.toString()">AND WRITER LIKE '%' || #{keyword} || '%'</if>
<if test="searchType == 'tc'.toString()">AND (TITLE LIKE '%' || #{keyword} || '%') or (CONTENT
LIKE '%' || #{keyword} || '%')</if>
</if>
</sql>

 

sql id = "search "에서

if문에 해당하는 것이 없으면 없는 것과 같고, 있다면 뒤에 그대로 이어진다.

 

한마디로 중복되는 sql을 작성해놓고 다시 작성할 필요 없이 include refid="" 로 편하게 사용할 수 있게 해준다.

728x90
저작자표시 (새창열림)

'DB > MYBATIS' 카테고리의 다른 글

Mybatis에서 null값 허용하기  (0) 2021.10.14
select key의 사용 ex)게시판 첨부파일 작성  (2) 2021.08.05
[MYBATIS]selectList와 selectOne  (0) 2021.07.27
    'DB/MYBATIS' 카테고리의 다른 글
    • Mybatis에서 null값 허용하기
    • select key의 사용 ex)게시판 첨부파일 작성
    • [MYBATIS]selectList와 selectOne
    간펴니
    간펴니
    개발공부 기록하는 곳

    티스토리툴바