티스토리 뷰

Spring JDBC 사용을 위한 기본 설정을 직전 포스팅에서 완료했으니, 이제 JDBCTemplete 의 메서드들을 사용하여 DB 연동과 관련된 여러 작업들을 쉽게 처리할 수 있다.

 

바로 사용해보자.


1. update() : INSERT, UPDATE, DELETE 구문을 처리하기 위한 메서드

int update(String sql, Object arg)  => sql 구문에 들어가는 쿼리스트링 수만큼 arg 나열
int update(String sql, Object[] args) => sql 구문에 들어가는 쿼리스트링들을 가지고 있는 배열 삽입

 

2. queryForInt() : SELECT 구문으로 리턴된 정수값을 받기 위한 메서드

int queryForInt(String sql) => 쿼리스트링 사용 x
int queryForInt(String sql, Object arg)
int queryForInt(String sql, Object[] args)

 

3. queryForObject() : SELECT 구문으로 얻은 결과를 특정 JAVA 객체로 맵핑하여 리턴받을 때 사용

 (검색 결과가 2개 이상이라면 에러)

* 검색 결과를 자바 객체로 맵핑할 RowMapper 객체를 반드시 지정해야 한다.

 

◎ RowMapper 예:

package com.choonham.biz.board.impl;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import com.choonham.biz.board.BoardVO;

public class BoardRowMapper implements RowMapper<BoardVO>{

	public BoardRowMapper() {
		// TODO Auto-generated constructor stub
	}

	@Override
	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;
	}

}

Spring Container는 RowMapper 객체를 queryForObject 메서드로 넘겨 받으면, SQL 구문을 수행한 후 자동으로 RowMapper 객체의 mapRow()를 수행한다.

 

Object queryForObject(String sql)
Object queryForObject(String sql, RowMapper<T> rowMapper) => 쿼리스트링 x
Object queryForObject(String sql, Object[] args, RowMapper rowMapper)

 

4. query() : SELECT 구문으로 얻은 결과가 목록 형태일 때 사용

* 마찬가지로 자바 객체로 맵핑할 RowMapper 객체를 반드시 지정해야 한다.

 

List query(String sql)
List query(String sql, RowMapper<T> rowMapper)
List query(String sql, Object[] args, RowMapper<T> rowMapper)

그럼 이제 위에서 정리한 메서드들을 사용하여 DAO Class 를 구현해야하는데, DAO를 구현하는데는 크게 2가지 방법이 있다. 

 

1. JdbcDAOSupport 상속

DAO로 사용할 클래스에서 JdbcDAOSupport 클래스를 상속받아 JDBCTemplete를 얻어 사용할 수 있다.

 

◎BoardDAOSpring.java

package com.choonham.biz.board.impl;

import java.util.List;

import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

import com.choonham.biz.board.BoardVO;

@Repository
public class BoardDAOSpring extends JdbcDaoSupport{
	
	//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 order by seq desc";

	public BoardDAOSpring() {
		
	}
	
	//DataSource 의존성 주입
	@Autowired
	public void setSuperDataSource(DataSource dataSource) {
		super.setDataSource(dataSource);
	}
	
	public void insertBoard(BoardVO vo) {
		super.getJdbcTemplate().update(BOARD_INSERT, vo.getTitle(), vo.getWriter(), vo.getContent());
	}


	public void updateBoard(BoardVO vo) {
		super.getJdbcTemplate().update(BOARD_UPDATE, vo.getTitle(), vo.getContent(), vo.getSeq());
	}

	public void deleteBoard(BoardVO vo) {
		super.getJdbcTemplate().update(BOARD_DELETE, vo.getSeq());
	}

	public List<BoardVO> getBoardList(BoardVO vo) {

		return (List<BoardVO>)super.getJdbcTemplate().queryForObject(BOARD_LIST, new BoardRowMapper());
	}

	public BoardVO getBoard(BoardVO vo) {
		Object[] args = {vo.getSeq()};
		return (BoardVO)super.getJdbcTemplate().queryForObject(BOARD_LIST, args, new BoardRowMapper());
	}

}

2. bean 객체를 이용하여 jdbcTemplete 등록

 

applicationContext.xml 파일에 아래와 같이 jdbcTemplete을 직접 등록하여 사용할 수도 있다.

	<!--  Spring JDBC  -->
	<bean id = "jdbcTemplete" class = "org.springframework.jdbc.core.JdbcTemplate">
		<property name = "dataSource" ref ="dataSource"></property>	
	</bean>

 

◎BoardDAOSpring.java

package com.choonham.biz.board.impl;

import java.util.List;

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

import com.choonham.biz.board.BoardVO;

@Repository
public class BoardDAOSpring{
	
	//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 order by seq desc";

	@Autowired
	private JdbcTemplate jdbcTemplate; 
	
	/**
	//DataSource 의존성 주입
	@Autowired
	public void setSuperDataSource(DataSource dataSource) {
		super.setDataSource(dataSource);
	}
	**/
	
	public void insertBoard(BoardVO vo) {
		jdbcTemplate.update(BOARD_INSERT, vo.getTitle(), vo.getWriter(), vo.getContent());
	}


	public void updateBoard(BoardVO vo) {
		jdbcTemplate.update(BOARD_UPDATE, vo.getTitle(), vo.getContent(), vo.getSeq());
	}

	public void deleteBoard(BoardVO vo) {
		jdbcTemplate.update(BOARD_DELETE, vo.getSeq());
	}

	public List<BoardVO> getBoardList(BoardVO vo) {

		return (List<BoardVO>)jdbcTemplate.queryForObject(BOARD_LIST, new BoardRowMapper());
	}

	public BoardVO getBoard(BoardVO vo) {
		Object[] args = {vo.getSeq()};
		return (BoardVO)jdbcTemplate.queryForObject(BOARD_LIST, args, new BoardRowMapper());
	}

}

이제 생성해놓은 DAO 메서드들은 이전과 동일한 방법으로 Service를 구현받은 ServiceImpl 클래스에서 호출하여 사용하면 된다.

 

◎BoardService

package com.choonham.biz.board;

import java.util.List;

public interface BoardService {

		// 글 등록
		void insertBoard(BoardVO vo);
		
		//글 수정
		void updateBoard(BoardVO vo);
		
		//글 삭제
		void deleteBoard(BoardVO vo);
		
		//글 목록
		List<BoardVO> getBoardList(BoardVO vo);
		
		//글 상세
		BoardVO getBoard(BoardVO vo);
	
}

 

◎BoardServiceImpl

package com.choonham.biz.board.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.choonham.biz.board.BoardService;
import com.choonham.biz.board.BoardVO;

@Service("boardService")
public class BoardServiceImpl implements BoardService{

	@Autowired
	private BoardDAOSpring boardDAOSpring;
	
	@Override
	public void insertBoard(BoardVO vo) {
		boardDAOSpring.insertBoard(vo);
	}

	@Override
	public void updateBoard(BoardVO vo) {
		boardDAOSpring.updateBoard(vo);
	}

	@Override
	public void deleteBoard(BoardVO vo) {
		boardDAOSpring.deleteBoard(vo);
	}

	@Override
	public List<BoardVO> getBoardList(BoardVO vo) {
		return boardDAOSpring.getBoardList(vo);
	}

	@Override
	public BoardVO getBoard(BoardVO vo) {
		return boardDAOSpring.getBoard(vo);
	}
	
	public BoardServiceImpl() {
		
	}

}
Comments