스프링 JDBC

기존 JDBC를 사용하면 중복(보일러 플레이트) 및 오류가 발생하기 쉬운 코드가 있습니다.

public Account findByNumber(String number ) {
        String sql = "select * from accounts " +
            "where number = ?";     
        Account account = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = dataSource.getConnection();
            ps = conn.prepareStatement(sql);
            ps.setString(1, number);
            rs = ps.executeQuery();
            account = mapAccount(rs);
        } catch (SQLException e) {
            throw new RuntimeException("SQL exception occurred", e);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) { // OMG
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException ex) { // OMG
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) { // OMG
                }
            }
        }
        return account;
    }


리소스로 시도하면 더 쉽게 만들 수 있지만 너무 많이는 아닙니다. 대신 Spring JdbcTemplate을 사용하여 코드를 정리하고 반복적인 상용구 코드를 제거하고 일반적인 버그를 피하고 예외를 적절하게 처리합니다.

public Account findByNumber(String number) {
        String sql = "select * from accounts where number = ?";
        return jdbcTemplate.query(sql, accountExtractor, number);
    }

private class AccountExtractor implements ResultSetExtractor<Account> {

        public Account extractData(ResultSet rs) throws SQLException, DataAccessException {
            return mapAccount(rs);
        }

    }


Spring은 연결을 획득하고, 명령문을 실행하고, 결과 집합을 처리하고, 예외를 처리하고, 연결을 해제합니다. 단일 또는 여러 행을 쿼리할 수 있습니다. JdbcTemplate은 ResultSet의 각 행을 Map으로 반환합니다. 단일 행이 예상되면 queryForMap을 사용하고, 여러 행이 예상되면 queryForList를 사용하고, 삽입, 업데이트 또는 삭제할 때 update 메소드를 사용합니다.

    public Map<String, Object> getUser(int id) {
        String sql = "select * from users where id = ?";
        return jdbcTemplate.queryForMap(sql, id);
    }

    public List<Map<String, Object>> getUsers() {
        String sql = "select * from users";
        return jdbcTemplate.queryForList(sql);
    }

    public int insertUpdateOrDeleteUser(String sql) {
        return jdbcTemplate.update(sql);
    }


참조Spring Framework Documentation - Data Access with JDBC

참조Spring JdbcTemplate Example

좋은 웹페이지 즐겨찾기