[스프링JDBC]

2021. 10. 8. 15:13spring

1. target>>pom.xml 파일에 DBCP 관련 <dependency> 설정 추가

				<dependency>
				<!--Spring-->
				<groupId>org.springframework</groupId>
				<artifactId>spring-jdbc</artifactId>
				<version>${org.springframework-version}</version>
				</dependency>
				
				<!--DBCP-->
				<dependency>
				<groupId>commons-dbcp</groupId>
				<artifactId>commons-dbcp</artifactId>
				<version>1.4</version>
				</dependency>

<configuratinon> source, target 1.7로 변경하기
DBCP 라이브러리사 정상 등록되었는지 확인

 

 

2. 프로퍼티 파일로 DataSource 설정

 

 

 

3. applicationContext.xml파일에 DataSource 설정 & jdbcTemplate 클래스를 <bean> 등록 

	<!-- 프로퍼티파일을 이용하기 위해 위치 설정 -->
	<context:property-placeholder location="classpath:config/database.properties"/>
	
    <!-- JDBC 객체가 사용할 DataSource를 <bean>등록하여 스프링컨테이너가 생성되도록 함 -->
    <!-- DataSource 인터페이스를 구현하는 클래스인 Apache의 BasicDataSource를 등록 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	
	<property name="driverClassName" value="${jdbc.driver}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
	</bean>
	
	  <!-- JdbcTemplate 클래스를 <bean>등록 -->
	    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    	<property name="dataSource" ref="dataSource" />
    	
    </bean>

 

4. BoardDAOSpring 클래스 생성

기존 작성했던 BoardDAO 클래스가 아닌, "스프링 JDBC 기반의 BoardDAOSpring" 으로 DB 연동하기 위함

@Autowired 어노테이션을 이용하여 jdbcTemplate 타입의 객체를 의존성 주입처리

package com.springbook.biz.board.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import com.springbook.biz.board.BoardVO;

//DAO
@Repository
public class BoardDAOSpring {
	
    //의존성 주입처리
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	// SQL
	private final String BOARD_INSERT = "insert into board(seq, title, writer, "
			+ "content) values((select nvl(max(seq), 0)+1 from board), ?,?,?)";
	private final String BOARD_UPDATE = "update board set title=?, content=? where seq=?";
	private final String BOARD_DELETE = "delete board where seq = ?";
	private final String BOARD_GET = "select * from board where seq=?";
	private final String BOARD_LIST = "select * from board order by seq desc";

	
	
	//CRUD
	public void insertBoard(BoardVO vo){
		System.out.println("=== Spring JDBC로 insertBoard() 기능 처리");
		jdbcTemplate.update(BOARD_INSERT, vo.getTitle(), vo.getWriter(), vo.getContent());
	}
	
	//글 수정
	public void updateBoard(BoardVO vo){
		System.out.println("=== Spring JDBC로 updateBoard() 기능 처리");
		jdbcTemplate.update(BOARD_UPDATE, vo.getTitle(), vo.getContent(), vo.getSeq());
	}
	
	//글 삭제
	public void DeleteBoard(BoardVO vo){
		System.out.println("=== Spring JDBC로 deleteBoard() 기능 처리");
		jdbcTemplate.update(BOARD_DELETE, vo.getSeq());
	}
	
	//글 상세 조회
	public BoardVO getBoard(BoardVO vo){
		System.out.println("=== Spring JDBC로 getBoard() 기능 처리");
		Object[] args = {vo.getSeq()};
		
		return jdbcTemplate.queryForObject(BOARD_GET, args,
				                               new BoardRowMapper());
	}

	//글 상세 조회
	public List<BoardVO> getBoardList(BoardVO vo){
		System.out.println("=== Spring JDBC로 getBoardList() 기능 처리");

		return jdbcTemplate.query(BOARD_LIST, new BoardRowMapper());
	}

}


class BoardRowMapper implements RowMapper<BoardVO>{
	public BoardVO mapRow(ResultSet rs, int rowNum) throws SQLException{
		BoardVO board = new BoardVO();
		board.setSeq(rs.getInt("SEQ"));
		board.setTitle(rs.getString("TITLE"));
		board.setWriter(rs.getString("WRITER"));
		board.setContent(rs.getString("CONTENT"));
		board.setRegDate(rs.getDate("REGDATE"));
		board.setCnt(rs.getInt("CNT"));
		return board;
	}
}

 

5. 기존 작성했던 클래스 타입을 BoardDAO ->BoardDAOSpring로 변경

 

 

'spring' 카테고리의 다른 글

[mybatis] 기본설정  (0) 2021.11.12
[트랜잭션]  (0) 2021.10.08
[AOP] 어노테이션 기반  (0) 2021.10.08
[AOP] xml 기반  (0) 2021.10.07
[어노테이션]  (0) 2021.10.06