๐ŸŒ Backend/๐Ÿƒ Spring

7. Spring DB ์ ‘๊ทผ ๊ธฐ์ˆ  - Spring JdbcTemplate

DevPoong 2022. 7. 2. 12:42

2022-06-24

ํŒ€ ํ”„๋กœ์ ํŠธ 3๊ฐœ.. + ๊ธฐ๋ง๊ณ ์‚ฌ๋กœ ์ธํ•ด 20์ผ๋งŒ์— ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.. ์˜ค๋žœ๋งŒ์— ๋ณด๋Š” ๊ฒƒ์ด๋‹ˆ ๋งŒํผ ์•ž์— ์ •๋ฆฌํ•œ ๋‚ด์šฉ๋“ค์„ ์ฝ์–ด๋ณด๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค


Spring JdbcTemplate

1. ํŠน์ง•

  • Pure Jdbc์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰
  • Mybatis์™€ Spring JdbcTemplate์€ JDBC API์—์„œ ์ด์ „์— ๋ดค๋˜ Connection์—ฐ๊ฒฐํ•˜๊ณ  ๋“ฑ๋“ฑ์˜ ๊ณผ์ •์—์„œ ๋ฐ˜๋ณต๋œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ด์คŒ.
  • SQL์€ ๊ทธ๋Œ€๋กœ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•จ.

2. Example

public class JdbcTemplateMemberRepository 
                implements MemberRepository{

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public JdbcTemplateMemberRepository(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Override
    public Member save(Member member) {
        SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
        jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");

        Map<String, Object> parameters = new HashMap<>();
        parameters.put("name", member.getName());

        Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
        member.setId(key.longValue());

        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper());

        return result.stream().findAny();
    }

    private RowMapper<Member> memberRowMapper(){
        return new RowMapper<Member>() {
            @Override
            public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
                Member member = new Member();
                member.setId(rs.getLong("id"));
                member.setName(rs.getString("name"));
                return member;
            }
        }
    }
}

๊ธฐ์กด์— pure jdbc ์ฝ”๋“œ์—์„œ ๋ฐ˜๋ณต๋˜๋˜ Connection์„ ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ , Resultset๊ณผ ๊ด€๋ จ๋œ ํ–‰๋™์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

save๋กœ์ง์„ ๋ณด๋ฉด SimpleJdbcInsert ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ”๋ช…๊ณผ ํ‚ค์˜ ๋„ค์ž„์„ ์„ค์ •ํ•ด์ฃผ๊ณ  ๋ณ€๊ฒฝํ•  ํŒŒ๋ผ๋ฏธํ„ฐ์˜ key-value๋ฅผ ์„ค์ •ํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Pure jdbc์— ๋น„ํ•ด ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ์ค„์–ด๋“ค์—ˆ๋‹ค!