Spring - JdbcTemplate

iseon_u·2022년 6월 18일
0

Spring

목록 보기
11/33
post-thumbnail

JdbcTemplate SQL Mapper


  • 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API의 반복 코드를 제거해준다. (ResultSet, Connection 등등)
  • SQL은 직접 작성 해야한다.
public class JdbcTemplateMemberRepository implements MemberRepository{

    private final JdbcTemplate jdbcTemplate;

    /**
     * Spring DataSource 주입 (injection 인젝션)
     */
    @Autowired
    public JdbcTemplateMemberRepository(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

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

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

    private RowMapper<Member> memberRowMapper() {
        return (rs, rowNum) -> {
            Member member = new Member();
            member.setId(rs.getLong("id"));
            member.setName(rs.getString("name"));
            return member;
        };
  • 생성자가 하나일 때는 @AutoWired 생략 가능

Template

  • 디자인 패턴 - 템플릿 메서드 패턴
    • 상속을 통해 슈퍼 클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법
    • 변하지 않는 기능은 슈퍼 클래스에 만들어둔다.
    • 자주 변경되며 확장할 기능은 서브 클래스에서 만들도록 한다.

SimpleJdbcInsert

@Override
public Member save(Member member) {
	// Insert 문 
	SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
	jdbcInsert.withTableName("member").usingGenerateKeyColumns("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;
}
  • 쿼리를 짤 필요가 없다.
profile
🧑🏻‍💻 Hello World!

0개의 댓글