# [JdbcTemplate] JDBC Template ์ด๋ž€?
Study Repository

[JdbcTemplate] JDBC Template ์ด๋ž€?

by rlaehddnd0422

JdbcTemplate ๋ž€?

JdbcTemplate์€ JDBC ์ฝ”์–ด ํŒจํ‚ค์ง€์˜ ์ค‘์•™ ํด๋ž˜์Šค๋กœ JDBC์˜ ์‚ฌ์šฉ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ฃผ๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • JdbcTemplate์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋Š” JDBC๊ธฐ์ˆ ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JdbcTemplate ์‚ฌ์šฉ ์ด์ 

JdbcTemplate์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ˜๋ณต์ž‘์—…์˜ ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ปค๋„ฅ์…˜ ํš๋“
  • ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜๋ณตํ•˜๋„๋ก ๋ฃจํ”„ ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ๋ฐ”์ธ๋”ฉ 
  • statement ์ƒ์„ฑ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ ํ›„ ์ฟผ๋ฆฌ ์‹คํ–‰ 
  • ํŠธ๋žœ์žญ์…˜์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ปค๋„ฅ์…˜ ๋™๊ธฐํ™”
  • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์Šคํ”„๋ง ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ ์‹คํ–‰
  • ๋ฆฌ์†Œ์Šค ์ข…๋ฃŒ
JdbcTemplate ์€ JDBC๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ˜๋ณต์„ ๋Œ€๋ถ€๋ถ„ ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.. ๊ทธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ง€๊ธˆ๊นŒ์ง€ ํ•™์Šตํ–ˆ๋˜, ํŠธ๋žœ์žญ์…˜์„ ์œ„ํ•œ ์ปค๋„ฅ์…˜ ๋™๊ธฐํ™”๋Š” ๋ฌผ๋ก ์ด๊ณ , ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ์Šคํ”„๋ง ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ๋„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•ด์ค๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ๊ณ„์ธต์ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ฐ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋งŽ์€ ๋ถ€๋ถ„์ด ๋ฐ˜๋ณต๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

public void update(String memberId, int money) {
    String sql = "update member set money = ? where member_id = ?";
    Connection con = null;
    PreparedStatement pstmt = null;

    try
    {
        con = getConnection();
        pstmt=con.prepareStatement(sql);
        pstmt.setInt(1,money);
        pstmt.setString(2,memberId);

        int resultSize = pstmt.executeUpdate();
        log.info("resultSize = {}",resultSize);

    } catch (SQLException e) {
        throw exTranslator.translate("update",sql,e);
    }finally
    {
        close(con,pstmt,null);
    }
}

public void delete(String memberId){
    String sql = "delete from member where member_id = ?";
    Connection con = null;
    PreparedStatement pstmt = null;

    try
    {
        con = getConnection();
        pstmt = con.prepareStatement(sql);
        pstmt.setString(1, memberId);
        pstmt.executeUpdate();
    } catch (SQLException e) {
        throw exTranslator.translate("delete",sql,e);
    }finally {
        close(con,pstmt,null);
    }
}

 

์ปค๋„ฅ์…˜์„ ๋ฐ›๊ณ , statement๋ฅผ ์ค€๋น„์‹œํ‚ค๊ณ , ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ž‘์—…๊นŒ์ง€ .. ๊ฝค ๋งŽ์€ ๋ถ€๋ถ„๋“ค์ด ๋ฐ˜๋ณต๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

JdbcTemplate์„ ์ ์šฉํ•˜๋ฉด ์ด ๋ชจ๋“  ์ž‘์—…์„ ํ•œ์ค„๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JdbcTemplate ์ ์šฉ

@Slf4j
public class MemberRepositoryV4_3 implements MemberRepository {
//    private final SQLExceptionTranslator exTranslator;
    private final JdbcTemplate template; // ์ปค๋„ฅ์…˜ ์ˆ˜์‹ , ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ, result ๋ฐ”์ธ๋”ฉ , ๋“ฑ๋“ฑ..

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

    public Member save(Member member) {
        String sql = "insert into member(member_id, money) values(?,?)";
        template.update(sql, member.getMemberId(), member.getMoney());
        return member;
    }

    public Member findById(String memberId) {
        String sql = "select * from member where member_id = ?";
        return template.queryForObject(sql, memberRowMapper(), memberId);
    }

    private RowMapper<Member> memberRowMapper() {
        return (rs, rowNum) -> {
            Member member = new Member();
            member.setMemberId(rs.getString("member_id"));
            member.setMoney(rs.getInt("money"));
            return member;
        };
    }

