Mybatis 에서 Spring에게 연동에 필요한 API를 제공한다.
1. pom.xml에 추가(ibatis dependency 제외함)
<!-- 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로 등록되어있다.
<!-- 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="dgw" />
<property name="password" value="950617" />
</bean>
<!-- Spring JDBC 설정하기 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
3. SqlSessionFactory 클래스를 스프링 설정파일에 bean 등록을 해야 객체로 사용 가능함
=> SqlSessionFactory 객체로부터 DB연동에 사용할 SqlSession 객체를 얻기 위함
<!-- Mybatis Spring 연동 -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:sql-map-config.xml"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
4. Mybatis를 이용한 DAO 클래스를 구현 준비
=> 멤버변수 Mybatis에게 SqlSessionTemplate 클래스를 <bean> 등록하여 DI
<!-- 생성자 주입 -->
<bean class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSession" />
</bean>
5. 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; //SqlSessionTemplate로 등록
public void insertBoard(BoardVO vo) {
mybatis.insert("BoardDAO.insertBoard",vo);
}
public void updateBoard(BoardVO vo) {
mybatis.update("BoardDAO.updateBoard",vo);
}
public void deleteBoard(BoardVO vo) {
mybatis.delete("BoardDAO.deleteBoard",vo);
}
public BoardVO selectOneBoard(BoardVO vo) {
return mybatis.selectOne("BoardDAO.selectOneBoard",vo);
}
public List<BoardVO> selectAllBoard(BoardVO vo) {
return mybatis.selectList("BoardDAO.selectAllBoard",vo);
}
}
Mybatis를 이용한 동적 sql문
기존의 sql문을 동적으로 구현할 때는 Java를 통해 초기설정한 sql문에 각 조건에 따라 문자열을 붙여 필터기능을 할 수 있도록 했었다.
구현한 필터기능 설명 : https://blog.naver.com/jun950617/222864534759
[프로젝트] 필터 검색을 통해 원하는 정보 출력하기(ft. FrontController)
프로젝트의 메인 기능인 필터 기능을 구현해보았다. 필터는 연료/지역/가격/주행거리/연식 총 5개의 카테고...
blog.naver.com
하지만 Mybatis는 sql의 유연성을 더욱 향상시키는 dynamic sql을 지원해주어 동적 엘리먼트를 사용해서 sql문을 처리할 수 있다.
이를 통해 검색/필터 등의 기능에서 더욱 쉽게 적용할 수 있다.
검색 기능 예시
<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>
<if test="searchCondition == 'CONTENT'">
AND CONTENT LIKE '%'||#{searchContent}||'%'
</if>
ORDER BY BID DESC
</select>
동적 sql문을 사용하기 위해 WHERE 1=1 조건문을 초기식에 넣어주었다.
if문을 통해 해당 조건에 해당되면 작성한 sql문이 붙어 적용된다.
코드 확인
'IT Study > Spring' 카테고리의 다른 글
Spring - Mybatis DB 직접 연동하기 및 insert 적용 (0) | 2023.01.03 |
---|---|
Spring - lombok 설치 및 적용하기 (0) | 2023.01.03 |
Spring - 다국어 처리(국제화) (0) | 2023.01.03 |
Spring - 예외 페이지 설정(@ 설정 / .xml설정) (0) | 2023.01.03 |
Spring - MultipartFile 인터페이스를 이용한 파일 업로드 기능 구현 (0) | 2023.01.03 |
댓글