Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Formoat's Open Blog

MyBatis - 마이바티스 본문

Java/Spring

MyBatis - 마이바티스

snd-snd 2019. 10. 7. 14:06

# 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
Comments