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
123456789101112131415161718192021222324252627<!-- https://mvnrepository.com/artifact/com.jslsolucoes/ojdbc6 -->com.jslsolucoesojdbc611.2.0.1.0<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->org.mybatismybatis3.4.6<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->org.mybatismybatis-spring1.3.2<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->org.springframeworkspring-jdbc5.2.0.RELEASE
< XML Mapper / Interface 작성 >

※ Mapper 파일 작성시 주의사항
Mapper.xml 파일에 '>', '<' 기호 사용시 에러가 발생한다. 이는 xml파서가 크다, 작다가 아닌 연산자로서
인식하기 때문인데 이를 해결하기 위해서 CDATA영역을 사용하게 된다.
Ⅰ. CDATA영역 표현방법 → <![CDATA[ SQL문 ]]>

Ⅱ. 조건문 표현방법

< applicationContext.xml >
123456789101112131415161718192021222324252627282930<?xml version="1.0" encoding="UTF-8"?>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-springhttp://mybatis.org/schema/mybatis-spring-1.2.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.3.xsd"<!-- Connection Pool Setting -->id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"name="driverClassName" value="oracle.jdbc.OracleDriver"name="username" value="java"name="password" value="12345"name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"<!-- DataSource Object -->id="ds" class="com.zaxxer.hikari.HikariDataSource"ref="hikariConfig"<!-- SqlSessionFactory -->id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"name="dataSource" ref="ds"base-package="com.spring.service"base-package="com.spring.mapper"
# 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 |