* 여러 template 들을 위한 클래스
* 자체적으로 jdbcTemplate property와 dataSource property를 가짐
* Data Source 객체가 주입되면 내부적으로 JDBC template 객체를 생성하기 때문에 설정파일에 JDBC template bean을 명시적으로 선언할 필요 없음
* 개발자는 DaoSupport 클래스를 상속하여 DAO 클래스 구현
-
Data Source : DB와의 커넥션을 제공하는 factory 객체 > DB 정보랑 아이디/패스워드 등 연결될 수 있게하는 정보들
> DataSource bean을 직접 DAO bean에 주입
> getJdbcTemplate() 사용하여 JDBC template 객체 획득
* 원래는 <bean id="jdbcTemplate"> 이 있었고 여기서 p:dataSource-ref="dataSource"를 해줬었는데
DAO Support 클래스를 사용하면
이 클래스 안에 jdbcTemplate, dataSource 변수가 있기 때문에 알아서 객체 생성해주므로 bean 등록이 필요 없음
* jdbcTemplate bean이 아닌 바로 Dao bean에 dataSource 주입 (p:dataSource-ref="dataSource")
public class JdbcTemplateCategoryDao extends JdbcDaoSupport implements CategoryDao {
// 여기 원래는 JdbcTemplate 정의하고 setter 정의하고 DataSource 있으면 정의하고 그랬지?
// 근데 DaoSupport 사용하면 안써도 돼 이미 JdbcDaoSupport(부모클래스)에 존재하기 때문에
private static final String GET_CATEGORY_SQL = "select CATID, NAME, DESCN from CATEGORY";
public List<Category> getCategoryList() {
List<Category> list = getJdbcTemplate().query(GET_CATEGORY_SQL, // JdbcTemplate 객체 획득
// RowMapper 구현 클래스에 있던 것들이 DAO 구현 클래스에서 query의 파라미터로 들어감
new RowMapper<Category>() { //여기보면 클래스명이 아니라 인터페이스 이름을 갖다 씀 -->익명클래스
public Category mapRow(ResultSet rs, int rowNum) throws SQLException {
Category category = new Category(); // 일단 사용할 클래스 객체 생성
category.setCategoryId(rs.getString("CATID"));
category.setName(rs.getString("NAME"));
category.setDescription(rs.getString("DESCN"));
return category;
}
}
); // 여기까지 List<Category> list
return list;
}...
}
* DAO 클래스는 @Component 아닌 @Repository 사용하자
'SPRING' 카테고리의 다른 글
[Mybatis] DAO 구현 방법 2 (mapper interface / annotation) (0) | 2019.06.03 |
---|---|
[Mybatis] Dao 구현 방법 1 (mapper.xml / DAO class) (0) | 2019.06.03 |
[SimpleJdbcInsert] (0) | 2019.05.13 |
[NamedParameterJdbcTemplate] (0) | 2019.05.13 |
[JdbcTemplate] 그 외 메소드 / 가변 길이 인자 지원 (0) | 2019.05.13 |