<< 학습 목표 >>

1. sql, include 태그를 활용할 수 있다.


이번에 알아볼 동적 쿼리 태그는 sql, include, property 태그

 

태그명 sql
설명 자주 사용하는 SQL 문장을 저장하는 태그
속성 id속성 : 저장해둔 SQL 문장의 별칭, 속성명이 id 인것처럼 이 별칭은 고유해야함

databaseId 속성 : 데이터베이스 밴더에 맞춰 구문을 실행시키고 싶을 때 사용하는 속성
  데이터베이스 밴더란 Mysql, Mssql, Oracle 등을 뜻함
  거의 사용되지 않는 속성임

lang 속성 : 동적 쿼리를 작성할 때 사용할 언어를 지정하는 속성으로 xml, raw 두 개가 있음
  lang 속성의 기본값은 xml임
  lang 속성을 raw로 지정하면 MyBatis는 동적 쿼리에 최소한의 처리 ( 파라미터 치환 )만 한 후 SQL을 데이터베이스 드라이버 ( HikariCP, Commons DBCP2 등 ) 에 전달함
태그명 include
설명 sql 태그로 저장해둔 SQL 문장을 불러오는 태그
속성 refid 속성 : 불러올 sql 태그의 id 속성 값

 

닉네임 또는 연락처로 회원 정보를 조회하는 쿼리를 보자

<?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="com.study.chapter04.MemberDao">
	<select id="getMemberByNickname" resultType="com.study.chapter04.MemberDto">
		SELECT id, pw, nickname, tel FROM member WHERE nickname = #{nickname}
	</select>
	
	<select id="getMemberByTel" resultType="com.study.chapter04.MemberDto">
		SELECT id, pw, nickname, tel FROM member WHERE tel = #{tel}
	</select>
</mapper>

여기서 반복적으로 사용된 부분을 보면 다음과 같음

 

SELECT id, pw, nickname, tel FROM member

 

이 부분을 sql 태그를 사용해서 저장해 둘 수 있음

그리고 include 태그를 사용해 불러올 수 있음

(1). sql 태그를 사용해 반복적으로 사용된 SQL 문장을 저장함

  이때 id 속성을 select_from 으로 했음

(2). 필요한 부분을 include 태그를 사용해 불러오고 있음

 

 

sql 태그 안에서 전달 받은 DTO를 활용할 수도 있음

다음 sql 태그를 보자

<?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="com.study.chapter04.MemberDao">
	<sql id="where">
		<where>
			<if test="nickname != null">
			AND nickname = #{nickname}
			</if>
			<if test="tel != null">
			AND tel = #{tel}
			</if>
		</where>
	</sql>
	
	<select id="getMember" resultType="com.study.chapter04.MemberDto" parameterType="com.study.chapter04.MemberDto">
		SELECT id, pw, nickname, tel FROM member
			<include refid="where" />
	</select>
</mapper>

<< 코드 설명 >>

(1), (2). include 태그로 불러온 sql 태그 내 문장은 물리적으로는 떨어져있지만 실제 동작할 때는 하나의 문장으로 동작하기 때문에 아래와 같이 생각하고 활용해야함


마지막으로 property 태그가 남았는데 property 태그는 활용도가 떨어지니 간단하게 태그명, 설명, 속성만 알아보자

나중에 동적 쿼리를 만들어야 하는데 지금 아는 것만으로는 뭔가 부족하다 싶으면 property 태그를 떠올리고 그때 property 태그에 대해서 자세히 찾아봐도 됨

태그명 property
설명 sql 태그 안에 있는 SQL 문장이 필요한 값을 전달할 수 있음
속성 name 속성 : 전달할 값의 이름

value 속성 : 전달할 값

 

728x90
LIST