ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring boot #6 JdbcTemplate로 DB 접근
    Study/Spring boot 2021. 7. 13. 23:55

     

    앞에서 Jdbc로 DB에 접근해보았으니 이번에는 jdbctemplate을 사용해보자. jdbctemplate는 기존 Jdbc에서 중복되는 부분을 상당수 줄여준 라이브러리로 코드양을 확 줄일 수 있다.

    먼저 JdbcTemplateMemberRepository라는 파일을 생성하고 앞에서 만든 MemberRepository 인터페이스를 상속해주자. 템플릿을 사용할려면 JdbcTemplate 클래스를 생성해줘야한다. 아래처럼 DataSource를 생성자에서 주입받아 생성해주자.

    private final JdbcTemplate jdbcTemplate;
    
    @Autowired
    public JdbcTemplateMemberRepository(DataSource dataSource) {
       this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
     

     

     

    그리고 한번 save 메소드를 작성해보자. JdbcTemplate에서 insert는 따로 sql문 작성할 필요없이 SimpleJdbcInsert를 이용하면 바로 가능하다. jdbcTemplate로 SimpleJdbcInsert 객체를 생성해준다음 아래 코드와 같이 Map 자료형을 바로 insert 가능하다.

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

     

     

    이번에는 findAll 메소드를 구현해보자. jdbcTemplate로 db에서 데이터를 가져오면 record 타입이다. 그래서 이것을 먼저 원하는 object type으로 바꿔줄 필요가 있는데 그러기 위해 아래처럼 member 타입으로 바꿔주는 rowMapper 메소드를 만들어줘야한다. 아래 코드처럼 하나의 row는 member 객체에 대응해서 리턴 될것이다.

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

     

     

    그 다음 finAll 메소드를 구현해보자. 기존 Jdbc처럼 connection을 열고 쿼리 준비하고 그런 과정은 필요없다. jdbcTemplate.query를 통해 한번에 해결 가능하다.

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

     

     

    마지막으로 새로운 repository 클래스를 구현했으므로 bean 설정을 바꿔줄 필요가있다. Config파일에서 repository 클래스에 해당하는 부분만 바꿔주면 된다. 바꾸고 나서 스프링을 실행해보면 아래처럼 정상적으로 기능이 동작하는지 확인가능하다.

     
     
     
     
     
     

    'Study > Spring boot' 카테고리의 다른 글

    Spring boot #8 AOP  (0) 2021.07.14
    Spring boot #7 JPA  (0) 2021.07.14
    Spring boot #5 JDBC로 db접근  (0) 2021.07.10
    Spring boot #4 bean과 의존관계  (0) 2021.07.09
    Spring boot #3 간단한 회원 서비스 및 테스트 구현  (0) 2021.07.08

    댓글

Designed by Tistory.