* 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);
}
'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 |