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 |