섹션 5. 연결
24강 JdbcTemplate
24-1 JDBC의 단점을 보완한 JdbcTemplate
JDBC: 드라이버 로딩 > DB 연결 > SQL 작성 및 전송 > 자원해제
JdbcTemplate(드라이버 로딩, DB연결, 자원해제), 개발자는 SQL 작성 및 전송만 하면 됨.
pom.xml 파일에 태그 추가
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.2</version>
</dependency>
<dependency> <!--DataSource-->
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5</version>
</dependency>
<dependency> <!--JdbcTemplate-->
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
@Repository
public class MemberDao implements IMemberDao {
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String userid = "scott";
private String userpw = "tiger";
private DriverManagerDataSource dataSource; //spring
// private DriverManagerDataSource dataSource; //c3p0
private JdbcTemplate template;
public MemberDao() {
dataSource = new DriverManagerDataSource(); //spring에서 제공하는 DataSource
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(userid);
dataSource.setPassword(userpw);
// dataSource = new DriverManagerDataSource(); //c3p0에서 제공하는 DataSource
// dataSource.setDriverClass(driver);
// dataSource.setJdbcUrl(url);
// dataSource.setUser(userid);
// dataSource.setPassword(userpw);
template = new JdbcTemplate();
template.setDataSource(dataSource);
}
public int memberInsert(final Member member) {
int result = 0;
final String sql = "INSERT INTO member (memId, memPw, memMail) values (?,?,?)";
// DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName(driver);
// dataSource.setUrl(url);
// dataSource.setUsername(userid);
// dataSource.setPassword(userpw);
//
// JdbcTemplate template = new JdbcTemplate();
// template.setDataSource(dataSource);
// 1st
// result = template.update(sql, member.getMemId(), member.getMemPw(), member.getMemMail());
// 2nd
// result = template.update(new PreparedStatementCreator() {
//
// @Override
// public PreparedStatement createPreparedStatement(Connection conn)
// throws SQLException {
// PreparedStatement pstmt = conn.prepareStatement(sql);
// pstmt.setString(1, member.getMemId());
// pstmt.setString(2, member.getMemPw());
// pstmt.setString(3, member.getMemMail());
//
// return pstmt;
// }
// });
// 3rd
result = template.update(sql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstmt) throws SQLException {
pstmt.setString(1, member.getMemId());
pstmt.setString(2, member.getMemPw());
pstmt.setString(3, member.getMemMail());
}
});
return result
}
24-2 DataSource 클래스
데이터베이스 연결과 관련된 정보를 가지고 있는 DataSource는 스프링 또는 c3p0에 제공하는 클래스를 이용할 수 있다.