본문 바로가기
IT/Java

[mybatis] 자바에서 mybatis

by 성준하이 2023. 3. 3.
반응형

자바 포스팅에 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

댓글