Spring을 사용하면서 DB연동 할 일은 매우 많다. 그리고 DB연동에는 여러가지 과정을 거쳐야 하는데 Connection을 얻고 쿼리문을 날리고 결과를 리턴해야한다. 이러한 과정은 매우 번거롭다. 그래서 Spring에서 제공하는 JdbcTemplate을 이용하면 매우 쉽게 DB연동 작업을 할 수 있다.

<context:property-placeholder location="classpath:config/database.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp2.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>

이와같은 XML설정을 추가하면 된다. 이 설정 하나로 매번 Connection을 얻어올 필요가 없어졌다. JdbcTemplate은 Connection을 얻어올 때 위의 정보에 따라 얻어올 것이다.

 

그러면 입력과 출력은 어떻게 하는가?

입, 출력에 사용되는 대표적인 메서드가 몇개 있다.

  1. update : 대표적으로 사용된다.
  2. queryForInt : 출력이 int형으로 나올때(insert, delete, update) 사용하게 된다.
  3. queryForObject : 출력이 객체 타입으로 나올때(select) select 결과는 주로 여러개의 컬럼 값이 나오게 된다. 하지만 이는 단 한개의 즉, 단 한줄의 행만 가지는 결과값이어야한다. ex) select count(*) from world; 이런식으로 말이다. 그렇다면 여러개가 나오는 경우는 어떻게 할까
  4. query : 이렇게 사용하면 된다. ex)select * from world; 여러개의 컬럼이 여러개의 결과(행)을 가진 형태에 사용된다.

그렇다면 여러개의 객체를 리턴 했을 때 어떻게 받는것이 효과적인가?

바로 RowMapper를 사용하는것이 좋다. 이렇게 말이다.

package tommy.spring.web.board.impl;

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

import org.springframework.jdbc.core.RowMapper;

import tommy.spring.web.board.BoardVO;

public class BoardRowMapper implements RowMapper<BoardVO> {

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

}

이런 클래스를 만들고 이는 리턴된 객체가 VO형태로 매핑되어 객체가 리턴되는 클래스이다.

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());
}

이렇게 해당 쿼리문으로 부터 나온 객체는 RowMapper를 통해 객체가 리턴된다.

'BACK > Spring' 카테고리의 다른 글

[Back] Spring AOP( 관점 지향 프로그램 )  (0) 2020.07.01
[Back] Spring Annotation ( 스프링 어노테이션 )  (0) 2020.06.26
[Back] Spring 기초  (0) 2020.06.25

+ Recent posts