회사에서 학습차원으로 진행하는 게시판 토이 프로젝트를 진행 중이다.
기존에는 jpa로 모든 repository를 구현했다.
회사의 신입사원 온보딩 가이드나 회사의 코드를 보니 MyBatis를 사용하는 것을 볼 수 있었다.
지난 부트캠프에서의 자료들과 기억들을 되살려 MyBatis세팅과 간단한 사용법을 기록하려 한다.
MyBatis는 메서드의 쿼리 정보를 구별된 xml파일로 관리할 수 도 있고, Mapper 혹은 Repository에서 어노테이션으로 바로 관리할 수 도 있다.
이 글에서는 어노테이션을 이용한 구현에 대해서 기록하고자 한다.
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0'
@Mapper
public interface MybatisMemberRepository {
@Insert("""
<script>
insert into member
set username = #{username},
password = #{password},
email = #{email},
nickname = #{nickname}
</script>
""")
void save(@Param("username") String username, @Param("password") String password, @Param("email") String email, @Param("nickname") String nickname);
@Select("""
<script>
select member_idx, username, password, email, nickname
from member
where member_idx = #{memberIdx}
</script>
""")
MemberDto findById(@Param("memberIdx") long memberIdx);
@Select("""
select *
from member
""")
List<MemberDto> findAll();
@Select("""
select *
from member
where username = #{username}
""")
MemberDto findByUsernmae(@Param("username") String username);
@Select("""
select *
from member
where nickname = #{nickname}
""")
MemberDto findByNickname(@Param("nickname") String nickname);
}
이름은 도메인Mapper 혹은 도메인Repository의 형태로 많이 하는 것 같다.
interface를 생성하고, @Mapper어노테이션을 붙이면 끝이다.
메서드를 선언하고, 메서드의 기능에 맞게 어노테이션을 붙이고, 그 안에 쿼리문을 작성해주면 된다.
메서드의 파라미터로 받아온 데이터들을 쿼리문에 넣으려면 파라미터의 앞에 @Param("쿼리문 안에서 쓸 이름")의 형태로 어노테이션을 붙여주면 된다.
쿼리문 안에서 #{@Param어노테이션에서 지정해준 이름}의 형태로 사용할 수 있다.
위의 코드를 보면 <script></script>
가 추가되어 있는 쿼리문도 볼 수 있는데, 이것을 추가해주면 안에서 if문을 사용할 수 있다고 한다.
(아직 사용 안 해봄..)
참고 : tistory:망나니개발자