[์Šคํ”„๋ง DB 2ํŽธ] - 1. JdbcTemplate

2023. 4. 6. 23:35ยทSpring/Spring DB

 

 

Jdbc ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ์  

 

 

JDBC ๋ฐ˜๋ณต ๋ฌธ์ œ

 

  • ์ปค๋„ฅ์…˜ ์กฐํšŒ, ์ปค๋„ฅ์…˜ ๋™๊ธฐํ™”
  • PreparedStatement ์ƒ์„ฑ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ
  • ์ฟผ๋ฆฌ ์‹คํ–‰
  • ๊ฒฐ๊ณผ ๋ฐ”์ธ๋”ฉ
  • ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ์Šคํ”„๋ง ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ ์‹คํ–‰
  • ๋ฆฌ์†Œ์Šค ์ข…๋ฃŒ

 

try {
    con = getConnection();
    pstmt = con.prepareStatement(sql);
    pstmt.setString(1, member.getMemberId());
    pstmt.setInt(2, member.getMoney());
    pstmt.executeUpdate();
    return member;
} catch (SQLException e) {
    throw exTranslator.translate("save", sql, e);
} finally {
    close(con, pstmt, null);
}

 

 Connection ๊ด€๋ฆฌ๋ฅผ ๊ณ„์†ํ•ด์„œ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋‹จ์ 

 

 

 

JdbcTemplate

 

JdbcTemplate์€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ก์„ธ์Šค ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

 

JdbcTemplate์€ JDBC API๋ฅผ ์ถ”์ƒํ™”ํ•œ ๊ฒƒ์œผ๋กœ,

JDBC๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

JdbcTemplate์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ƒ์„ฑ ๋ฐ ์ข…๋ฃŒ, SQL ์ฟผ๋ฆฌ ์‹คํ–‰, ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

 

public JdbcTemplateItemRepositoryV1(DataSource dataSource) {
    this.template = new JdbcTemplate(dataSource);
}

 

JdbcTemplate์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ƒ์„ฑ์ž๋กœ๋ถ€ํ„ฐ DataSource ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” JdbcTemplate์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

DataSource๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด์ด๋ฉฐ,

JdbcTemplate์€ DataSource๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ JdbcTemplate์˜ ์ƒ์„ฑ์ž์—์„œ๋Š” DataSource ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

template.update()

 

INSERT, UPDATE, DELETE์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

update() ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

 

String sql = "INSERT INTO item (item_name, price, quantity) VALUES (?, ?, ?)";
int rows = jdbcTemplate.update(sql, item.getItemName(), item.getPrice(), item.getQuantity());

 

  1. sql: ์‹คํ–‰ํ•  SQL ์ฟผ๋ฆฌ
  2. args: SQL ์ฟผ๋ฆฌ์— ์ „๋‹ฌํ•  ๋งค๊ฐœ ๋ณ€์ˆ˜

? ์— ๋ฐ”์ธ๋”ฉํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.

 

update() ๋ฉ”์†Œ๋“œ๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์˜ํ–ฅ์„ ๋ฐ›์€ ํ–‰(row)์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, INSERT ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ํ…Œ์ด๋ธ”์˜ ํ–‰ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ, ์˜ํ–ฅ์„ ๋ฐ›์€ ํ–‰์˜ ์ˆ˜๋Š” 1์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

RowMapper

 

RowMapper ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ์ธ ResultSet ์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

RowMapper๋Š” JdbcTemplate์„ ์‚ฌ์šฉํ•  ๋•Œ ResultSet์—์„œ ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

RowMapper๋Š” ResultSet์˜ ๊ฐ ๋กœ์šฐ๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

 

ResultSet์—์„œ ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ Item ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๋Š” ๋กœ์ง

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

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” ResultSet์—์„œ id, item_name, price, quantity ์ปฌ๋Ÿผ ๊ฐ’์„ ์ฝ์–ด์™€์„œ

Item ๊ฐ์ฒด์˜ id, itemName, price, quantity ํ•„๋“œ์— ๊ฐ๊ฐ ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ œ ItemRowMapper ๋ฉ”์†Œ๋“œ๋Š” JdbcTemplate์˜ query ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ RowMapper ๊ฐ์ฒด๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

query ๋ฉ”์†Œ๋“œ๋Š” ResultSet์—์„œ ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ Item ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ, ์ด ๋ฉ”์†Œ๋“œ์—์„œ ์ •์˜ํ•œ ๋กœ์ง์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

 

template.queryForObject()

 

queryForObject๋Š” JdbcTemplate์˜ ๋ฉ”์†Œ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ, SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋‹จ์ผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜์˜ ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, ์ฆ‰ ๋‹จ์ผ ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

queryForObject ๋ฉ”์†Œ๋“œ๋Š” ์„ธ ๊ฐœ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

 

Item item = template.queryForObject(sql, itemRowMapper(), id);

 

  1. SQL ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด: ์‹คํ–‰ํ•  SQL ์ฟผ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  2. RowMapper ๊ฐ์ฒด: SQL ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ RowMapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  3. Object... args: SQL ์ฟผ๋ฆฌ์—์„œ ์‚ฌ์šฉ๋  ์ธ์ž ๊ฐ’์ž…๋‹ˆ๋‹ค.

 

queryForObject ๋ฉ”์†Œ๋“œ๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ ํ›„, ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ๊ฒฐ๊ณผ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ,EmptyResultDataAccessException ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๊ฐ€ ํ•œ ํ–‰ ์ด์ƒ์ธ ๊ฒฝ์šฐ, IncorrectResultSizeDataAccessException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

queryForObject ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ์‰ฝ๊ฒŒ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

template.query()

 

๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

template.query(sql, itemRowMapper());

 

query() ๋ฉ”์†Œ๋“œ๋Š” SQL ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํ–‰๋งˆ๋‹ค RowMapper ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ ,

๋ณ€ํ™˜๋œ ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฐ๊ณผ๋Š” List<T> ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

 

 

 

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

 

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

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

www.inflearn.com

 

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง DB 2ํŽธ] - 3. JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ  (0) 2023.04.08
[์Šคํ”„๋ง DB 2ํŽธ] - 2. JdbcTemplate - ๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ  (0) 2023.04.07
[์Šคํ”„๋ง DB 2ํŽธ] - 0. DTO / DAO  (0) 2023.04.05
[์Šคํ”„๋ง DB 1ํŽธ] - 15. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™” ์ดํ•ด  (0) 2023.03.31
[์Šคํ”„๋ง DB 1ํŽธ] - 14. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ฒ˜๋ฆฌ  (0) 2023.03.30
'Spring/Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์Šคํ”„๋ง DB 2ํŽธ] - 3. JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ
  • [์Šคํ”„๋ง DB 2ํŽธ] - 2. JdbcTemplate - ๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ
  • [์Šคํ”„๋ง DB 2ํŽธ] - 0. DTO / DAO
  • [์Šคํ”„๋ง DB 1ํŽธ] - 15. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™” ์ดํ•ด
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์Šคํ”„๋ง DB 2ํŽธ] - 1. JdbcTemplate
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”