티스토리 뷰
Spring JDBC 개발자가 할 일
- connection 파라미터 정의
- SQL문 지정
- 파라미터 선언과 파라미터 값 제공
- 각 이터레이션에 대한 작업 수행
Spring이 해주는 일
- connection 오픈
- statement 준비와 실행
- (존재한다면)결과를 반복하는 루프 설정
- 모든 예외 처리
- 트랜잭션 제어
- connection, statement, resultset 닫기
JDBC와 Spring JDBC 소스 비교
// JDBC
public Role getRole(Integer roleId) {
Role role = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(dburl, dbUser, dbPasswd);
String sql = "SELECT role_id,description FROM role WHERE role_id = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, roleId);
rs = ps.executeQuery();
if(rs.next()) {
int id = rs.getInt("role_id");
String description = rs.getString("description");
//String description = rs.getString(2);
role = new Role(id, description);
}
} catch (Exception e) {
e.printStackTrace();
} 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;
}
// Spring JDBC
@Repository
public class RoleDao {
private NamedParameterJdbcTemplate jdbc;
private SimpleJdbcInsert insertAction;
private RowMapper<Role> rowMapper = BeanPropertyRowMapper.newInstance(Role.class);
public RoleDao(DataSource dataSource) {
this.jdbc = new NamedParameterJdbcTemplate(dataSource);
this.insertAction = new SimpleJdbcInsert(dataSource).withTableName("role");
}
public Role selectById(Integer id) {
try {
Map<String, ?> params = Collections.singletonMap("roleId", id);
return jdbc.queryForObject("SELECT role_id, description FROM role WHERE role_id = :roleId", params, rowMapper);
} catch (EmptyResultDataAccessException e) {
return null;
}
}
}
Spring JDBC 클래스
- JDBC Template
- org.springframework.jdbc.core에서 가장 중요한 클래스입니다.
- 리소스 생성, 해지를 처리해서 연결을 닫는 것을 잊어 발생하는 문제 등을 피할 수 있도록 합니다.
- Statement의 생성과 실행을 처리합니다.
- SQL 조회, 업데이트, 저장 프로시저 호출, ResultSet 반복호출 등을 실행합니다.
- JDBC 예외가 발생할 경우 org.springframework.dao 패키지에 정의되어 있는 일반적인 예외로 변환시킵니다.
- NamedParameterJdbcTemplate
- JdbcTemplate에서 JDBC statement 인자를 ?를 사용하는 대신 파라미터명을 사용하여 작성하는 것을 지원
- SimpleJdbcInsert
- 테이블에 쉽게 데이터 insert 기능을 제공
DTO
- Data Transfer Object의 약자
- 계층간 데이터 교환을 위한 JavaBeans 입니다.
- 계층이란 컨트롤러 계층, 비즈니스-로직 계층, 퍼시스턴스 계층을 의미한다.
- 일반적으로 DTO는 로직을 가지고 있지 않고 순수한 데이터 객체입니다.
- 필드와 getter, setter를 가진다. 추가적으로 toString(), equals(), hashCode() 등의 Object 메소드를 오버라이딩 할 수 있다.
DAO
- Data Access Object의 약자
- 퍼시스턴스 계층에 해당한다.
- 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 객체이다.
- 데이터베이스를 조작하는 기능을 전담하는 목적으로 만들어진다.
Connection Pool
- 미리 커넥션을 여러 개 맺어 둔 다음 커넥션이 필요하면 커넥션 풀에게 빌려서 사용한 후 반납한다.
DataSource
- DataSource는 Connection Pool을 관리하는 목적으로 사용되는 객체입니다.
- Connection을 얻어오고 반납하는 등의 작업을 수행한다.
참조
'Framework > Spring' 카테고리의 다른 글
Spring MVC (0) | 2021.01.06 |
---|---|
Spring JDBC 실습 (0) | 2021.01.04 |
Inversion of Control / Dependency Injection (0) | 2021.01.01 |
Spring Container metadata 설정 방법 (0) | 2021.01.01 |
이클립스 maven 프로젝트에서 spring 라이브러리 추가 (0) | 2021.01.01 |
댓글