데이터의 CRUD를 편하게 할 수 있도록 xml로 구조화 한 Mapper 설정 파일을 통해 JDBC를 구현한 영속성 프레임워크다.
기존의 JDBC를 통해 구현했던 상당량의 코드, Parameter 설정 및 결과 mapping을 xml 설정으로 쉽게 구현할 수 있게 한다.

JDBC 템플릿을 통해 SQL을 실행하면 MyBatis는 같은 흐름을 전용 라이브러리로 대체해 동작한다.

한국어 또한 지원해준다.
Java 요구 버전
패키지 구조 변경
사용 용어의 변경
| iBatis | MyBatis |
|---|---|
| SqlMapConfig | Configuration |
| sqlMap | Mapper |
| resultClass | resultType |
동적 쿼리 지원
자바 Annotation 지원
dependency 에 추가한다.
Build.gradle
// https://mvnrepository.com/artifact/org.mybatis/mybatis
implementation 'org.mybatis:mybatis:3.5.6'
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
implementation 'mysql:mysql-connector-java:8.0.28'
다음 게시글에서도 다루긴 하겠지만 간단하게 개념에 대해서만 알아보자.
근데 다음 게시글에서는 xml 파일에 주로 사용할 것이기 때문에 xml 형태는 다음 게시글의 내용을 보면 좋을 것 같다.
이번 게시글에서는 Java에서 사용할 때의 경우를 작성할 것이다.
Environment : 데이터베이스 접속에 관한 환경 설정 정보를 가진 객체로, MyBatis 환경 설정 객체를 생성하는 데 사용한다.
Environment environment = new Environment("dev"
, new JdbcTransactionFactory()
, new PooledDataSource(DRIVER, URL, USER, PASSWORD));
Configuration : 환경 설정 정보 Environment 객체를 가지고 생성한 MyBatis 설정 객체로, DB 접속 관련 정보, mapper 등록, 별칭 등록 등 myBatis 전역 설정 정보를 담고 있다.
Configuration configuration = new Configuration(environment);
configuration.addMapper(Mapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSessionFactory
SqlSession 객체를 생성하기 위한 팩토리 역할을 수행하는 인터페이스이다.
애플리케이션이 실행되는 동안 여러 차례 빌드하지 않도록, 싱글톤 패턴 등을 이용하여 어플리케이션 스코프로 사용하는 것이 좋다.
SqlSessionFactoryBuilder
SqlSessionFactory 인터페이스 타입의 하위 구현 객체를 생성하기 위한 빌드 역할을 수행한다.
build() 메소드는 설정 정보를 담고 있는 Configuration 타입의 객체 혹은 외부 설정 파일과 연결된 스트림을 매개변수로 전달하면 SqlSessionFactory 인터페이스 타입의 객체를 반환한다.
SqlSessionFactoryBuilder 메소드
| method 구분 | 설명 |
|---|---|
| build(InputStream) | config.xml 파일만 불러옴 |
| build(InputStream, String) | config.xml 파일과 지정한 데이터베이스를 불러옴 |
| build(InputStream, Properties) | config.xml파일과 property 로 설정한 내용으로 불러옴(“${key}”) |
| build(InputStream, String, Properties) | config.xml 파일과 지정한 데이터베이스, properties 파일 불러옴 |
| build(configuration) | configuration 객체에 설정한 내용을 불러옴 |
SqlSession sqlSession = sqlSessionFactory.openSession(false);
openSession() 메소드를 사용하여 SqlSession 인터페이스 타입의 객체를 반환받는다.따라서 HTTP 요청 라이프사이클과 유사하게, 요청 시 생성하고 요청 처리가 완료되면 close하는 스코프를 권장한다.
openSession() 메소드
boolean 타입을 인자로 전달하는데, 이는 Connection 인터페이스 타입 객체로 DML 수행 후 auto commit 여부에 대한 옵션을 의미한다.auto commit 옵션은 false로 지정하여 트랜잭션을 직접 관리할 수 있도록 하는 것을 권장한다.SqlSessionFactory를 통해 Session을 생성하는 openSession() 메소드는 여러가지 형식으로 오버로딩 되어있는데, 그중 대표적인 것은 다음과 같다.
| method 구분 | 설명 |
|---|---|
| openSession() | 기본값을 통해 SqlSession 생성 |
| openSession(Boolean) | - SqlSession 생성 시 AutoCommit 여부 지정 |
| - 기본값 = true | |
| openSession(Connection) | - 직접 생성한 Connection 객체를 이용해 SqlSession 생성 |
| - 기본값 = X | |
| openSession(ExecutorType) | - 쿼리 실행 시 PreparedStatement의 재사용여부 설정 |
| - 기본값 = ExecutorType.SIMPLE |
mapper.xml에서 선언한 쿼리 구문을 SqlSession에서 실행하는 메소드는 총 6가지로 아래와 같다.
| method명 | 설명 |
|---|---|
Object selectOne(String mapper, Object param) | 하나의 객체만을 받을 때 사용 |
List<E> selectList(String mapper, Object param) | 결과에 대한 값을 List로 받을 때 사용 |
Map<K,V> selectMap(String mapper, Object param, String mapKey) | 결과에 대한 값을 Map으로 받을 때 사용 (마지막 인자로 key로 사용될 컬럼 명시) |
int insert(String mapper, Object param) | Database에 데이터를 입력할 때 사용 |
int update(String mapper, Object param) | Database의 데이터를 수정할 때 사용 |
int delete(String mapper, Object param) | Database의 데이터를 삭제할 때 사용 |
활용은 다음 게시글에서 알아보자.