본문 바로가기

TIL

231102_TIL

오늘한일

  • spring공부 (JDBC)

 

JDBC란

 

  • JDBC는 Java Database Connectivity로 DB에 접근할 수 있도록 Java에서 제공하는 API입니다.
  • JDBC에 연결해야하는 DB의 JDBC 드라이버를 제공하면 DB 연결 로직을 변경할 필요없이 DB 변경이 가능합니다.
    • DB 회사들은 자신들의 DB에 맞도록 JDBC 인터페이스를 구현한 후 라이브러리로 제공하는데 이를 JDBC 드라이버라 부릅니다.
  • 따라서, MySQL 드라이버를 사용해 DB에 연결을 하다 PostgreSQL 서버로 변경이 필요할 때 드라이버만 교체하면 손쉽게 DB 변경이 가능합니다.

 

 

 

INSERT

String sql = "INSERT INTO memo (username, contents) VALUES (?, ?)";
jdbcTemplate.update(sql, "Robbie", "오늘 하루도 화이팅!");
  • INSERT SQL을 작성해 String 변수에 저장합니다.
    • 이때, 넣고자 하는 데이터 부분에 ?를 사용하면 유동적으로 데이터를 넣어줄 수 있습니다.
  • jdbcTemplate.update() 메서드는 INSERT, UPDATE, DELETE 와 같이 생성, 수정, 삭제에 사용될 수 있는데 첫 번째 파라미터로 SQL을 받고 그 이후에는 ?에 들어갈 값을 받습니다.

 

 

UPDATE

String sql = "UPDATE memo SET username = ? WHERE id = ?";
jdbcTemplate.update(sql, "Robbert", 1);
  • UPDATE SQL을 작성해 String 변수에 저장한 후 update() 메서드 첫 번째 파라미터에 넣어줍니다.
    • 이때, 넣고자 하는 데이터 부분에 ?를 사용하면 유동적으로 데이터를 넣어줄 수 있습니다.

 

 

DELETE

String sql = "DELETE FROM memo WHERE id = ?";
jdbcTemplate.update(sql, 1);
  • DELETE SQL을 작성해 String 변수에 저장한 후 update() 메서드 첫 번째 파라미터에 넣어줍니다.
    • 이때, 넣고자 하는 데이터 부분에 ?를 사용하면 유동적으로 데이터를 넣어줄 수 있습니다.

 

 

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);
    }
});
  • SELECT SQL을 작성해 String 변수에 저장한 후 query() 메서드 첫 번째 파라미터에 넣어줍니다.
  • SELECT의 경우 결과가 여러 줄로 넘어오기 때문에 RowMapper를 사용하여 한 줄씩 처리 할 수 있습니다.
    • RowMapper는 인터페이스 이기 때문에 익명 클래스를 구현하여 처리합니다.
    • 오버라이딩 된 mapRow 메서드는 제네릭스에 선언한 MemoResponseDto 타입으로 데이터 한 줄을 변환하는 작업을 수행합니다.

 

 

느낀점

  • JdbcTemplate이 JDBC를 직접 사용할 때 발생하는 불편함을 해결해 주었지만 아직도 복잡하고 사용하기 까다로운 것같다.

 

 

'TIL' 카테고리의 다른 글

231107_TIL  (0) 2023.11.07
231106_TIL  (0) 2023.11.06
231101_TIL  (1) 2023.11.01
231031_TIL  (0) 2023.10.31
231030_TIL  (0) 2023.10.30