본문 바로가기
Spring/Legacy

DAO(Repository) & Mapper.xml

by pms93 2022. 10. 25.

< DAO >

package com.ms.blog.repository;

import org.springframework.stereotype.Repository;

import com.ms.blog.dto.MemberDTO;

@Repository
public interface BlogRepository {
	
	// 기존에 사용한 DAO와는 달리 interface로 사용한다.
	// 하위 method가 호출되면 Mapper.xml에서 일치하는 id를 찾아 해당 Query를 실행한다.
	public void select();
	public void insert();
	public void delete();
	public void update(MemberDTO member);
	
}

 

< Mapper.xml >

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	src/main/resources/mappers/member/에 DB Query작성을 위한 xml파일을  생성한다.(new -> spring bean configuration file)
-->
<!-- 하위 DOCTYPE은 Query tag들을 찾아오게끔 해준다. -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 
	mapper tag
	 - DAO(repository)와 매칭이 되게끔 한다.
	 - namespace속성을 통해 DAO Class file명까지의 경로를 명시해준다. 
 -->
<mapper namespace = "com.ms.blog.repository.BlogRepository">
	
	<!-- 
		* CRUD 4가지의 명칭 그대로 태그로 사용이 가능하며 Query의 끝나는 부분에는 세미콜론을 명시하지 않는다.
		* tag에 id는 DAO의 메서드와 동일하게 명시한다.
		* DAO에서 method가 호출되는 순간 Mapper.xml로 찾아와 method와 id가 일치하는 tag를 찾아 실행한다.
		
		* parameterType
		 : DAO class에서 id와 일치하는 method가 받고있는 매개변수의 자료형을 명시한다.
		 : DTO와 같은 원시/wrapper 자료형이 아닌 객체가 매개변수로 사용되고 있을 시에는 해당 경로를 명시한다.
		 : ex) com.ms.blog.dto.MemberDTO
		 
		* resultType
		 : DAO class에서 id와 일치하는 method가 반환하는 데이터의 자료형을 명시한다.
		 : 원시자료형이 아닌 wrapper class 자료형으로 명시해야 한다.
		 : ex) DAO method가 예를 들어 ArrayList<MemberDTO>를 반환한다면 resultType에는 MemberDTO의 경로만 명시한다.
		 :  -> mybatis에서 알아서 ArrayList로 묶어서 보내주기 때문이다.
		 
		* 이외의 태그 내에 사용 가능한 where, if등 여러 속성들이 있다.
	-->
	<select id = "select" parameterType = "" resultType = "">
		SELECT * FROM blog
	</select>
	
	<insert id = "insert">
		INSERT INTO blog VALUES ('1', '2', '3')
	</insert>
	
	<delete id = "delete">
		DELETE FROM blog WHERE id LIKE '%'||user||'%' <!-- mybatis에서의 문자열 + 연산은 ||로 명시한다. -->
	</delete>
	
	<update id = "update" parameterType = "MemberDTO">
		UPDATE blog SET id = #{ id }, pw = #{ pw }, name = #{ name } 
		<!-- 
			기존에 DAO에서 ?를 rs.get자료형()으로 통해 대입을 했다면 mybatis는 #{ 매개변수명 }을 통해 대입한다.
			매개변수의 DTO 내에 맴버필드와 일치하게끔 하여 getter를 통한 데이터 참조가 아닌 변수명 만으로도 참조가 가능하다.
		-->
	</update>
	
</mapper>

'Spring > Legacy' 카테고리의 다른 글

AJAX & JSON  (0) 2022.10.26
Spring <-> DB Connection  (0) 2022.10.25
Controller in Legacy Package  (0) 2022.10.18