스프링 JdbcTemplate

JdbcTemplate을 쓰는 이유 중복 되는 부분을 줄여서 엄청나게 길었던 코드를 단 2줄로 줄일 수 있는 것을 확인할 수 있다!

  1. save 템플릿 엔진을 이용해서 Jdbc 리포지토리를 만든다. SimpleJdbcInsert를 이용하면 쿼리문을 작성하지 않아도 DB에 데이터를 저장할 수 있다! 테이블(member)와 id, name 값만 있다면 insert 쿼리문을 작성할 수 있기 때문이다.

  2. @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.executeAndReeturnKey(new MapSqlParameterSource(parameters));
      member.setId(key.longValue());
      return member;
    }
  3. findById

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

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

  7. @Override
    public List<Member> findAll() {
      //sql 결과를 리스트로 반환. resultset결과를 memberRowMapper()에서 객체로 맵핑.
      return jdbcTemplate.query("select * from member", memberRowMapper());//객체 생성에 대한 것은 밑에서 콜백으로 정의.
    }
  8. RowMapper : 쿼리문을 작성해서 그 결과를 받아올 때 RowMapper로 객체를 맵핑시켜서 받는다!

    private RowMapper<Member> memberRowMapper(){
        //람다로 바꿀 수 있음!옵션 + 엔터
        //jdbc
        return (rs, rowNum) -> {
            Member member = new Member();
            member.setId(rs.getLong("id"));
            member.setName(rs.getString("name"));
            return member;
        };
    }

Last updated