[mybatis]Mapper 파일 작성하기(XML 기반 & Interface 기반)
마이바티스 XML 설정파일(mybatis-config.xml)을 작성하고 나면, 필요한 Mapper 파일들을 생성하면 된다.
아래 글의 맨 아래쪽 부분에서 말했듯이, 마이바티스의 Mapper 파일은 XML 기반과 인터페이스 기반, 두가지 종류가 있다.
2024.03.05 - [Java/mybatis] - [mybatis] mybatis 개념 & 이클립스에 mybatis 설치 및 초기 설정
[mybatis] mybatis 개념 & 이클립스에 mybatis 설치 및 초기 설정
🤔mybatis란? 간단하게 요약하면, JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다! 출처:mybatis 사이트 MyBatis는 Java 기반의 영속성 프레임워크로, XML 또는 어노테이션
sukis.tistory.com
👩💻Mapper XML 파일
아래 두번째 줄을 보면 맨 끝에 mapper.dtd라고 쓰여있고, config.xml 파일과 구분해줌
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
▪️ namespace 속성 : XML 파일 내의 SQL 매핑과 관련된 식별자의 유효 범위를 결정
=> DAO 파일에서 이 속성의 지정된 이름을 사용해 SQL문 호출함
<mapper namespace="MyMemberXMLMapper">
🔸insert : INSERT 명령을 등록하기 위한 엘리먼트
▪️ id 속성 : 엘리먼트를 구분하기 위한 식별자를 속성값으로 설정
▪️ parameterType 속성 : SQL 명령 작성에 필요한 값을 제공받기 위한 Java 자료형을 속성값으로 설정
=> Java 자료형 대신 typeAlias 엘리먼트로 설정한 별칭(AliasName) 사용 가능
=> SQL 명령 작성에 필요한 값이 없는 경우 parameterType 속성 생략 가능
** DML 명령(INSERT, UPDATE, DELETE) 관련 엘리먼트는 등록된 SQL 명령을 DBMS 서버에 전달하여 실행한 후 조작행의 갯수를 무조건 정수값(int)으로 매핑하여 제공하므로 resultType 속성 생략
<insert id="insertMember" parameterType="MyMember">
<!-- parameterType 속성값으로 전달받은 값은 SQL 명령에서 #{변수명|필드명|맵키} 형식으로
표현하여 값(변수값,필드값,맵값)을 제공받아 사용 -->
<!-- => parameterType 속성값으로 Java 객체(DTO 객체)를 전달받은 경우 #{필드명} 형식으로
필드값을 제공받아 SQL 명령 작성 - Getter 메소드 자동 호출 -->
<!-- => ibatis 프레임워크에서는 #변수명|필드명|맵키# 형식으로 표현하여 값을 제공받아 사용 -->
insert into mymember values(#{id}, #{name}, #{phone}, #{email})
</insert>
아래와 같이 매퍼 파일에 작성한 SQL문을 DAO파일에서 호출해서 사용함.
🔸update : INSERT 명령을 등록하기 위한 엘리먼트
<update id="updateMember" parameterType="MyMember">
update mymember set name=#{name}, phone=#{phone}, email=#{email} where id=#{id}
</update>
🔸delete: DELETE 명령을 등록하기 위한 엘리먼트
=> 전달값이 하나(id값)인 경우 String 클래스 또는 Wrapper 클래스(원시형) 사용
=> String 클래스 또는 Wrapper 클래스(원시형)는 내부적으로 선언된 별칭을 사용하여 설정
=> 아래 주소에서 TypeAliases 부분보면 내부적으로 선언된 별칭 사용 가능
https://mybatis.org/mybatis-3/ko/configuration.html
mybatis – 마이바티스 3 | 매퍼 설정
매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할
mybatis.org
<delete id="deleteMember" parameterType="string">
<!-- parameterType 속성값으로 값 하나만 전달받은 경우 #{변수명} 형식으로 표현하여
전달값을 제공받아 SQL 명령에서 사용 - 변수명은 어떠한 이름으로 표현하여 사용 가능 -->
delete from mymember where id=#{id}
</delete>
🔸select : SELECT 명령을 등록하기 위한 엘리먼트
=> 반드시 resultType 속성(자동) 또는 resultMap 속성(수동)을 설정하여 매핑정보를 제공받아 사용
▪️ resultType 속성 : 검색행을 Java 객체(값)으로 제공하기 위한 Java 자료형을 속성값으로 설정
=> Java 자료형 대신 typeAlias 엘리먼트로 설정한 별칭(AliasName) 사용 가능
=> 하나의 검색행에 대한 Java 객체(값)를 제공하기 위한 Java 자료형 설정
=> resultType 속성값으로 클래스(DTO)를 설정한 경우 클래스로 객체를 생성해 검색행의 컬럼값을 컬럼명과 같은 이름의
객체 필드에 컬럼값을 저장하여 객체 제공 - 자동 매핑
=> 클래스 작성시 필드의 이름의 검색행의 컬럼명과 같도록 작성
<select id="selectMember" parameterType="string" resultType="MyMember">
select id, name, phone, email from mymember where id=#{id}
</select>
<select id="selectMemberList" resultType="MyMember">
select id, name, phone, email from mymember order by id
</select>
</mapper>
👩💻Mapper Interface 파일
mybatis 프레임워크에서는 인터페이스를 사용하여 매퍼 파일을 작성해 매퍼로 등록 가능
=> 추상메소드에 매퍼 어노테이션(Mapper Annotation)과 value 속성을 사용하여 SQL 명령을 작성하여 등록
package xyz.itwill.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import xyz.itwill.dto.MyMember;
public interface MyMemberInterfaceMapper {
//@Insert : 추상메소드에 INSERT 명령을 등록하기 위한 어노테이션
//value 속성 : 추상메소드에 등록될 SQL 명령을 속성값으로 설정
// => value 속성외에 다른 속성이 없는 경우 속성값만 설정 가능
@Insert(value = "insert into mymember values(#{id}, #{name}, #{phone}, #{email})")
//추상메소드의 매개변수는 SQL 명령에 필요한 객체(값)을 전달받기 위해 Java 자료형을 작성하며
//반환형은 실행결과를 객체(값)로 제공하기 위한 Java 자료형 작성
int insertMember(MyMember member);
//@Update : 추상메소드에 UPDATE 명령을 등록하기 위한 어노테이션
@Update("update mymember set name=#{name}, phone=#{phone}, email=#{email} where id=#{id}")
int updateMember(MyMember member);
//@Delete : 추상메소드에 DELETE 명령을 등록하기 위한 어노테이션
@Delete("delete from mymember where id=#{id}")
int deleteMember(String id);
//@Select : 추상메소드에 SELECT 명령을 등록하기 위한 어노테이션
@Select("select id, name, phone, email from mymember where id=#{id}")
MyMember selectMember(String id);
@Select("select id, name, phone, email from mymember order by id")
List<MyMember> selectMemberList();
}
인터페이스 기반 매퍼 파일에서 SQL문을 호출하여 작성한 DAO 클래스의 일부를 살펴 보면 아래와 같음.
⚫XML 기반의 매퍼 파일 vs 인터페이스 기반 매퍼 파일
XML 기반 매퍼 파일 장점 : 수동 매핑과 동적 SQL 기능 구현에 대한 설정 편리
인터페이스 기반 매퍼 파일 장점 : SqlSession 객체로 SQL 명령을 제공받아 사용하기 편리
이 두가지 장점을 모두 살리기 위해서 매퍼바인딩을 이용할 수 있음!
이건 다음 포스팅에 ~!