본문 바로가기
MyBatis

230203 MyBatis 설치

MyBatis

라이브러리이자 프레임워크

 

 

관련 API
http://www.mybatis.org/mybatis-3/

 

mybatis – MyBatis 3 | Introduction

What is MyBatis? MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use

mybatis.org

  • 개발자가 지정한 SQL,고급 매핑을 지원하는 프레임워크.
  • JDBC코드와 수동으로 셋팅하는 파라미터와 결과 매핑을 제거한다.(pstmt등이 자동화. sql문만 남을 것)
    -기반이 JDBC에 있다.
  • 복잡한 JDBC코드를 걷어내며 깔끔한 소스코드를 유지.
  • DAO계층을 대신한다.
  • 기존 DAO의 Interface의 구현클래스를 xml파일이 대신한다.

 

퍼시스턴스 프레임워크-영속성 프레임워크. 영구적으로 지속하는 프레임워크
xml파일 자체를 영구적으로 저장

JDBC로 처리하는 상당부분의 코드와 파라미터 설정 및 결과 매핑을 대신해줌
자바 POJO를 설정해서 매핑하기 위해 XML과 어노테이션을 사용할 수 있다.

매퍼 interface 추상메서드 선언
mapper.Xml 오버라이딩
xml에 구문 작성

서비스 영역에선 인터페이스 실행

JDBC프로그램과 mybatis의 차이

  1. 직접 Connection 생성 ->자동 Connection 생성
  2. 직접 Close() 처리 ->자동 Close() 처리
  3. 직접 PreparedStatement 생성->자동 PreparedStatement 처리
  4. Pstmt의 setxxx() 직접 처리 ->#{name} 을 통한 ? 처리
  5. Select의 경우 ResultSet 처리 ->리턴 타입으로 자동 ResultSet 처리

스프링에서 제공하는게 아니다.
스프링에서 사용하려면 
MyBatis모듈,
MyBatis-Spring module을 다운로드받아야 한다.


MyBatis 추가

MyBatis모듈
버전은 3.5.6으로

porm.xml에 추가.

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

MyBatis Spring 연결 모듈
버전은 2.0.6으로

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
</dependency>


SQLSessionFactory라는 클래스(mybatis 핵심객체)를 빈으로 생성만 하면 됨
마이바티스 사용시 기본적으로 spring-jdbc라이브러리가 있어야 함.


모듈 받고, 활성화하고(namespace에 추가), root-context.xml에 빈생성만 하면 된다.

어노테이션이 있는 애들을 마이바티스 빈처럼 읽게.
근데 막상 사용할 땐 어노테이션이 없는데,(@Mapper류) 어노테이션을 달던 달지 않던 모든 인터페이스를 읽음.
->base-package를 읽어 참조할 수 있는 인터페이스를 자동으로 등록시킴.

인터페이스가 많다면, @Mapper 어노테이션을 사용해 마이바티스가 참조함을 지칭. 생략가능


인터페이스와 xml파일을 이름명이 완벽히 동일해야 한다. 그래야 찾음.


root-context.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:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	
	<!-- 데이터베이스 정보는 외부 파일로 관리 -->
	<!-- classpath:/ 자바/리소스 경로를 가르킵니다 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:/DB-config/hikari.properties"/>
	</bean>
	
	<!-- 데이터베이스 설정 -->
	<bean id="hikari" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="${ds.driverclassName}"/>
		<property name="jdbcUrl" value="${ds.jdbcUrl}"/>
		<property name="username" value="${ds.username}"/>
		<property name="password" value="${ds.password}"/>
	</bean>
	
	 
	 <!-- 오라클 -->
	 <!-- <bean id="hikari" class = "com.zaxxer.hikari.HikariConfig">
      <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
      <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"/>
      <property name="username" value="jsp"/>
      <property name="password" value="jsp"/>
   </bean> -->
	 
	 <!-- 데이터베이스 정보를 주입 -->
	<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
		<constructor-arg ref="hikari"/>
	</bean>
	
	
	<!-- 마이바티스 설정 sqlSessionFactory 빈으로 생성-->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 데이터베이스 정보 전달 -->
		<property name="dataSource" ref="ds"/>
	</bean>
	
	<!-- 마이바티스 관련 어노테이션을 찾아서 설정으로 등록 (모든 인터페이스를 등록)-->
	<mybatis-spring:scan base-package="com.simple.basic.mapper"/>
	

	
	
</beans>

 

 

 

 

src/test/java의 com.simple.basic에 있는

JDBCMybatis.java

package com.simple.basic;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.simple.basic.mapper.TestMapper;

@RunWith(SpringJUnit4ClassRunner.class) //junit으로 테스트환경을 구성
@ContextConfiguration("file:src/main/webapp/WEB-INF/config/root-context.xml") //동작시킬 스프링 설정파일
public class JDBCMybatis {
	
	@Autowired
	SqlSessionFactoryBean sqlSessionFactory;
	
	@Autowired
	TestMapper testMapper;
	
	
	
	@Test
	public void testCode01() {
		//마이바티스 핵심 객체
		System.out.println(sqlSessionFactory);
	}
	
	@Test
	public void testCode02() {
		String time=testMapper.getTime();
		System.out.println(time);
	}
	
}

 

 

TestMapper.java

인터페이스임

package com.simple.basic.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper //마이바티스 지칭 -(스프링에서는 생략가능)
public interface TestMapper {
	
	public String getTime(); //1
}

 

 

TestMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
  <!-- 인터페이스의 풀경로를 적습니다. -->
  <mapper namespace="com.simple.basic.mapper.TestMapper">
  		<!-- id는 인터페이스의 메서드명, resultType은 반환타입 -->
	  <select id="getTime" resultType="string">
	  		select now()
	  </select>
  </mapper>

 

MySQL에 select now(); 구문이 있다.

 

JDBCMybatis.java실행 콘솔창

INFO : org.springframework.test.context.support.DefaultTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
INFO : org.springframework.test.context.support.DefaultTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@4efc180e, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@bd4dc25, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@25084a1e, org.springframework.test.context.support.DirtiesContextTestExecutionListener@156b88f5, org.springframework.test.context.transaction.TransactionalTestExecutionListener@3bf9ce3e, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@16610890]
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from URL [file:src/main/webapp/WEB-INF/config/root-context.xml]
INFO : org.springframework.context.support.GenericApplicationContext - Refreshing org.springframework.context.support.GenericApplicationContext@5d534f5d: startup date [Fri Feb 03 20:24:50 KST 2023]; root of context hierarchy
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
INFO : com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
org.mybatis.spring.SqlSessionFactoryBean@6d2dc9d2
2023-02-03 20:24:51
INFO : org.springframework.context.support.GenericApplicationContext - Closing org.springframework.context.support.GenericApplicationContext@5d534f5d: startup date [Fri Feb 03 20:24:50 KST 2023]; root of context hierarchy
INFO : com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
INFO : com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.