dependency 추가
db풀 라이브러리도 추가
xml파일로 dataSource를 직접 설정하거나
properties파일을 이용하여 data source를 설정할 수 있다.
new -> folder
new -> file
RowMapper 연동
: jdbc template 메서드를 통해 받아온 검색 결과를 mapRow 메서드의 매개변수로 받는다.
BoardRowMapper
package com.springbook.biz.board.Impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.springbook.biz.board.BoardVO;
/*
테이블의 row(행) 정보를 어떤 VO 클래스 객체에 매핑시킬 것인지를 정의하는 클래스
spiring-jdbc의 jdbcTemplate 클래스가 이 클래스를 통해서
테이블과 객체의 정보를 입출력하기 때문에
*/
public class BoardRowMapper implements RowMapper<BoardVO> {
@Override
// rs는 해당되는 행 정보가 자동으로 넘어온 것. rowNum = 몇번째 행이냐
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;
}
}
dao 클래스 구현
jdbc temlplate 객체를 이용하면 db연동을 간단하게 할 수 있다.
dao에서 jdbc template객체를 얻는 데에는 두가지 방법이 있다.
BoardDAOSpring
: JdbcDaoSupport를 상속 -> getJdbcTemplate() 사용 가능
package com.springbook.biz.board.Impl;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
import com.springbook.biz.board.BoardVO;
@Repository
public class BoardDAOSpring extends JdbcDaoSupport {
private final String BOARD_INSERT = "INSERT INTO board(seq, title, writer, content) " + "\r\n" +
"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";
@Autowired
public void setSuperDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}
public void insertBoard(BoardVO vo) {
System.out.println("===> Spring JDBC로 insertBoard() 기능 처리");
getJdbcTemplate().update(BOARD_INSERT, vo.getTitle(), vo.getWriter(), vo.getContent());
}
public void updateBoard(BoardVO vo) {
System.out.println("===> Spring JDBC로 updateBoard() 기능 처리");
getJdbcTemplate().update(BOARD_UPDATE, vo.getTitle(), vo.getContent(), vo.getSeq());
}
public void deleteBoard(BoardVO vo) {
System.out.println("===> Spring JDBC로 deleteBoard() 기능 처리");
getJdbcTemplate().update(BOARD_DELETE, vo.getSeq());
}
public BoardVO getBoard(BoardVO vo) {
System.out.println("===> Spring JDBC로 getBoard() 기능 처리");
Object[] args = {vo.getSeq()};
return getJdbcTemplate().queryForObject(BOARD_GET, args, new BoardRowMapper());
}
public List<BoardVO> getBoardList(BoardVO vo){
System.out.println("===> Spring JDBC로 getBoardList() 기능 처리");
return getJdbcTemplate().query(BOARD_LIST, new BoardRowMapper());
}
}
Autowired 대상 변경
xml파일에서 템플릿 객체 생성
BoardDAOSpring
package com.springbook.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.springbook.biz.board.BoardVO;
@Repository
public class BoardDAOSpring {
private final String BOARD_INSERT = "INSERT INTO board(seq, title, writer, content) " + "\r\n" +
"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";
//xml 파일에서 생성한 객체를 자동으로 찾아 주입
@Autowired
private JdbcTemplate jdbcTemplate;
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());
}
}