Spring

[Spring] MyBatis를 이용해 DB 조작하기(SQL Mapper)

머직타드 2022. 3. 31. 00:24

JAVA ORM의 대표인 JAP를 활용해서도 DB를 조작할 수 있지만, SQL Mapper를 활용해 DB를 조작하는 MyBatis도 있습니다.

 

1. MyBatis란?

  • 객체지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 개발 프레임워크
  • 복잡한 JDBC 코드를 걷어내며 깔끔한 소스코드를 유지
  • 자바의 객체(Object)와 SQL 사이에서 자동 맵핑을 도와주는 프레임워크
  • XML 형태로 쓰인 JDBC 코드라고 생각해도 될 만큼 JDBC의 모든 기능을 제공

 

2. MyBatis 적용하기

1) Dependency 추가

pom.xml에 mybatis 관련 dependency를 추가해 줍니다.

(상세 워딩은 직접 쳐도 되지만, 새 프로젝트를 추가하면서 mybatis를 설정해 나온 pom.xml 내 dependency를 참고하는게 편합니다.)

 

 

2) application.yml 설정하기

application.yml에 mybatis 관련 설정을 추가해 줍니다.

 

 

3) Mybatis XML 추가하기

Mybatis 공식 사이트 - "시작하기" 탭에서

"매핑된 SQL 구문 살펴보기"에 있는 XML을 가져옵니다.

 

resources/Mybatis 내에 Mapper.xml을 추가하여,

이렇게 추가해 주는데, 이 때 namespace를 작업중인 디렉토리와 동일하게 구성해 줘야 합니다.

Mapper 클래스가 속한 패키지와 클래스명을 가져와서,

이렇게 바꿔 줍니다. 이 때 들어가 있는 "select * from Blog where id = #{id}" 자리에 실제 사용할 쿼리를 작성해 주어 사용하면 됩니다. 이 위치에 있는 select id, resultType를 사용자가 정의해 주면 됩니다.

그리고 위 사진에서 resultType에 우리가 정의할 Dto를 추가해 줘야 하는데,

이 쿼리 데이터를 받는 resultType을 받아줄 클래스를 만들어줘야 합니다.

그리고 이 클래스 내에 Entity를 정의했던 내용을 추가해 줍니다.

그리고 이 Dto.java가 속한 패키지를 그대로 가져와서

이렇게 resultType에 넣어주면 됩니다.

 

정리하자면 Mapper.xml에 네임스페이스가 Mapper 인터페이스 클래스로 연결되고,

쿼리 내용이 담긴 함수(여기서는 select)를 resultType에 정의되어 있는 dto와 연결되게 됩니다.

 

Dto란?
Data Transfer Object의 약자로, 계층간 데이터 교환을 위한 자바빈즈를 뜻합니다. 일반적으로 DTO는 로직을 가지고 있지 않은 순수한 데이터의 객체이며 객체의 속성과 그 속성의 접근을 위한 getter 및 setter 메소드만을 가지고 있습니다.

 

이제 Mapper 인터페이스에 selectList 함수를 정의하게 되면, Mapper.xml에 쿼리가 정의되어 있던 select 함수를 사용하게 됩니다.

 

 

3. MyBatis 사용하기

Mybatis를 사용해보기 위해, 작업중인 프로젝트(LMS 서비스)에서 회원들의 정보를 담은 DB인 "member"테이블에서 정보들을 select하여 출력시켜 보겠습니다.

 

회원가입이나 이메일 인증, 비밀번호 초기화 등 회원 관리를 담당하는 "MemberService" 인터페이스에 회원 리스트를 출력하는 list() 함수를 정의해 줍니다. 그리고 "MemberService" 인터페이스를 상속받아 실질적인 구현부인인 "MemberServiceImpl"클래스에 회원 리스트를 출력하는 list()를 구현하겠습니다.

 

앞서 "Member"테이블을 정의한 "MemberDto" 객체를,

"MemberMapper.xml"에 정의한 "selectList(=select * from member)" 쿼리를 수행해주는 함수

회원 리스트를 리턴하도록 구현했습니다.

 

이제 프로젝트를 Run해서 관련 경로로 접속을 시도해보면,

위와 같이 DB에 저장된 member 테이블에서 회원 리스트를 정상적으로 가져온 결과를 확인할 수 있습니다.