✅ Mapper
XML 방식
VS 어노테이션 방식
✅ 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
사용 -> 마커 인터페이스매퍼
라는 것을 표시하기 위한 어노테이션@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);
}
동적쿼리문
사용 가능// 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();
}
}
// 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
}