본문 바로가기

카테고리 없음

[Spring] [Spring JDBC] 6. Spring JDBC 실습 진행 4 - select(), delete()

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);