[Java] MyBatis
MyBatis
JDBC
- Java Database Connectivity
- Java에서 DB를 연동해 쓸 수 있도록 하는 자바 API
- 프로그램 소스 안에 SQL 문을 작성하는 방식
- 다음 순서에 해당하는 코드들은 필수로 진행해야 사용 가능하다. (관리가 비교적 어렵다)
JDBC 사용 순서
JDBC 드라이버의 인스턴스 생성
Class.forName("driver name");
JDBC 드라이버의 인스턴스를 통한 DBMS 연결(Connection) 생성
Connection conn = DriverManager.getConnection("Database URL", "Account ID", "PW");
Connection 객체를 통한 Statement 생성
Statement stmt = conn.createStatement();
Statement 객체의 executeQuery() 를 이용한 쿼리보내기 및 ResultSet 으로 받아오기
ResultSet rs = stmt.executeQuery("select * from ... ");
ResultSet, Statement, DB와 연결 닫기
rs.close(); stmt.close(); conn.close();
- JDBC 방식은 위와 같이
- 드라이버 인스턴스를 생성하고,
- Connection 객체를 만들고,
- Statement 객체도 만든 후,
- Statement 객체의 executeQuery 메소드의 인자로 SQL 쿼리문을 날려 반환값을 ResultSet에 받고,
- rs.next() 등을 이용해 하나씩 처리 후,
- 모든 연결을 종료하는 과정을 거쳐서 사용해야 한다.
MyBatis란?
- MyBatis는 기존 방식에 비해 DB와 연동하여 데이터를 좀 더 쉽게 사용할 수 있게 도와주는 프레임워크이다.
- 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.
- 퍼시스턴스 프레임워크 : CRUD를 다루는 클래스 및 설정 파일의 집합
- MyBatis는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다.
- POJO : Plain Old Java Object, 특정 규약에 종속되지 않는 자바 객체
- SQL을 별도의 파일로 분리해서 관리한다.
- 약간 말이 어려울 수 있는데, 쉽게 말해서 자바 코드에서의 오브젝트와, 따로 작성해 놓은 SQL문을 각각 매핑해주는 기능을 지원하는 것이다. 즉, 매핑된 특정 메소드를 호출하면 해당 SQL문이 DB에서 수행되고, 그 결과를 반환하게 되는 것이다.
MyBatis를 쓰는 이유?
접근이 쉽고 간단하며 생산성이 높아진다.
DBCP만 쓰면 위에서 언급한 Connection, ResultSet, Statement 등 객체들에 대한 관리도 해야한다.
- MyBatis에서는 JDBC로 처리하는 상당 부분의 코드와 파라미터 설정, 결과 매핑 등을 대신 해준다.
- 물론 DB에 연결되는 과정이 JDBC를 사용할 때와 같지만, 그걸 ‘알아서 적절히’ 해주는 것이다.
- 따라서 개발자가 작성해야 할 코드는 눈에띄게 줄어든다.
- 즉, 빠른 개발이 가능하며 이해하기도 쉽다.
SQL문과 프로그램 코드가 독립적이다.
- 기존 JDBC 방법의 경우, 쿼리가 달라질 경우 자바 코드를 수정해야 하기 때문에, 독립적이지 못하다.
- 그에 비해 MyBatis에서는 xml 파일에 쿼리 작성을 따로 하여 관리한다.
- 즉, SQL문이 바뀐다고 해서 java 파일을 다시 컴파일하지 않아도 된다.
MyBatis 주요 구성 컴포넌트의 역할
MyBatis가 제공하는 클래스 및 파일
- MyBatis 설정파일 : ~config.xml 형태의 파일을 말한다.
- DB 정보 및 Mapping 되는 파일의 경로 등 고정된 모든 개발 환경 및 운영정보를 설정하는 파일이다.
- SqlSessionFactoryBuilder : MyBatis 설정파일을 참조하여, SqlSessionFactory를 생성한다.
- SqlSessionFactory : SqlSession을 생성
- SqlSession : 핵심적인 역할을 하는 클래스로, Mapping된 SQL을 실행하는 역할을 한다.
- 내부적으로 트랜잭션 관리를 수행하기도 한다.
- 해당 Object는 Thread-Safe 하지 않기 때문에, 스레드마다 필요에 따라서 생성하여 사용한다.
개발자에 의해 구현되는 클래스 및 파일
- mapping 파일 : DB에 대해 수행할 SQL문을 작성하는 xml 파일을 말한다.
- SQL문과 OR Mapping을 설정해준다.
컴포넌트 호출 순서
- Application에서 SqlSessionFactoryBuilder라는 인터페이스를 호출한다.
- 해당 빌더가, MyBatis Config File 정보를 읽어온다.
- 빌더는 그 정보를 토대로 SqlSessionFactory를 생성해준다.
- 개발자가 Application을 통해서 CRUD 등 DB에 access하는 기능의 메소드를 호출한다.
- 그러면서 Application상에서 SqlSessionFactory를 호출한다.
- 이 때 SqlSessionFactory가 SqlSession을 생성하고, 개발자가 작성한 Application 코드에 return 해준다.
- 리턴 받은 Application에서는 SqlSession에 있는 메소드를 호출하면 된다.
- SqlSession이 핵심 역할을 해주는데, 개발자가 작성한 Mapping File 즉, SQL문을 호출해주는 기능을 한다.
MyBatis 사용법?
- build.gradle 파일에 의존성 추가하기
//ex)
compile group: 'org.mybatis', name: 'mybatis', version: '3.5.4'
출처
[Spring Framework Basic 16강 MyBatis 개요 | T아카데미](https://www.youtube.com/watch?v=9b5P4YiyqOY&feature=youtu.be) |