Spring

Mybatis 프레임워크 스프링 연동

Clearing 2022. 10. 5. 14:44
728x90

Mybatis에서 Spring 연동에 필요한 API를 제공하기 때문에 이를 사용하여 Spring 연동을 진행한다.

 

진행순서

1) pom.xml에 dependency 추가

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

아래의 설정과  충돌을 일으키는 경우가 있어 충돌 시 아래의 설정은 사용하지 않는다.

		<dependency>
			<groupId>org.apache.ibatis</groupId>
			<artifactId>ibatis-core</artifactId>
			<version>3.0</version>
		</dependency>

 

2) db.properties 파일 삭제

 datasource가 스프링 설정파일에 존재하기 때문에 db.properties 파일을 삭제한다.

 (스프링 설정파일에서 "dataSource"로 등록되어있음)

	<!-- DataSource 설정하기 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
		<property name="username" value="kim" />
		<property name="password" value="1234" />
	</bean>

 

3) SqlSessionFactory 클래스(기존에는 SqlSessionBean 클래스 파일)를 스프링 설정 파일에 <bean> 등록해야 한다.

Mybatis 스프링에서 제공해주는 클래스

    => SqlSessionFactory로부터 DB 연동에 사용할 SqlSession 객체를 얻기 위함

	<!-- Mybatis를 Spring에 연동 -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:sql-map-config.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>

 

4) Mybatis를 이용한 DAO 클래스를 구현할 준비 완료
   멤버 변수 mybatis에게 SqlSessionTemplate 클래스를 <bean> 등록하여 DI

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

 

Mybatis DAO

package com.kim.biz.board.impl;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.kim.biz.board.BoardVO;

@Repository("boardDAO")
public class BoardDAO3 {
	
	@Autowired
	private SqlSessionTemplate mybatis;
		
	public void insertBoard(BoardVO vo) {
		mybatis.insert("BoardDAO.insertBoard",vo);
	}
	void updateBoard(BoardVO vo) {
		mybatis.update("BoardDAO.updateBoard",vo);
	}
	void deleteBoard(BoardVO vo) {
		mybatis.delete("BoardDAO.deleteBoard",vo);
	}
	BoardVO selectOneBoard(BoardVO vo) {
		return mybatis.selectOne("BoardDAO.selectOneBoard",vo);
	}
	public List<BoardVO> selectAllBoard(BoardVO vo) {
		return mybatis.selectList("BoardDAO.selectAllBoard",vo);
	}
}

 

Mybatis SQL문이 작성된. 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="BoardDAO">
	
	<!--
	<resultMap type="board" id="boardResult">
		<id property="bid" column="BID" />
		<result property="title" column="TITLE" />
		<result property="writer" column="WRITER" />
		<result property="content" column="CONTENT" />
	</resultMap>
	-->

	<insert id="insertBoard">
		<if test="img == null">
		INSERT INTO BOARD(BID,TITLE,WRITER,CONTENT,IMG) VALUES((SELECT NVL(MAX(BID),0)+1 FROM BOARD),#{title},#{writer},#{content},'혜지.png')
		</if>
		<if test="img != null">
		INSERT INTO BOARD(BID,TITLE,WRITER,CONTENT,IMG) VALUES((SELECT NVL(MAX(BID),0)+1 FROM BOARD),#{title},#{writer},#{content},#{img})
		</if>
		
	</insert>
	
	<update id="updateBoard">
		UPDATE BOARD SET TITLE=#{title}, WRITER=#{writer} WHERE BID=#{bid}
	</update>
	
	<delete id="deleteBoard">
		<![CDATA[
		DELETE BOARD WHERE BID=#{bid}
		]]>
	</delete>
	
	<select id="selectOneBoard" resultType="board">
		SELECT * FROM BOARD WHERE BID=#{bid}
	</select>
	
 
	<select id="selectAllBoard" resultType="board">
		SELECT * FROM BOARD 
		WHERE 1 = 1
		<if test="searchCondition == 'title'"> 
		AND TITLE LIKE '%'||#{searchContent}||'%'
		</if>
		<if test="searchCondition == 'writer'">
		AND WRITER LIKE '%'||#{searchContent}||'%'
		</if>
		<if test="searchCondition == 'content'">
		AND CONTENT LIKE '%'||#{searchContent}||'%' 
		</if>
		ORDER BY BID DESC
	</select>

	<!-- 
	<select id="selectAllBoard" resultMap="boardResult">
		SELECT * FROM BOARD WHERE TITLE LIKE '%'||#{searchContent}||'%' ORDER BY BID DESC
	</select>
	 -->

</mapper>

 

+) 동적 SQL문 (Dynamic SQL)

Mybatis는 SQL의 유연성을 향상하려고 Dynamic SQL을 지원해준다.
동적 엘리먼트(요소, 태그)를 사용해서 SQL문을 처리할 수 있다.

위와 같이 if 태그를 사용하여 조건 설정 가능

728x90

'Spring' 카테고리의 다른 글

스프링 부트 설치 및 시작  (0) 2022.10.24
Spring Ajax를 사용한 정렬  (1) 2022.10.07
Mybatis 프레임워크  (1) 2022.10.04
Spring 다국어 처리  (0) 2022.09.29
Spring 예외 페이지 설정  (0) 2022.09.28