728x90
반응형
지난 포스팅에 이어서 Mybatis 프레임워크를 Spring에 연동해보려고 한다.
1. 라이브러리 (pom.xml) 변경
Mybatis에서 Spring에게 연동에 필요한 API를 제공한다.
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.4</version>
</dependency>
2. db.properties 파일 삭제 + sql-map-config.xml 파일에서 사용하지 않는 설정제거
이미 DataSource가 스프링 설정파일(applicationContext)에 존재하기 때문!
applicationContext(스프링 설정파일)dataSource로 등록되어있다.
sql-map-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>
<!-- 별칭(Alias) 설정 -->
<typeAliases>
<typeAlias type="com.kim.biz.board.BoardVO" alias="board" />
<typeAlias type="com.kim.biz.member.MemberVO" alias="member" />
</typeAliases>
<mappers>
<mapper resource="mappings/board-mapping.xml" />
<mapper resource="mappings/member-mapping.xml" />
</mappers>
</configuration>
3. SqlSessionFactory 클래스를 스프링 설정파일에 <bean> 등록해야함
SqlSessionFactory 객체로부터 DB연동에 사용할 SqlSession객체를 얻기위함
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
<context:component-scan base-package="com.kim.biz" />
<aop:aspectj-autoproxy />
<!-- 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>
<!-- Spring JDBC 설정하기 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 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>
<!--멤버변수 mybatis에게 SqlSessionTemplate 클래스를 <bean> 등록하여 DI -->
<bean class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSession" />
</bean>
</beans>
4. 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);
//mybatis.commit();
}
void updateBoard(BoardVO vo) {
mybatis.update("BoardDAO.updateBoard",vo);
//mybatis.commit();
}
void deleteBoard(BoardVO vo) {
mybatis.delete("BoardDAO.deleteBoard",vo);
//mybatis.commit();
}
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 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="fileName" column="UPLOADFILE" />
</resultMap>
<insert id="insertBoard">
INSERT INTO BOARD(BID,TITLE,WRITER,CONTENT,UPLOADFILE) VALUES((SELECT NVL(MAX(BID),0)+1 FROM BOARD),#{title},#{writer},#{content},#{fileName})
</insert>
<update id="updateBoard">
UPDATE BOARD SET TITLE=#{title}, CONTENT=#{content}, UPLOADFILE=#{fileName} WHERE BID=#{bid}
</update>
<delete id="deleteBoard">
<![CDATA[
DELETE BOARD WHERE BID=#{bid}
]]>
</delete>
<select id="selectOneBoard" resultMap="boardResult">
SELECT * FROM BOARD WHERE BID=#{bid}
</select>
<select id="selectAllBoard" resultMap="boardResult">
SELECT * FROM BOARD
WHERE 1 = 1
<if test="searchCondition =='TITLE'">
AND TITLE LIKE '%'||#{searchContent}||'%'
</if>
<if test="searchCondition =='WRITER'">
AND WRITER LIKE '%'||#{searchContent}||'%'
</if>
ORDER BY BID DESC
</select>
</mapper>
if 문을 이용한 동적 쿼리
여기서 WHERE 1=1 는 동적쿼리를 만들때 사용하는데 , 수많은 쿼리를 만들다 보면 첫번째 조건에 어떤 것이 옳은지 몰라서 제일 먼저 1=1 같은 무의미한 조건을 걸어두고, 이후에 AND 조건을 쭉 붙이기 위해 사용한다.
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring Boot] 프로젝트 디렉토리 구조 (0) | 2022.10.26 |
---|---|
[Spring Boot] 설치 방법 및 초기 설정 (0) | 2022.10.25 |
[Spring] Mybatis 프레임워크 설치, DB연동 (0) | 2022.10.04 |
[Spring] 다국어 처리 (0) | 2022.09.30 |
[Spring] 예외처리 (@, xml 활용 방식) (0) | 2022.09.28 |