@Mapper 어노테이션 사용하기

최주영·2024년 2월 21일
0

springboot

목록 보기
8/13

✅ 순서

  • 임의의 인터페이스 하나 만들기
  • 인터페이스 위에 어노테이션 Mapper 적용
  • Dao에서 mapper 객체 생성해서 mapper로 접근

💡 주의점

  • 자바 객체 필드와 DB 컬럼이 자동 매핑되기 때문에 필드명과 컬럼명이 같아야함
  • 대소문자는 상관 X

    X) userId 랑 user_id (X)
    user_Id 랑 user_id (O)

✅ mapper 인터페이스

@Mapper
public interface MemberMapper {
	
	@Select("SELECT * FROM MEMBER") // 매개변수가 없는 경우
	List<MemberDto> selectMemberAll();
	
	
	@Select("SELECT * FROM MEMBER WHERE USER_ID=#{id}") // 매개변수가 있는경우
	MemberDto selectMemberById(String id);
	
    // @INSERT, @DELETE, @UPDATE 도 가능
}

✅ DAO

@Repository
public class MemberDaoImpl implements MemberDao {

	private MemberMapper mapper;
	 
	public MemberDaoImpl(MemberMapper mapper) { // mybatis가 mapper기준으로 처리
		this.mapper = mapper;
	}
	
	@Override
	public List<MemberDto> selectMemberAll(SqlSession session) {
		//return session.selectList("member.selectMemberAll");
        // session으로 mapper.xml파일을 굳이 만들어서 처리할 필요 없음
		return mapper.selectMemberAll();
	}
    
    @Override
	public MemberDto selectMemberById(String userId) {
		return mapper.selectMemberById(userId);
	}

@SelectProvider 어노테이션

  • 동적쿼리를 사용 가능
  • type=클래스이름.class, method="메소드명"

✅ mapper 인터페이스

@Mapper
public interface MemberMapper {
	
	@Select("SELECT * FROM MEMBER")
	List<MemberDto> selectMemberAll();
	
	
	@Select("SELECT * FROM MEMBER WHERE USER_ID=#{id}")
	MemberDto selectMemberById(String id);
	
	@SelectProvider(type=MemberSelectBuilder.class, method="selectMemberByWhere")
	List<MemberDto> selectMemberByWhere(Map<String,Object> param);
}

✅ 문자열로 sql문을 반환하는 클래스 하나 만들기

package com.joo.usedmarket1.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}||'%'");
				}
			}}.toString();
	}
}
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글