Formoat's Open Blog
MyBatis - 마이바티스 본문
# MyBatis
개발자가 지정한 SQL, 저장 프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.
JDBC로 처리하는 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 대신 해주며 데이터베이스 레코드에
원시타입, Map, 자바 POJO를 설정해 매핑하기 위해 XML, 어노테이션을 사용할 수 있다.
MyBatis의 특징
- 간결한 코드 처리
- SQL문의 분리 운영
- Spring과의 연동으로 자동화된 처리
- 동적 SQL을 이용한 제어 기능
- JDBC에서 개발자가 직접 처리하는 PreparedStatement의 '?'에 대한 설정 또는 ResultSet을 이용한 처리가 이루어짐
- SQL문을 자바 코드와 분리해 XML or 어노테이션을 이용해 처리한다.
- 스프링 프레임워크와 MyBatis를 연계하는 Mybatis-Spring 라이브러리를 이용해 개발자의 직접적 SQL문 호출없이
원하는 결과를 이끌어 낸다.
# MyBatis 구현 방법
1) XML을 이용해 SQL문을 설정하고 DAO에서 XML을 찾아 실행하는 방식
- 장점 : SQL문은 XML로 작성되기 때문에 SQL문의 수정, 유지보수에 적합하다.
- 단점 : 개발시 코드의 양이 많아지고 복잡성이 증가한다.
2) 어노테이션과 인터페이스를 이용한 SQL문 설정 방식
- 장점 : 별도의 DAO가 없더라도 개발이 가능하기 때문에 생성성이 크게 증가한다.
- 단점 : SQL문을 어노테이션으로 작성하기 때문에 수정이 일어날 때마다 컴파일을 다시 해야함.
3) 인터페이스와 XML로 작성된 SQL문 활용 방식 (본문에선 이 방식을 사용함)
- 장점 : 간단한 SQL문은 어노테이션으로, 복잡한 SQL문은 XML로 처리할 수 있어 상황에 따른 유연한 대처 가능
- 단점 : 개발자에 따라 개발 방식의 차이가 있을 수 있기 때문에 유지보수가 중요한 프로젝트의 경우 부적합
필요한 라이브러리(Maven - Dependency)
(1) Oracle JDBC
(2) MyBatis
(3) MyBatis-Spring
(4) Spring-JDBC
<!-- https://mvnrepository.com/artifact/com.jslsolucoes/ojdbc6 -->
<dependency>
<groupId>com.jslsolucoes</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
< XML Mapper / Interface 작성 >
※ Mapper 파일 작성시 주의사항
Mapper.xml 파일에 '>', '<' 기호 사용시 에러가 발생한다. 이는 xml파서가 크다, 작다가 아닌 연산자로서
인식하기 때문인데 이를 해결하기 위해서 CDATA영역을 사용하게 된다.
Ⅰ. CDATA영역 표현방법 → <![CDATA[ SQL문 ]]>
Ⅱ. 조건문 표현방법
< applicationContext.xml >
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Connection Pool Setting -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="username" value="java" />
<property name="password" value="12345" />
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl" />
</bean>
<!-- DataSource Object -->
<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikariConfig"/>
</bean>
<!-- SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds"/>
</bean>
<context:component-scan base-package="com.spring.service"/>
<mybatis-spring:scan base-package="com.spring.mapper"/>
</beans>
# MyBatis 컴포넌트
Component | Description |
SqlSession | 실제 SQL을 실행하는 객체로 SQL을 처리하기 위해 JDBC드라이버를 사용 |
SqlSessionFactoryBean | 설정 파일의 내용을 토대로 SqlSessionFactory를 생성 |
SqlSessionFactoryBuilder | ... |
SqlSessionTemplate | ... |
# MyBatis Plugin
'Java > Spring' 카테고리의 다른 글
Logback SLF4J - 로그 남기기 (0) | 2019.10.08 |
---|---|
Transaction - 트랜잭션 (0) | 2019.10.08 |
hikari CP (0) | 2019.10.04 |
AOP(Aspect Oriented Programming) - 관점 지향 프로그래밍 (0) | 2019.10.04 |
DI (Dependency Injection) - 의존성 주입 (0) | 2019.10.01 |