SPRING

DAO Support Class

nang. 2019. 5. 13. 22:03
반응형
SMALL

* 여러 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 사용하자

 

 

 

 

 

반응형
LIST