본문 바로가기
내일배움캠프(Sparta)/Spring

[Spring] JDBC

by mmm- 2023. 11. 3.

JDBC (Java Database Connectivity)

: DB에 접근할 수 있도록 Java에서 제공하는 API

  • 애플리케이션 서버를 개발하게 되면 DB와의 소통이 필수적인데,
    이 때 Java application과 DB를 연결해주는 역할을 함.

 

JDBC의 등장 배경

application server에서 DB(MySQL)의 접근하기 위해 필요한 작업

  1. DB에 연결
  2. SQL 작성 후 커넥션을 통해 SQL 요청
  3. 요청한 SQL에 대한 응답 받기

➡️ MySQL 이 아닌 PostgreSQL 로 변경한다면 위의 3가지 방법이 모두 다를 수 있기 때문에 DB의 연결 로직들을 모두 수정해야 하는 문제가 발생하는데 이러한 문제를 해결하기 위해 JDBC 표준 인터페이스 등장

 

  • JDBC에 연결해야하는 DB의 JDBC 드라이버만 교체하면 손쉽게 DB 변경 가능

JdbcTemplate

: 반복적이고 중복되는 작업들을 대신 처리해줌

  • JDBC의 등장으로 손쉽게 DB교체가 가능해졌지만 DB에 연결하기 위해서 여러 가지 작업 로직들을 직접 작성해야 한다는 불편함을 해결하기 위해 등장

 

사용방법

  1. application.properties에 DB에 접근하기 위한 정보 작성
  2. build.gradle에 JDBC 라이브러리와 MySQL 등록
  3. DB 연결이 필요한 곳에서 JdbcTemplate 주입받아와 사용
private final JdbcTemplate jdbctemplate;

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

INSERT

String sql = "INSERT INTO memo (username, contents) VALUES (?, ?)";
jdbcTemplate.update(sql, "Robbie", "오늘 하루도 화이팅!");
  • insert문은 항상 값이 바뀌기 때문에 ? 를 사용하면 유동적으로 데이터를 넣어줄 수 있음.
  • insert, update, delete 모두 jdbcTemplate.update() 메서드 사용해서 요청

 

UPDATE

String sql = "UPDATE memo SET username = ? WHERE id = ?";
jdbcTemplate.update(sql, "Robbert", 1);

 

 

DELETE

String sql = "DELETE FROM memo WHERE id = ?";
jdbcTemplate.update(sql, 1);

 

 

SELECT

String sql = "SELECT * FROM memo";
return jdbcTemplate.query(sql, new RowMapper<MemoResponseDto>() {
    @Override
    public MemoResponseDto 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 MemoResponseDto(id, username, contents);
    }
});
  • insert, update, delete와는 다르게 JdbcTemplate의 query()라는 메서드 사용
  • 여러 줄이 넘어오기 때문에 RowMapper 인터페이스를 사용해 한 줄씩 처리
    • 오버라이딩 된 mapRow 메서드는 제네릭스에 선언한 MemoResponseDto 타입으로 데이터 한 줄을 변환하는 작업 수행

 

  • JdbcTemplate이  복잡하고 사용하기 어려움.그래서 현재는 Java 개발자들을 위해 DB와 객체를 매핑하여 소통할 수 있는 ORM이라는 기술 등장

용어 정리

  • JDBC 드라이버
    : DB회사들이 자신들의 DB에 맞도록 JDBC 인터페이스를 구현한 후 제공하는 라이브러리

'내일배움캠프(Sparta) > Spring' 카테고리의 다른 글

[Spring] IoC / DI / Bean  (0) 2023.11.07
[Spring] 3 Layer Architecture  (0) 2023.11.03
[Spring] Database / SQL  (0) 2023.11.03
[Spring] DTO  (0) 2023.11.02
HTTP 데이터를 객체로 처리하는 방법  (0) 2023.11.02