Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 3. JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ

hello_u 2023. 4. 8. 16:02

 

ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ

 

  String sql = "update item set item_name=?, price=?, quantity=? where id=?";
  template.update(sql,
    itemName,
    price,
    quantity,
    itemId);

 

JdbcTemplate์€ ๊ธฐ๋ณธ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”์ธ๋”ฉ ํ•œ๋‹ค.

์ˆœ์„œ๋งŒ ์ž˜ ์ง€ํ‚ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์€ ์—†๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ๋ณ€๊ฒฝ์‹œ์ ์— ๋ฐœ์ƒํ•œ๋‹ค.

์ˆœ์„œ๊ฐ€ ๋งž์ง€ ์•Š์•„์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

์ด๋ฆ„ ์ง€์ • ๋ฐ”์ธ๋”ฉ(NamedParameterJdbcTemplate)

 

private final NamedParameterJdbcTemplate template;

 

JdbcTemplate์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด

NamedParameterJdbcTemplate ๋ผ๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

 

save()

// ์ด์ „ ์ฝ”๋“œ
String sql = "insert into item(item_name, price, quantity) values(?,?,?)";


//NamedParameterJdbcTemplate ์‚ฌ์šฉ
String sql = "insert into item(item_name, price, quantity) " +
                "values(:itemName, :price, :quantity)";

 

SQL์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ? ๋Œ€์‹ ์— :ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋ฆ„ ์„ ๋ฐ›๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ์„ฑ/์ „๋‹ฌ

 

ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด Map ์ฒ˜๋Ÿผ key , value ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ key ๋Š” :ํŒŒ๋ฆฌ์ดํ„ฐ์ด๋ฆ„ ์œผ๋กœ ์ง€์ •ํ•œ, ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์ด๊ณ  ,

value ๋Š” ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์ด ๋œ๋‹ค.

 

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ( param )๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

 

template.update(sql, param, keyHolder);

 

์ด๋ฆ„ ์ง€์ • ๋ฐ”์ธ๋”ฉ์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค

 

1. Map

- SqlParameterSource

2. MapSqlParameterSource

3. BeanPropertySqlParameterSource

 

Map

๋‹จ์ˆœํžˆ Map ์„ ์‚ฌ์šฉํ•œ๋‹ค.

Map<String, Object> param = Map.of("id", id);

 

MapSqlParameterSource

SqlParameterSource param = new MapSqlParameterSource()
        .addValue("itemName", updateParam.getItemName())
        .addValue("price", updateParam.getPrice())
        .addValue("quantity", updateParam.getQuantity())
        .addValue("id", itemId);

 

BeanPropertySqlParameterSource

์ž๋ฐ”๋นˆ ํ”„๋กœํผํ‹ฐ ๊ทœ์•ฝ์„ ํ†ตํ•ด์„œ ์ž๋™์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์˜ˆ) ( getXxx() -> xxx, getItemName() -> itemName )

SqlParameterSource param = new BeanPropertySqlParameterSource(item);

 

 

BeanPropertyRowMapper

// ์ด์ „ ์ฝ”๋“œ
private RowMapper<Item> itemRowMapper() {
      return (rs, rowNum) -> {
          Item item = new Item();
          item.setId(rs.getLong("id"));
          item.setItemName(rs.getString("item_name"));
          item.setPrice(rs.getInt("price"));
          item.setQuantity(rs.getInt("quantity"));
          return item;
}; }


//BeanPropertyRowMapper
private RowMapper<Item> itemRowMapper() {
return BeanPropertyRowMapper.newInstance(Item.class); //camel ๋ณ€ํ™˜ ์ง€์›
}

 

BeanPropertyRowMapper ๋Š” ResultSet ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์„œ ์ž๋ฐ”๋นˆ ๊ทœ์•ฝ์— ๋งž์ถ”์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

snake_case ๋Š” camel ๋ณ€ํ™˜์„ ์ง€์›ํ•œ๋‹ค.

์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ๊ฐ์ฒด ์ด๋ฆ„์ด ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์กฐํšŒ SQL์—์„œ ๋ณ„์นญ(as)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค

select member_name as username

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard

 

์Šคํ”„๋ง DB 2ํŽธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ™œ์šฉ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ DB ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ ์˜ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธ

www.inflearn.com