JDBC, JdbcTemplate, 커넥션풀

Kim Jin Hyeok·2021년 2월 4일
0

기본 SQL

(member 테이블 생성)

CREATE TABLE member (
	memId VARCHAR2(10) CONSTRAINT memId_pk PRIMARY KEY,
	memPw VARCHAR2(10),
	memMain VARCHAR2(15),
	memPurcNum NUMBER(3) DEFAULT 0 CONSTRAINT memPurNum_ck CHECK (memPurcNum < 3)
);

CONSTRAINT (제약조건명) (제약조건)

(memeber 테이블의 칼럼명 변경)

ALTER TABLE member RENAME COLUMN memMain to memMail;

(member 테이블에 데이터 삽입)

INSERT INTO member (memId, memPw, memMail) values ('b', 'bb', 'bbb@gmail.com');

(member 테이블에서 데이터 삭제)

DELETE FROM member WHERE memId='b';

(member 테이블에서 모든 정보 출력)

SELECT * FROM member;

(member 테이블을 삭제)

DROP TABLE member;

JDBC

Java 언어를 이용한 DB와의 통신 방법

JDBC 만으로는 드라이버를 설정하고 DB와 연결하고 쿼리를 날리고 할당을 해제하는 과정을 매번 해줘야하는 번거로움과 중복이 발생한다.

JdbcTemplate

JDBC의 단점을 보완한 JdbcTemplate


개발자는 SQL문만 신경쓰면 된다.

DataSource 클래스

DB 연결과 관련된 정보를 가지고 있는 DataSource는 스프링 또는 c3p0에서 제공하는 클래스를 이용할 수 있다.
Spring : org.springframework.jdbc.datasource.DriverManagerDataSource
c3p0 : com.mchange.v2.c3p0.DriverManagerDataSource

스프링 프로젝트에서 JDBC 사용방법

1. pom.xml에 jdbc 추가
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
	<groupId>com.mchange</groupId>
	<artifactId>c3p0</artifactId>
	<version>0.9.5</version>
</dependency>

maven respository에는 없기에 oracle repsitory를 추가해놔야 함

2. DAO 생성자에서 DateSource에 연결정보를 지정하고, Template에 DataSource 지정
private DriverManagerDataSource dataSource;
private JdbcTemplate template;
public MemberDAO() {
    dataSource = new DriverManagerDataSource();
    dataSource = setDriverClass(driver);
    dataSource = setJdbcUrl(url);
    dataSource = setUser(userId);
    dataSource = setPassword(userPw);
    
    template = new JdbcTemplate();
    template.setDataSource(dataSource);
}

API에 따라 사용방법 차이가 있을 수 있음

3. 사용할 메서드에서 템플릿을 이용해 질의응답
public int memberInsert(Member member) {
	int result = 0;
    String sql = "INSERT INTO member (memId, memPw, memMail) values (?,?,?)";
    result = template.update(sql, member.getMemId(), member.getMemPw(), member.getMemMail());
	return result; 
}

커넥션풀

요청마다 매번 DB 연결을 새로 하는 것은 서버에 부하를 줄 수 있기 때문에 DB 연결을 미리 준비해놓고 사용하는 방법이다. 대표적인 커넥션풀을 지원하는 오픈소스는 아파치 DBCP와 c3p0가 있으며 spring, mybatis, hibernate 등과 통합되어 DataSource를 구성하여 사용한다.

스프링 설정파일을 이용한 DataSource 설정(c3pO)

<beans:bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<beans:property name="driverClass" value="oracle.jdbc.driver.OracleDriver" /> 
	<beans:property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" /> 
	<beans:property name="user" value="scott" />
	<beans:property name="password" value="tiger" /> 
	<beans:property name="maxPoolSize" value="200" /> 
	<beans:property name="checkoutTimeout" value="60000" /> 
	<beans:property name="maxIdleTime" value="1800" /> 
	<beans:property name="idleConnectionTestPeriod" value="600" />
</beans:bean>

0개의 댓글