2020. 11. 11. 21:37ㆍ공부 정리/spring
1. JDBC(Java Database Connectivity)
자바를 이용한 데이터베이스 접속과 SQL 문장의 실행
실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약
- 자바 프로그램 내에서 SQL문을 실행하기 위한 자바 API
- SQL과 프로그래밍 언어의 통합 접근 중 한 형태
- JAVA는 표준 인터페이스인 JDBC API를 제공
- 데이터베이스 벤더, 또는 기타 써드파티에서는 JDBC 인터페이스를 구현한 드라이버(driver)를 제공
a. JDBC를 이용한 프로그래밍 방법
- import java.sql.*;
- 드라이버를 로드한다.
- Connection 객체를 생성한다.
- Statement 객체를 생성 및 질의 수행
- SQL문에 결과물이 있다면 ResultSet 객체를 생성한다.
- 모든 객체를 닫는다.

b. 소스 예제
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class RoleDao {
private static String dburl = "jdbc:mysql://localhost:3306/connectdb";
private static String dbUser = "connectuser";
private static String dbpasswd = "connect123!@#";
public Role getRole(Integer roleId) {
Role role = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
/*드라이버 로드*/
Class.forName("com.mysql.jdbc.Driver");
/*Connection 얻기*/
conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
String sql = "SELECT description,role_id FROM role WHERE role_id = ?";
/*statement 생성*/
ps = conn.prepareStatement(sql);
ps.setInt(1, roleId);
/*질의 수행 & ResultSet으로 결과 받기*/
rs = ps.executeQuery();
if (rs.next()) {
String description = rs.getString(1);
int id = rs.getInt("role_id");
role = new Role(id, description);
}
} catch (Exception e) {
e.printStackTrace();
}
/*Close*/
finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return role;
}
}
statement 생성으로 prepareStatement를 사용하였는데 둘의 차이점은 Statement는 쿼리문을 미리 생성하지 않으나 PrepareStatement는 쿼리문을 미리 생성하여 실행시마다 쿼리를 생성하지 않기 때문에 Statement에 비해 반복 실행 시 속도가 더 빠르다.
2. Spring JDBC
JDBC프로그래밍의 반복되는 개발 요소에서 저수준 세부사항을 스프링 프레임워크가 처리해준다.

a. JDBC Template
"JDBC를 위한 틀"로 SQL연산을 수행할 수 있게 도와주는 툴이다.
SQL 조회, 업데이트, 저장 프로시저 호출, ResultSet 반복호출 등을 실행한다.
스테이먼트(Statement)의 생성과 실행을 처리한다.
리소스 생성, 해지를 처리해서 연결을 닫는 것을 잊어 발생하는 문제 등을 피할 수 있도록 한다.
org.springframework.jdbc.core에서 가장 중요한 클래스이다.
JDBC 예외가 발생할 경우 org.springframework.dao패키지에 정의되어 있는 일반적인 예외로 변환시킨다.
b. datasource
데이터소스(datasource)는 서버로부터 데이터베이스에 대해 연결을 구축하기 위해 사용하는 이름이다.
이 이름은 데이터베이스에 쿼리를 만들 때 공통적으로 사용된다.

- DataSource는 커넥션 풀을 관리하는 목적으로 사용되는 객체다.
- DataSource를 이용해 커넥션을 얻어오고 반납하는 등의 작업을 수행한다.
c. Spring JDBC 패키지
org.springframework.jdbc.core
- JdbcTemplate 및 관련 Helper 객체 제공
org.springframework.jdbc.datasource
- DataSource를 쉽게 접근하기 위한 유틸 클래스, 트랜젝션매니져 및 다양한 DataSource 구현을 제공
org.springframework.jdbc.object
- RDBMS 조회, 갱신, 저장등을 안전하고 재사용 가능한 객제 제공
org.springframework.jdbc.support
- jdbc.core 및 jdbc.object를 사용하는 JDBC 프레임워크를 지원
d. 소스 예제
Actor actor = this.jdbcTemplate.queryForObject(
"select first_name, last_name from t_actor where id = ?",
new Object[]{1212L},
new RowMapper<Actor>() {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
});
출처 & 참고
'공부 정리 > spring' 카테고리의 다른 글
| Spring MVC - Dispatcher Servlet(2) (0) | 2021.08.26 |
|---|---|
| Spring MVC - Dispatcher Servlet(1) (0) | 2021.08.23 |