SPRING

[NamedParameterJdbcTemplate]

nang. 2019. 5. 13. 21:06
반응형
SMALL

* Name Parameter 사용 지원

- 질의에 포함된 파라미터에 이름 사용이 가능

- 제공하는 메소드는 JdbcTemplate과 유사하나 Object 배열을 쓰는게 아니라 Map이나 SqlParameterSource를 사용하여 질의 파라미터들을 전달 받음

- 그니까 원래는 Object[] 에 파라미터들 받았는데 이걸 안쓰고 이름으로 해결

 

- 파라미터를 JdbcTemplate은 ?(물음표)로 나타냈는데 여기서는 :categoryId 이런식으로

:컬럼명 으로 나타냄

- ?이면 순서가 중요하고 그러다보니 실수할 확률이 높은데 이거는 이름으로 고정시켜버리니까 실수할 확률 적음

- 순서도 무의미

 

 

< Map 사용하여 select (get) >

 

private static final String GET_CATEGORY_SQL =

                   "select CATID, NAME, DESCN from CATEGORY where CATID = :categoryId";

 

public Category getCategory(String categoryId) {

     Map<String, String> params = new HashMap<String, String>();

     params.put("categoryId", categoryId);

 

     Category category = (Category) NPJdbcTemplate.queryForObject(

          GET_CATEGORY_SQL,

          params, // new Object[] {categoryId} 가 아니라!

           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;

                       }

             } );

 

  return category; // list 리턴이 아닌 category 도메인 객체를 리턴

}

 

 

 

 

 

 

< MapSqlParameterSource 사용하여 insert >

 

private static final String INSERT_SQL =

                   "insert into CATEGORY (CATID, NAME, DESCN) values (:catId, :name, :descn)";  

                    // 여기서는 Category 클래스 내의 변수명과 같지 않아도 돼

 

public void insertCategory(Category category) { // 반환 없음

     MapSqlParameterSource paramSource = new MapSqlParameterSource();

     paramSource.addValue("catId", category.getCategoryId());

     paramSource.addValue("name", category.getName());

     paramSource.addValue("descn", category.getDescription());

 

     NPJdbcTemplate.update(INSERT_SQL, paramSource);

}

 

 

 

 

 

 

 

< BeanPropertySqlParameterSource 사용하여 insert >

: 파라미터들과 동일한 이름의 property들 이용

: Category는 일종의 bean이 될거고 Category 클래스 안에 있는 변수 이름을 파라미터로 사용한다~ 라는 기능임

 

private static final String INSERT_SQL =

                   "insert into CATEGORY (CATID, NAME, DESCN) values (:categoryId, :name, :description)";  

                    // 여기서는 Category 클래스 내의 변수명과 같아야 해

                    // 이 변수 이름이랑 같은 컬럼명을 찾아서 삽입할거야

 

public void insertCategory(Category category) {

     BeanPropertySqlParameterSource paramSource = new BeanPropertySqlParameterSource(category);

     NPJdbcTemplate.update(INSERT_SQL, paramSource);

}

반응형
LIST

'SPRING' 카테고리의 다른 글

DAO Support Class  (0) 2019.05.13
[SimpleJdbcInsert]  (0) 2019.05.13
[JdbcTemplate] 그 외 메소드 / 가변 길이 인자 지원  (0) 2019.05.13
[JdbcTemplate] List<T> query 메소드들  (0) 2019.05.13
외부 설정 Property  (0) 2019.03.28