일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 내림차순정렬
- 자바GUI
- 자바 #java #이클립스 #eclipse #switch #switch문 #사칙연산 #계산기 #calculator #간단한계산기
- MVC
- 자바 계산기
- 오름차순정렬
- 계산기GUI
- 스프링
- 알고리즘
- Spring
- 어노테이션
- 계산기
- 자바
- Swing
- 이클립스
- Java
- GUI
- 이클립스 #이클립스단축키 #자바 #자바단축키
- 배열정렬
- Eclipse
- 버블소트
- annotation
- 버블정렬
- 숫자정렬
- 자바알고리즘
- Today
- Total
온 코딩
[Spring](게시판 예제) 스프링과 MyBatis 연동, Dynamic SQL 본문
1. 라이브러리(dependency) 추가 (pom.xml)
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<!-- Mybatis Spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.4</version>
</dependency>
저장 후 메이븐에 제대로 추가 되었는지 확인!
https://mvnrepository.com 메이븐 디펜던시 사이트 : 디펜던시 코드 생각 안 날 때 참고...
2. Mybatis 환경설정 파일 추가
2021.06.29 - [복습 ARCHIVE/모델별 프로젝트] - [Spring] Mybatis 설치 및 간단한 사용
[Spring] Mybatis 설치 및 간단한 사용
Mybatis 설치 방법 Help > Eclipse Marketplace > Mybatis 1.2.4 설치! 설치 후 뉴 프로젝트 생성 시, Mybatis MyBatis XML Mapper가 보이는 지 확인! Mybatis 한 두줄의 자바코드로 DB 연동을 처리 SQL 명령어를..
on-coding.tistory.com
여기서 사용했던 설정파일,. sql mapper파일 복붙~ 같은 위치에~
sql-map-config.xml에 DataSource 구문은 삭제한다 ==> 이미 applicationContext.xml에 있기 때문
applicationContext.xml 아래와 같이 수정
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
<context:component-scan base-package="com.hhw.biz"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- DataSource Configuration -->
<context:property-placeholder location="classpath:config/database.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property value="${jdbc.driver}" name="driverClassName"/>
<property value="${jdbc.url}" name="url"/>
<property value="${jdbc.username}" name="username"/>
<property value="${jdbc.password}" name="password"/>
</bean>
<!-- Spring JdbcTemplate Configuration -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- Spring + mybatis Way 2 : SqlSessionFactoryBean Registration -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean" >
<property name="configLocation" value="classpath:sql-map-config.xml" />
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- Transaction Registration -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- Transaction Configuration -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- Transaction Advisor Configuration -->
<aop:config>
<aop:pointcut expression="execution(* com.hhw.biz..*Impl.*(..))" id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
</beans>
> SqlSessionFactoryBean 클래스가 스프링에서 제공 됨
3. DAO 클래스 구현
방법 1. SqlSessionDaoSupport를 상속받는 DAO 작성
- SqlSessionDaoSupport 클래스 상속 후, setSqlSessionFactory() 메서드 재정의
- @Autowired를 통해 스프링컨테이너가 setSqlSessionFactory() 메서드 자동호출하면서 set
- 설정파일 <bean>에 등록된 SqlSessionFactoryBean 객체를 인자로 받아 부모인 SqlDaoSupport에 setSqlSessionFactory()메소드로 설정
- set을 했기 때문에 getSqlSession() 메소드를 통해 SqlSession객체를 리턴받을 수 있다
package com.hhw.biz.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.hhw.biz.board.BoardVO;
@Repository
public class BoardDAOMybatis extends SqlSessionDaoSupport {
public BoardDAOMybatis() {
}
@Autowired
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
super.setSqlSessionFactory(sqlSessionFactory);
}
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 getSqlSession().selectOne("BoardDAO.getBoard",vo);
}
public List<BoardVO> getBoardList(BoardVO vo){
System.out.println("=======>Mybatis getBoardList() 기능처리");
return getSqlSession().selectList("BoardDAO.getBoardList",vo);
}
}
이 DAO클래스를 활용하여 ServiceImpl파일을 만들어 DB 접속
☆정리☆
- applicationContext.xml에 스프링제공 SqlSessionFactoryBean클래스 등록
- SqlSessionDaoSupport를 상속받는 DAO 작성 (@Repository, @Autowired) : setSqlSessionFactory() 재정의
- BoardServiceImpl내부 맴버변수에서 사용하는 DAO에 위의 파일을 설정
방법 2. SqlSessionTemplate <bean>으로 등록
applicationcontext.xml
<!-- Spring + mybatis Way 1 : SqlSessionFactoryBean Registration -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean" >
<property name="configLocation" value="classpath:sql-map-config.xml" />
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- Spring + mybatis Way 2 : SqlSessionTemplate -->
<bean class="org.mybatis.spring.SqlSessionTemplate" >
<constructor-arg ref="sqlSession"></constructor-arg>
</bean>
BoardDAOmybatis.java
import org.springframework.stereotype.Repository;
import com.hhw.biz.board.BoardVO;
@Repository
public class BoardDAOMybatis{
@Autowired
private SqlSessionTemplate mybatis;
//SqlSession객체
public BoardDAOMybatis() {
}
public void insertBoard(BoardVO vo){
System.out.println("=======>Mybatis insertBoard() 기능처리");
mybatis.insert("BoardDAO.insertBoard",vo);
}
public void updateBoard(BoardVO vo){
System.out.println("=======>Mybatis updateBoard() 기능처리");
mybatis.update("BoardDAO.updateBoard",vo);
}
public void deleteBoard(BoardVO vo){
System.out.println("=======>Mybatis deleteBoard() 기능처리");
mybatis.delete("BoardDAO.deleteBoard",vo);
}
public BoardVO getBoard(BoardVO vo){
System.out.println("=======>Mybatis getBoard() 기능처리");
return mybatis.selectOne("BoardDAO.getBoard",vo);
}
public List<BoardVO> getBoardList(BoardVO vo){
System.out.println("=======>Mybatis getBoardList() 기능처리");
return mybatis.selectList("BoardDAO.getBoardList",vo);
}
☆정리☆
- applicationContext.xml에 스프링제공 SqlSessionFactoryBean클래스, SqlSessionTemplate 등록
- SqlSessionDaoSupport를 상속받는 DAO 작성 (@Repository, @Autowired) : SqlSessionTempate 사용
- BoardServiceImpl내부 맴버변수에서 사용하는 DAO에 위의 파일을 설정
Dynamic SQL
SQL의 재사용성과 유연성을 향상 => 유지보수의 간편성
사용자 입력값에 따라 SQL의 쿼리를 바꾸는 것 // SQL 내부에 IF구문을 사용할 수 있음
board-mappling.xml
<select id="getBoardList" resultMap="boardResult">
SELECT *
FROM BOARD
WHERE 1=1
<if test="searchCondition == 'TITLE'">
AND TITLE LIKE '%'||#{searchKeyword}||'%'
</if>
<if test="searchCondition == 'CONTENT'">
AND CONTENT LIKE '%'||#{searchKeyword}||'%'
</if>
ORDER BY SEQ DESC
</select>
들어 온 값을 test하여 결과 값에 따라 출력되는 sql문이 다름!
'복습 ARCHIVE > 모델별 프로젝트' 카테고리의 다른 글
[JPA](간단한 게시판) JPA 기본 설명 및 Mavens project 이용 - EntityManager, persistent.xml, JPA API, (0) | 2021.07.05 |
---|---|
[Spring] MVC / TodoList / Lombok.jar (0) | 2021.06.30 |
[Spring](Mybatis) Mapper XML 파일 추가 설명 (0) | 2021.06.29 |
[Spring] Mybatis 설치 및 간단한 사용 (0) | 2021.06.29 |
[Spring](게시판 예제) 어노테이션 기반 예외처리(xml예외처리) (0) | 2021.06.28 |