JDBC JPA 사용

김엄지·2024년 2월 25일
0

Spring

목록 보기
3/21

JDBC 사용

DB연결이 필요한 곳에서 JdbcTemplate을 주입받아와 사용하면 된다.

private final JdbcTemplate jdbctemplate;

public NoticeRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
}

jdbcTemplate.update() 메서드는 INSERT, UPDATE, DELETE 와 같이 생성, 수정, 삭제에 사용되고, 첫 번째 파라미터로 SQL을 받고 그 이후에는 ?에 들어갈 값을 받는다.

  • INSERT SQL을 작성해 String 변수에 저장한다.
String sql = "INSERT INTO notices (username, contents) VALUES (?, ?)";
jdbcTemplate.update(sql, "EOMJI", "오늘 하루도 수고했어");
  • UPDATE SQL을 작성해 String 변수에 저장한다.
String sql = "UPDATE notices SET username = ? WHERE id = ?";
jdbcTemplate.update(sql, "EOMJI", 1);
  • DELETE SQL을 작성해 String 변수에 저장한다.
String sql = "DELETE FROM notices WHERE id = ?";
jdbcTemplate.update(sql, 1);
  • SELECT SQL을 작성해 String 변수에 저장한다.
String sql = "SELECT * FROM notices";
return jdbcTemplate.query(sql, new RowMapper<NoticeResponseDto>() {
    @Override
    public NoticeResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
        // SQL 의 결과로 받아온 Memo 데이터들을 MemoResponseDto 타입으로 변환해줄 메서드
        Long id = rs.getLong("id");
        String username = rs.getString("username");
        String contents = rs.getString("contents");
        return new NoticeResponseDto(id, username, contents);
    }
});
  • SELECT의 경우 결과가 여러 줄로 넘어오기 때문에 RowMapper를 사용하여 한 줄씩 처리 할 수 있다.

    • RowMapper는 인터페이스이기 때문에 익명 클래스를 구현하여 처리한다.
    • 오버라이딩 된 mapRow 메서드는 제네릭스에 선언한 NoticeResponseDto 타입으로 데이터 한 줄을 변환하는 작업을 수행한다.

Spring Data JPA 사용

public interface NoticeRepository extends JpaRepository<Notice, Long> {
}
  • JpaRepository<"@Entity 클래스", "@Id 의 데이터 타입">를 상속받는 interface 로 선언한다.

  • Spring Data JPA에 의해 자동으로 Bean 등록이 된다.

  • 제네릭스의 @Entity 클래스 위치에 Notice Entity를 추가했기 때문에 해당 NoticeRepository는 DB의 notice 테이블과 연결되어 CRUD 작업을 처리하는 인터페이스가 되었다.


참고자료
스파르타코딩클럽 Spring Master 1,2주차 내용

profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글