본문 바로가기
Back-end/Spring

Mybatis 연동하기

by JiGyeong 2019. 3. 4.



0. Mybatis Plugin 다운받기 (사전준비)


[Help] - [Eclipse Marketplace] 에서



Mybatipse 를 검색해 설치한다.





1. board-mapping.xml 만들기



src/main/resources 밑에 mappings 패키지를 하나 생성하고


[New] - [Other] - [Mybatis Mapper] 로 board-mapping.xml 을 만들어 준다.



내용은 다음과 같다.


자유롭게 sql문을 변경해 사용하면 된다.


<?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="seq" column="SEQ"/>
<result property="title" column="SEQ"/>
<result property="writer" column="WRITER"/>
<result property="content" column="CONTENT"/>
<result property="regDate" column="REGDATE"/>
<result property="cnt" column="CNT"/>
</resultMap>
<insert id="insertBoard">
insert into board(seq, title, writer, content)
value((select nvl(max(seq),0)+1 from board), #{title}, #{writer}, #{content})
</insert>
<update id="updateBoard">
update voard set title=#{title}, content=#{content} where seq=#{seq}
</update>
<delete id="deleteBoard">
delete board where seq=#{seq}
</delete>
<select id="getBoard" parameterType="board" resultMap="boardResult">
<![CDATA[
select *
from board
where seq <= #{seq}
]]>
</select>
<select id="getBoardList" resultType="board">
select * from board
where title like '%'||#{searchKeyword}||'%'
order by seq desc
</select>
</mapper>


2. sql-map-config.xml 을 만들어준다.


여기서는 mapper 대신 configuration을 써줌에 유의하자.


<?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>
<!-- Alias 설정 -->
<typeAliases>
<typeAlias alias="board" type="com.kt.jigyeong.board.BoardVO"/>
</typeAliases>
<!-- Sql Mapper 설정 -->
<mappers>
<mapper resource="mappings/board-mapping.xml"></mapper>
</mappers>
</configuration>


3. applicationContext.xml 에 아래 구문을 추가하여 Datasource도  setter 인젝션으로 추가하고, sql-map-config.xml도 setter 인젝션으로 추가하자.


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


4. DAO 클래스를 만들어서 호출해다 쓰면 된다.

@Autowired를 붙이면 스프링 컨테이너가 setSqlSessionFactory() 메소드를 자동으로 호출한다.

이때 applicationContent 파일에 <bean> 등록된 SqlSessionFactoryBean 객체를 인자로 받아 부모인 SqlSessionDaoSupport에 setSqlSessionFactory() 메소드로 설정해준다.


package com.kt.jigyeong.board.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.kt.jigyeong.board.BoardVO;
@Repository
public class BoardDAOMybatis extends SqlSessionDaoSupport{
@Autowired
public void setSqlSessionFactory (SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
// CRUD 기능의 메소드 구현
// 글 등록
public void insertBoard(BoardVO vo) {
System.out.println("===> Mybatis 로 insertBoard() 기능 처리");
getSqlSession().insert("BoardDAO.insertBoard", vo);
}
// 글 수정
public void updateBoard(BoardVO vo) {
System.out.println("===> Mybatis 로 updateBoard() 기능 처리");
getSqlSession().update("BoardDAO.updateBoard", vo);
}
// 글 삭제
public void deleteBoard(BoardVO vo) {
System.out.println("===> Mybatis 로 deleteBoard() 기능 처리");
getSqlSession().delete("BoardDAO.deleteBoard", vo);
}
// 글 상세 조회
public BoardVO getBoard(BoardVO vo) {
System.out.println("===> Mybatis 로 getBoard() 기능 처리");
return (BoardVO) getSqlSession().selectOne("BoardDAO.getBoard", vo);
}
// 글 목록 조회
public List<BoardVO> getBoardList(BoardVO vo){
return getSqlSession().selectList("BoardDAO.getBoard", vo);
}
}


5. Service에서 DAO를 호출하여 사용한다.


package com.kt.jigyeong.board.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.kt.jigyeong.board.BoardService;
import com.kt.jigyeong.board.BoardVO;
import com.kt.jigyeong.common.LogAdvice;
@Service("boardService")
public class BoardServiceImpl implements BoardService{
@Autowired
private BoardDAOMybatis boardDAO;
private LogAdvice log;
public void insertBoard(BoardVO vo) {
boardDAO.insertBoard(vo);
}
public void updateBoard(BoardVO vo) {
boardDAO.updateBoard(vo);
}
public void deleteBoard(BoardVO vo) {
boardDAO.deleteBoard(vo);
}
public BoardVO getBoard(BoardVO vo) {
return boardDAO.getBoard(vo);
}
public List<BoardVO> getBoardList(BoardVO vo) {
return boardDAO.getBoardList(vo);
}
}