MyBatis

 

SQL Mapping Framework - Easy & Simple

자바 코드에서 SQL 문을 분리해서 관리

매개 변수 설정과 쿼리 결과를 읽어오는 코드를 제거

작성할 코드를 줄어서 생산성 향상 & 유지 보수 편리

 

 

MVNRepository 가서 코드 가져오자

 

MyBatis, MyBatis Spring 둘 다 필요함

Spring 을 5.0 이상의 버젼을 쓸 때

MyBatis 3.5 버젼 이상

MyBatis Spring 2.0 버젼 이상 써야 함

 

 

 

설정

 

root-context.xml 코드 추가

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation"  value="classpath:mybatis-config.xml"/>
		<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/>
	</bean>

	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactory"/>
	</bean>

 

pom.xml 코드 추가

 

	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.9</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.7</version>
		</dependency>

 

 

 

 

 

mybatis-config.xml 추가

 

src / main / resources / mybatis-config.xml

<?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>
	<typeAliases>
		<typeAlias alias="BoardDto" type="com.jcy.usedhunter.domain.BoardDto"/>
	</typeAliases>
</configuration>

 

board 테이블 생성

 

CREATE TABLE `usedhunter`.`board` (
  `bno` INT NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(100) NOT NULL,
  `content` TEXT NOT NULL,
  `writer` VARCHAR(30) NOT NULL,
  `view_cnt` INT NULL DEFAULT 0,
  `comment_cnt` INT NULL DEFAULT 0,
  `reg_date` DATETIME NULL DEFAULT now(),
  `up_date` DATETIME NULL DEFAULT now(),
  PRIMARY KEY (`bno`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

 

 

SqlSessionFactoryBean 과 SqlSessionTemplate

 

MyBatis, Interface

SqlSessionFactory - SqlSession 을 생성해서 제공

SqlSession - SQL 명령을 수행하는데 필요한 메서드 제공

 

MyBatis Spring, 구현부 class

SqlSessionFactoryBean - SqlSessionFactory 를 Spring 에서 사용하기 위한 빈

SqlSessionTemplate - SQL 명령을 수행하는데 필요한 메서드 제공. thread-safe

thread-safe 의 의미 : SqlSessionTemplate 을 이용해서 DAO 를 작성하고 공유할 때 안전하다.

 

 

 

root-context.xml

 

mapper 는 SQL 문서를 모아둔 곳

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation"  value="classpath:mybatis-config.xml"/>
		<property name="mapperLocations" value="classpath*:/mapper/*Mapper.xml"/>
	</bean>

	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactory"/>
	</bean>

 

 

 

 

SqlSession 의 주요 메서드

 

String statement : SQL 문의 이름

Object parameter : SQL 문에서 '?' 값을 객체로 전달 (ex : User, Map)

메서드 설명
int insert(String statement)
int insert(String statement, Object parameter)
insert 문을 실행하고, insert 된 행의 개수를 반환
int delete(String statement)
int delete(String statement, Object parameter)
delete문을 실행하고, delete 된 행의 개수를 반환
int update(String statement)
int update(String statement, Object parameter)
update문을 실행하고, update된 행의 개수를 반환
T select(String statement)
T selectOne(String statement, Object parameter)
하나의 행을 반환하는 select 에 사용, parameter 로 SQL 에 binding 될 값 제공
List<E> selectList(String statement)
List<E> selectList(String statement, Object parameter)
여러 행을 반환하는 select 에 사용, parameter 로 SQL 에 binding 될 값 제공
Map<K, V> selectMap(String statement, String KeyCol)
Map<K, V> selectMap(String statement, String KeyCol, Object parameter)
여러 행을 반환하는 select 에 사용, keyCol에 Map의 key로 사용할 컴럼 지정

 

 

Mapper XML 의 작성

 

boardMapper.xml

insert 는 반환 타입이 항상 int 라 resultType 생략가능

 

 

<typeAliases> 으로 이름 짥게 하기

 

mybatis-config.xml

alias="BoardDto" 같이 별명은 대소문자 구별 안한다.

https://mybatis.org/mybatis-3/configuration.html#typeAliases 

 

mybatis – MyBatis 3 | Configuration

Configuration The MyBatis configuration contains settings and properties that have a dramatic effect on how MyBatis behaves. The high level structure of the document is as follows: configuration properties These are externalizable, substitutable properties

mybatis.org

<configuration>
	<typeAliases>
		<typeAlias alias="BoardDto" type="com.jcy.usedhunter.domain.BoardDto"/>
	</typeAliases>
</configuration>

 

복사했습니다!