반응형
자바 포스팅에 ORM 관련 포스팅이 다수를 이루지만 예전부터 자바 개발을 해온 사람이라면 mybatis가 더욱 친근할 것이다.
이번 포스팅에서는 스프링부트에서 사용하는 @Mapper 를 사용한 mybatis를 다뤄보려고 한다.
controller 단은 모두 생략하고 결국 repository 부분만 다뤄볼 예정이다.
기존에 mybatis에서는 DAO 라는 개념이 존재하였다.
Data Access Object 의 약자로 코드에서 데이터베이스와 통신을 하는 부분이다.
하지만 스프링부트에서는 이 DAO부분을 mapper 가 대신 해줄수 있다.
먼저 mapper 는 interface로 구현을 하며 아래와 같이 예시를 주면
@Mapper interface MemberMapper { @Select(MemberSQL.FIND_MEMBERS) public List<Member> findMembers() @SelectProvider(type = MemberSQL.class, method = "findMembersByName") public List<Member> findMembersByName(@Param("name") String name) } |
눈치가 빠르면 알고 경험이 많으면 알겠지만 mybatis의 큰 장점 중 하나는 코딩으로 쿼리를 조율하는 동적쿼리가 가능하다.
findMembers 메서드에서 사용중인 @Select annotation 은 정적 쿼리일 경우 사용이 되고
아래는 @SelectProvider 는 동적인 쿼리를 사용할수 있다.
class MemberSQL { public static final String FIND_MEMBERS = ''' SELECT id, name FROM MEMBER ''' public String findMembersByName(String memberName) { StringBuilder query = new StringBuilder(); query.append(''' SELECT id, name FROM MEMBER ''') if (!StringUtils.isEmpty(memberName)) { query.append("WHERE ") query.append(QueryUtils.like("name", memberName)) } return query.toString() } } |
그리고 다음처럼 sql.java 파일을 만들어두면 정적과 동적을 볼수 있다.
반응형
'IT > Java' 카테고리의 다른 글
Mylyn 이란? (41) | 2023.03.25 |
---|---|
spring project 만들기 with Initializr (36) | 2023.03.10 |
[maven] snapshot 이란? (20) | 2023.03.02 |
groovy란? (21) | 2023.03.01 |
@Qualifier 어노테이션 사용법 (10) | 2023.02.27 |
댓글