Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

JdbcTemplate 본문

Spring Boot

JdbcTemplate

Seung__ 2021. 7. 23. 21:18

JdbcTemplater과 같은 라이브러리는 JDBC API의 반복 코드를 대부분 제거해줌!

하지만 SQL은 직접 작성해야함!

 

1. JdbcTemplate사용


JdbcTemplate를 사용하기 위해서는 생성자를 통해 DataSource를 주입받아서 jdbcTemplate를 생성하면 된다.

public class JdbcTemplateMemberRepository implements MemberRepository{

    private final JdbcTemplate jdbcTemplate;

    @Autowired //생성자가 하나면 @Autowired생략 가능.
    public JdbcTemplateMemberRepository(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

 

2. findById


 

query : id가 ?와 일치하는 entity를 member table에서 가져와라.

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

 

3. memberRowMapper??


 

RowMapper를 통해 ResultSet으로부터 member의 각 field를 set해줄 수 있다.

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

    }

아래와 같이 람다식으로 변경도 가능하다.

 private RowMapper<Member> memberRowMapper(){

        return (rs, rowNum) -> {
            Member member = new Member();
            member.setId(rs.getLong("id"));
            member.setName(rs.getString("name"));
            return member;
        };

    }

 

4. save()


  • SimpleJdbInsert에 wishTableName("table_name"), usingGeneratedKeyColumns("PK")를 넣어주면  
  • query를 짤 필요 없음. Table명, PK있으니 고정도는 해줌 ㅋㅋ
  • Map을 통해 "name"에 멤버의 이름을 맵핑
  • executeAndREturnKey를 통해 key를 받아서 member에 id를 set한다.
@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;

    }

 

5. findAll()


  • RowMapper에서 리스트로 넘어옴.
 @Override
    public List<Member> findAll() {
        return jdbcTemplate.query("select * from member", memberRowMapper());
    }

 

6. SpringConfig


  Repository를 바꿔치기하자.

 @Bean
    public MemberRepository memberRepository(){

        //return new MemoryMemberRepository();
        //return new JdbcMemberRepository(dataSource);
        return new JdbcTemplateMemberRepository(dataSource);
    }

 

7. 통합 테스트 : 통과


테스트 코드를.. 정말..잘.. 꼼꼼하게 작성해보자

 

 

8. GitHub : 210722,JdbcTemplate


 

GitHub - bsh6463/SpringBootClass

Contribute to bsh6463/SpringBootClass development by creating an account on GitHub.

github.com

 

 

'Spring Boot' 카테고리의 다른 글

AOP  (0) 2021.07.24
Spring Data JPA  (0) 2021.07.24
스프링 통합 테스트  (0) 2021.07.23
Jdbc활용하여 Application에서 DB로 넘겨보자.  (0) 2021.07.23
H2 Database 설치 및 사용 법  (0) 2021.07.23
Comments