Springboot mapper (2가지 방법)

최주영·2023년 7월 21일
0

springboot

목록 보기
1/13

✅ Mapper

  • 사용자가 정의해놓은 쿼리문을 개발할 때 사용하는 메소드를 연결하고 결과 값을 정의해놓은 타입으로 매핑 시켜주는 것

XML 방식 VS 어노테이션 방식

✅ XML 방식

  • session 객체로 mapper.xml 파일을 접근한다 (namespace 값과 id 값을 찾아 매핑시키기)
//DaoImpl

	@Override
	public int insertMember(SqlSession session, MemberDto m) {
		return session.insert("member.insertMember",m);
	}
<?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="member">
  
  <select id="selectMemberAll" resultType="memberDto">
  	SELECT * FROM MEMBER
  </select>
  
</mapper>

✅ 어노테이션 방식

  • @Mapper 사용 -> 마커 인터페이스
  • 마커 인터페이스 : 기능이 있는게 아니라 마커, 즉 무언가 표시를 하기 위한 인터페이스
  • 쉽게 말해서 단순히 매퍼 라는 것을 표시하기 위한 어노테이션

1. @Mapper 를 사용할 인터페이스 만들기

package com.bs.helloBoot.comm.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;

import com.bs.helloBoot.dto.MemberDto;

@Mapper // mapper 어노테이션 방식
public interface MemberMapper {  
	
	@Select("SELECT * FROM MEMBER")
	List<MemberDto> selectMemberAll(); 
	
	@Select("SELECT * FROM MEMBER WHERE USERID=#{id}")
	MemberDto selectMemberById(String id);

	// type = 대상 클래스이름 ,  method = 대상클래스에 대한 대상 메소드이름
	@SelectProvider(type=MemberSelectBuilder.class, method="selectMemberByWhere")
	List<MemberDto> selectMemberByWhere(Map<String,Object> param);
}

2. @SelectProvider 를 사용할 경우 대상 클래스와 메소드 만들기

  • 클래스안에서 동적쿼리문 사용 가능
  • mybatis 와 다르게, else if, else 문 사용 가능
// MemberSelectBuilder 클래스
package com.bs.helloBoot.comm.mapper;

import java.util.Map;

import org.apache.ibatis.jdbc.SQL;

public class MemberSelectBuilder {
	public static String selectMemberByWhere(Map<String,Object> param) {
		return new SQL() {{
			SELECT("*");
			FROM("MEMBER");
			if(param.get("userName")!=null && !param.get("userName").equals("")) {
				WHERE("USERNAME like '%'||#{userName}||'%'");
			}
			
			if(param.get("address")!=null && !param.get("address").equals("")) {
				WHERE("ADDRESS like '%'||#{address}||'%'");
			}
			// 추가적으로 계속 if문으로 함
		}}.toString();
	}
}

3. Mapper 클래스 부르기

// dao

	private MemberMapper mapper;
	
	public MemberDaoImpl(MemberMapper mapper) {
		this.mapper = mapper;
	}

	@Override
	public List<MemberDto> selectMemberByName(Map<String, Object> param) {
		return mapper.selectMemberByWhere(param); // mapper
	}	
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글