Java Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 SQL Mapping 프레임워크다.
SQL을 별도의 파일(xml)로 분리해서 관리한다.
Object와 SQL 사이의 parameter mapping 작업을 자동으로 해준다.
Hibernate나 JPA(Java Persistence API)처럼 새로운 DB 프로그래밍 패러다임을 익혀야 하는 부담 없이 SQL을 그대로 이용하면서 JDBC 코드 작성의 불편함을 제거해주고, 도메인 객체나 VO 객체를 중심으로 개발이 가능하다.
즉, 데이터 베이스 연결을 아파치 톰캣이 한다.
👀MyBatis 는 JDBC 코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거한다.
DAO 구현체 대신 myBatis 프레임워크를 이용해 DBMS connection 및 query를 실행한다.
❓ SQL Mapping(MyBatis) VS ORM Framework(JPA)
- SQL Mapping은 객체(class)를 테이블과 매핑하지 않고 쿼리문과 매핑한다.
- 쿼리문 직접 작성해야한다.
- RDB에 종속적이다. - DB에 따라 다르게 쿼리문을 작성해야 한다.
- 쿼리문을 작성하기에 자유롭다.
- ORM Framework은 객체와 테이블을 매핑한다.
- 쿼리문을 개발자가 직접 작성하지 않고 method를 이용하여 쿼리한다.
- RDB에 종속적이지 않다. - 메소드를 사용하기 때문에 DBMS에 따라 쿼리문을 다르게 짜지 않아도 된다.
- 그러나, 복잡한 쿼리문을 사용하기 힘들다.
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
호출해야 되는 인터페이스 이름까지를 namespace로 하여 중복되지 반드시 중복되지 않게 해야한다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 설정을 외부에 옮겨 외부의 설정파일을 등록하여 사용간능하다. -->
<properties resource="설정파일이 있는 곳"/>
<!-- 별칭 설정 -->
<typeAliases>
<!-- 별칭으로 설정하면 sql작성한 xml에서 별칭으로 사용할 수 있다 -->
<typeAlias type="Dto가 있는 곳" alias="별칭" />
</typeAliases>
<!-- DB연결 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 쿼리 작성된 소스 파일을 모아놓음 -->
<mappers>
<!-- 실제 쿼리문을 사용한 파일 -->
<mapper resource="실제 쿼리문을 사용한 xml파일" />
</mappers>
</configuration>
외부 설정 .xml
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/테이블 // 옵션 : ?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8
username=
password=