1. RoleDaoSqls 에 쿼리문 추가하기
package org.example.dao;
public class RoleDaoSqls {
public static final String SELECT_ALL = "SELECT role_id, description FROM role ORDER BY role_id";
public static final String UPDATE = "UPDATE role SET description = :description where role_id = :roleId";
public static final String SELECT_BY_ROLE_ID = "SELECT role_id, description FROM role WHERE role_id = :roleId";
public static final String DELETE_BY_ROLE_ID = "DELETE FROM role WHERE role_id = :roleId";
}
2. RoleDao에 select(), delete() 메서드 추가하기
deleteById()
public int deleteById(Integer id) {
Map<String, ?> params = Collections.singletonMap("roleId", id);
return jdbc.update(DELETE_BY_ROLE_ID, params);
}
id값 하나를 받아서 map 객체를 만들고, NamedParameterJdbcTemplate의 update()메서드를 통해 실행한다.
selectById()
public Role selectById(Integer id) {
try {
Map<String, ?> params = Collections.singletonMap("roleId", id);
return jdbc.queryForObject(SELECT_BY_ROLE_ID, params, rowMapper);
} catch (EmptyResultDataAccessException e) {
return null;
}
}
id값 하나를 받아서 map 객체를 만들고, NamedParameterJdbcTemplate의 queryForObject() 메서드를 사용한다.
- queryForObject()란?
- 요청한 데이터 한 건을 가져오게 된다
- 요청한 조건에 맞는 데이터가 없으면, Exception이 발생한다
collections.singletonMap() 사용 이유
아래와 같이 role 객체를 받아서 params을 만들 수 있지만, select나 delete를 할 때는 role_id 하나만 필요한데, 굳이 객체를 만들어서 파라미터로 넘겨주는 과정이 복잡할 수 있다.
// role 객체를 만들어서 map객체인 params을 만들어준다.
SqlParameterSource params = new BeanPropertySqlParameterSource(role);
따라서, Collections.singletonMap() 을 사용하여, params을 만드는 방법을 사용할 것이다.
Map<String, ?> params = Collections.singletonMap("roleId", id);
3. main에서 실제 동작 확인하기
int cnt3 = roleDao.deleteById(500);
System.out.println(cnt3+"건 삭제되었습니다");
Role role1 = roleDao.selectById(102);
System.out.println(role1);