[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (4) ์Šคํ”„๋ง JDBC Template

2021. 10. 2. 13:21ยท๐Ÿ“ Language/โœ JAVA

์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ 

4. ์Šคํ”„๋ง JDBC Template

  • ์ˆœ์ˆ˜ JDBC์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ ์„ค์ •์ด๋‹ค.
  • ์Šคํ”„๋ง JDBC Template, MyBatis์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JDBC API์—์„œ ๋ณธ ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ๋Œ€๋ถ€๋ถ„ ์ œ๊ฑฐํ•ด์ค€๋‹ค.
  • ํ•˜์ง€๋งŒ SQL์€ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
package hello.hello.spring.repository;

import hello.hello.spring.domain.Member;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

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) {
        // insert ๋ฌธ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค.
        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(), id);
        // Optional ๋งตํ•‘ํ•˜๊ธฐ ์œ„ํ•ด stream().findAny() ์ฒ˜๋ฆฌ
        return result.stream().findAny();
    }

    @Override
    public Optional<Member> findByName(String name) {
        List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);
        return result.stream().findAny();
    }

    @Override
    public List<Member> findAll() {
        return jdbcTemplate.query("select * from member", memberRowMapper());
    }

    // ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ Mapping ํ•ด์„œ ๋„˜๊ฒจ์ค€๋‹ค.
    private RowMapper<Member> memberRowMapper() {
        return (rs, rowNum) -> {
            Member member = new Member();
            member.setId(rs.getLong("id"));
            member.setName(rs.getString("name"));
            return member;
        };
    }
}

 

package hello.hello.spring;

import hello.hello.spring.repository.JdbcMemberRepository;
import hello.hello.spring.repository.JdbcTemplateMemberRepository;
import hello.hello.spring.repository.MemberRepository;
import hello.hello.spring.repository.MemoryMemberRepository;
import hello.hello.spring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class SpringConfig {

    private DataSource dataSource;

    @Autowired
    public SpringConfig(DataSource dataSource){
        this.dataSource = dataSource;
    }

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        //return new MemoryMemberRepository();
        //return new JdbcMemberRepository(dataSource);
        return new JdbcTemplateMemberRepository(dataSource);
    }
}
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (6) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (5) JPA
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (3) ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
  • [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (2) ์ˆœ์ˆ˜ JDBC
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (4) ์Šคํ”„๋ง JDBC Template
์ƒ๋‹จ์œผ๋กœ

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