    public void update(String memberId, int money) {
        String sql = "update member set money = ? where member_id = ?";
        template.update(sql, money, memberId);
    }

    public void delete(String memberId) {
        String sql = "delete from member where member_id = ?";
        template.update(sql, memberId);
    }
  • JdbcTemplate์€ ๋‚ด๋ถ€์—์„œ ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ค„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์ž‘์—…์„ template.update() / template.queryForObject() ๋“ฑ ๋ฉ”์†Œ๋“œ ํ•˜๋‚˜๋กœ ์ปค๋„ฅ์…˜ ์กฐํšŒ๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๊ณ„์ธต ๋ณ€๊ฒฝ์ 

  • ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™” + ํŠธ๋žœ์žญ์…˜ AOP ๋•๋ถ„์— ์„œ๋น„์Šค ๊ณ„์ธต์˜ ์ˆœ์ˆ˜์„ฑ์„ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•˜๋ฉด์„œ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

ํŠธ๋žœ์žญ์…˜ ์ธํ„ฐํŽ˜์ด์Šค, ํŠธ๋žœ์žญ์…˜ ํ…œํ”Œ๋ฆฟ์„ ์ด์šฉํ•œ Service ๊ณ„์ธต์˜ Transaction ๋ฌธ์ œ ํ•ด๊ฒฐ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ ์ค‘ ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๋ฉด์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ญํ• ์— ๋”ฐ๋ผ 3๊ฐ€์ง€ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ๊ณ„์ธต ์›น ์š”์ฒญ(request), ์‘๋‹ต(response)๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ

rlaehddnd0422.tistory.com

 

Spring ํŠธ๋žœ์žญ์…˜ AOP - @Transactional ์‚ฌ์šฉ

์ด ์ „ ํฌ์ŠคํŒ…์—์„œ ํŠธ๋žœ์žญ์…˜์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”์™€ ํŠธ๋žœ์žญ์…˜ ํ…œํ”Œ๋ฆฟ์„ ๋„์ž…ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์„œ๋น„์Šค ๊ณ„์ธต์— ์ˆœ์ˆ˜ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ๋‚จ๊ธฐ๋Š” ๋ชฉํ‘œ์—๋Š” ๋„๋‹ฌํ•˜

rlaehddnd0422.tistory.com

  • ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ ์ถ”์ƒํ™”์™€ ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ ๋•๋ถ„์—, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ์„œ๋น„์Šค ๊ณ„์ธต์˜ ์ˆœ์ˆ˜์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์˜ˆ์™ธ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 

Spring์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ ์ถ”์ƒํ™”, ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ ์‚ฌ์šฉ

์•ž์„  ํฌ์ŠคํŒ…์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค ์˜ค๋ฅ˜์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ๋ณต๊ตฌ๋ฅผ ํ•  ๋•Œ ๊ฐ DB์— ๋งž๋Š” ์ ์ ˆํ•œ ์˜ค๋ฅ˜์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ErrorCode๋ฅผ ์ด์šฉํ•œ ํŠน์ • ์˜ˆ์™ธ ๋ณต๊ตฌ

rlaehddnd0422.tistory.com

  • ์„œ๋น„์Šค ๊ณ„์ธต์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•œ ๋•๋ถ„์— ํ–ฅํ›„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ๊ตฌํ˜„ ๊ธฐ์ˆ ๋กœ  ๋ณ€๊ฒฝ๋˜์–ด๋„ ์„œ๋น„์Šค ๊ณ„์ธต์„ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ณ„์ธต ๋ณ€๊ฒฝ์ 

  • JDBC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ณต์ฝ”๋“œ๊ฐ€ jdbcTemplate์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

<์ •๋ฆฌ>

  • jdbcTemplate์„ ์‚ฌ์šฉํ•ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ณ„์ธต์—์„œ JDBC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ณต์ฝ”๋“œ๋ฅผ ๋งค์šฐ ์งง๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ jdbcTemplate์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

<์ฐธ๊ณ ์ž๋ฃŒ>

 

[Spring] JdbcTemplate์ด๋ž€? JdbcTemplate ์‚ฌ์šฉ๋ฒ•, RowMapper๋ž€?

JdbcTemplate์ด๋ž€? JdbcTemplate์€ JDBC ์ฝ”์–ด ํŒจํ‚ค์ง€์˜ ์ค‘์•™ ํด๋ž˜์Šค๋กœ JDBC์˜ ์‚ฌ์šฉ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ JDBC๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ˜๋ณต ์ž‘

code-lab1.tistory.com

 

์Šคํ”„๋ง DB 1ํŽธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ•ต์‹ฌ ์›๋ฆฌ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

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

www.inflearn.com

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