Spring

스프링 JDBC 설정

Clearing 2022. 9. 19. 10:55
728x90

기존 Util 패키지에 작성하던 JDBC.java 파일은 개발자가 직접 관리해야하는 코드가 많은 편으로

템플릿 메서드 패턴중 하나인 "JdbcTemplate 클래스"를 활용하여 applicationContext.xml 파일에 설정이 가능하다.

 

템플릿 메서드 패턴은 반복적인 로직을 가지는 부분을 캡슐화해 사용하는것이 목표로

코딩 순서가 정형화된 기술을 재사용하기 용이하게 모듈화 해놓은것을 의미한다.

 

JDBC 설정 순서

1) 라이브러리 추가

- pom.xml 파일에 다음 설정을 추가한다.

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

 

2) JdbcTemplate에서 활용할 DataSource가 필요

- DataSource를 applicationContext.xml에서 생성한다.

  우리가 만드는 클래스는 @가 가능하지만 클래스나 데이터소스를 외부에서 제공 받으면

  코드가 없어 @가 불가능하여 .xml 파일에 설정한다.

- setter 인젝션을 사용하여 DI(의존성 주입)

   ex) 드라이버이름, url, username, pw 등

	<!-- DataSource 설정 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
		<property name="username" value="kim" />
		<property name="password" value="1234" />
	</bean>

 

3) JdbcTemplate을 new 해서 DAO에서 활용

- JdbcTemplate은 .xml 파일에 <bean>으로 객체화하고 DAO에서 @Autowired

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

 

사용 예시

INSERT, UPDATE, DELETE
- int update(String sql, Object args, ...)
- int update(String sql, Object[] args)

   ex) SELECT COUNT(*) FROM 테이블명;

 

SELECT

-Object queryForObject(String sql, Object args, ...)
-Object queryForObject(String sql, Object[] args, 매핑정보)
  ex) SELECT * FROM 테이블명 WHERE PK=?;

-List query(String sql, Object[] args, 매핑정보)
  ex) SELECT * FROM 테이블명;

 

rs 정보가 필요한 셀렉트원과 셀렉트올의 경우 RowMapper를 상속받는 클래스를 생성하여 자동 매핑을 진행한다.

package com.kim.biz.member.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.kim.biz.member.MemberVO;

@Repository("memberDAO")
public class MemberDAO2 {

	@Autowired
	private JdbcTemplate jdbcTemplate;

	final String sql_selectOne="SELECT * FROM MEMBER WHERE MID=?";
	final String sql_selectAll="SELECT * FROM MEMBER ORDER BY MID DESC";
	final String sql_insert="INSERT INTO MEMBER(MID,MPW,NAME,ROLE) VALUES(?,?,?,?)";
	final String sql_update="UPDATE MEMBER SET NAME=? WHERE MPW=?";
	final String sql_delete="DELETE MEMBER WHERE MID=?";

	void insertMember(MemberVO vo) {
		jdbcTemplate.update(sql_insert,vo.getMid(),vo.getMpw(),vo.getName(),vo.getRole());
	}
	void updateMember(MemberVO vo) {
		jdbcTemplate.update(sql_insert,vo.getName(),vo.getMpw());
	}
	void deleteMember(MemberVO vo) {
		jdbcTemplate.update(sql_insert,vo.getMid());
	}
	MemberVO selectOneMember(MemberVO vo) {
		Object[] args= {vo.getMid()};
		return jdbcTemplate.queryForObject(sql_selectOne,args,new MemberRowMapper());
	}
	List<MemberVO> selectAllMember(MemberVO vo) {
		return jdbcTemplate.query(sql_selectAll, new MemberRowMapper());
	}

}

class MemberRowMapper implements RowMapper<MemberVO>{

	@Override
	public MemberVO mapRow(ResultSet rs, int rowNum) throws SQLException {
		MemberVO data=new MemberVO();
		data.setMid(rs.getString("MID"));
		data.setMpw(rs.getString("MPW"));
		data.setName(rs.getString("NAME"));
		data.setRole(rs.getString("ROLE"));
		return data;
	}

}

 

728x90