본문 바로가기
IT 공부/자바와 웹 애플리케이션

[MyBatis] - 마이바티스를 단독으로 빌드하고 사용하는 방법

by exdus3156 2024. 1. 6.

1. MyBatis 단독 설정 방법

마이바티스란 SQL 문법을 xml 파일로 따로 분리하기 위해 사용되는 라이브러리다. 기본 목표는 Mapper라 불리는 자바 인터페이스에 SQL 문법을 매핑시키는 것이 목표다. 이렇게 하면 일일이 JDBC에서 코드로 SQL 문법을 사용할 필요가 없다. xml 파일만 수정하면 되는 것이다.

그래도 최고의 이점은 이렇게 SQL 문법을 코드로부터 분리시키면 자바 애플리케이션 개발자는 매퍼 인터페이스만으로도 개발을 할 수 있다는 점이다. 굳이 복잡한 구현 상세 사항에 대해 몰라도 된다. (만약 JDBC를 사용했다면 일일이 상세 사항을 구현해야 했을 것이다.) 아래의 코드의 구현체가 적당히 만들어진다고 가정하고 자유롭게 매퍼 인터페이스를 사용하기만 하면 된다.

사실 마이바티스는 JPA에 밀리긴 했지만 여전히 사용하는 프로젝트도 많다. 복잡한 쿼리를 직접 조종할 수 있다는 장점은 꽤 크다. 여하튼, 적어도 JDBC를 일일이 구현하는 것보다야 훨씬 이득이다. 만약 마이바티스를 사용하지 않는다면, PreparedStatement, Connection, ResultSet 등 모든 객체를 동원해 일일이 SQL 문법을 String 으로 적어주고, 다시 변수를 조정해줘야 한다. 번거롭다.

마이바티스는 스프링 진영에서 제공해주는 라이브러리로 사용되는 편인데, 사실 마이바티스는 스프링과는 별개로 단독적인 라이브버리일 뿐이다.

따라서 여기서는 마이바티스에 대한 간략한 단독 사용법에 대해 정리하려고 한다. 깊이 있게 원리를 공부하진 않았다. 그저 마이바티스가 단독으로는 대략적으로 이렇게 사용되는구나~ 하고 감을 잡기 위해서 블로그에 정리했을 뿐이다.

 

1)  의존성 라이브러리 추가

사용하는 데이터베이스의 JDBC 드라이버와 마이바티스를 추가하면 된다. 마이바티스도 자바 라이브러리이므로 JDK의 sql, JDBC API를 사용하는 것은 어쩌면 당연하다고 할 수 있다.

 

2) 사용 코드의 기본적인 형태

// 1. 설정 파일로 sql session factory 빌드
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 2. 세션 팩토리에서 세션 객체 얻기
SqlSession session = sqlSessionFactory.openSession();

// 3. 세션 객체에서 매퍼 구현체 얻기
TimeMapper mapper = session.getMapper(TimeMapper.class);

// 4. 잘 사용하고~~
String time = mapper.getTime();

// 5. 세션 종료
session.close();

1) 먼저 마이바티스 라이브러리에게 필요한 정보를 설명해주는 xml 위치를 알려주고(resource), 이를 토대로 마이바티스가 SqlSessionFactory를 생성한다. (xml에 대한 설명은 아래에 있다.)

<mybatis-config.xml>의 위치는 기본적으로는 클래스패스다. 따라서 자신의 프로젝트의 빌드 형태를 보고 클래스패스에 이 xml 파일이 위치할 수 있도록 한다. 추가적인 폴더 구조가 와도 상관없다. resource 데이터에 적어주면 된다.

2) 세션 팩토리에서 세션 객체를 얻을 수 있다.

3) 세션 객체에서 SQL 문법에 매핑한 자신만의 인터페이스 구현 객체를 얻을 수 있다. 이 객체의 메소드를 사용하면 자동으로 DB에게 알맞은 쿼리를 날려준다. (쿼리 설정 방법은 아래에 있다.)

복잡한 시스템처럼 보이지만 모든 개발자라고 해서 mybatis의 모든 원리를 이해하고 사용하는 것은 아니다. 그냥 사용하면 된다. 대략적인 형태를 이해하고만 있으면 된다. 까먹어도 다시 찾아 알 수 있으면 충분하다.

 

3) 전체 설정 파일

<mybatis-config.xml> 파일의 내부 설정 형태다. 세션 팩토리 객체가 필요로 한다. 나도 전부 아는 것은 아니지만 대략적으로 필요한 정보가 무엇인지는 이해할 수 있다. 이 파일은 마이바티스의 큰 설정을 위해 사용된다.

중요한 핵심 부분은 <mapper> 부분이다. <mapper> 태그를 통해 구체적으로 특정 인터페이스를 통해 어떤 SQL 문법을 매핑시켰는지 알려주는 xml 파일을 알려주고 있다. 이렇게 하나의 매퍼에 하나의 xml 파일이 사용되어 매퍼 인터페이스를 사용하는 것이다.

 

4) 매퍼 설정 파일

실질적으로 어떤 인터페이스의 어떤 메소드에 어떤 SQL 문법을 매핑시킬 것인가 알려주는 파일이다.

이 파일도 마찬가지로 클래스패스에서 그 위치를 찾는다. 복잡한 폴더 구조에 위치시켜도 상관 없지만 파일 탐색의 시작 위치는 클래스패스다.

 

※ 어노테이션 사용 시

사실 마이바티스에서 어노테이션 사용은 권장되지 않는다.

마이바티스 사용 목표 중 하나는 일일이 데이터 레이어의 인터페이스를 구현하지 않는다는 점이지만, 한편으로 또 하나의 마이바티스의 장점은 구현 코드에서 SQL 문법을 분리시켜, 매퍼 인터페이스 사용자가 굳이 SQL과 데이터베이스에 대한 복잡한 상세 사항에서 벗어나기 위함이지 않은가. 그러나 어노테이션은 그것을 다시 코드로 넣어버리기 때문에 이러한 이점을 살릴 수가 없게 된다.

그래도 일단 사용 방법에 대해 정리 정도는 해보았다.

먼저 인터페이스에는 위와 같이 매핑 시키고 싶은 어노테이션을 적어준다. (인텔리제이가 어노테이션 쓰지 말라고 아우성을 치고 있으나 무시하자..)

그리고 <mybatis-config.xml> 파일의 <mappers> 태그를 위와 같이 수정해준다. package는 어노테이션이 붙은 매퍼 인터페이스를 찾으라고 지시한다. name에는 탐색 대상 패키지 범위를 명시한다.