[Spring] JDBC

이병수·2024년 1월 22일
0

스프링 정리

목록 보기
5/24

JDBC란?


애플리케이션 서버에서 DB에 접근하기 위해서는 여러가지 작업이 필요하다.

  1. DB에 연결하기 위해 커넥션을 연결

  2. SQL을 작성 후 커넥션을 통해 SQL을 요청

  3. 요청한 SQL에 대한 응답을 받음

그렇지만, 기존의 서버를 변경해야한다면? 이 작업을 다시 해야함

따라서 데이터베이스 회사들은 자신들의 데이터베이스에 맞도록 JDBC 인터페이스를 실제로 구현한 후 라이브러리로 제공한다.

  • JDBC 드라이버

JDBC 표준 인터페이스

  • JDBC란 Java Database Connectivity로 DB에 접근할 수 있도록 Java에 제공하는 API이다.

  • 각 DB 회사에서 제공하는 JDBC의 드라이버만 교체를 하면 손 쉽게 데이터베이스를 변경 가능


JdbcTemplate

JdbcTemplate은 JDBC 코어 패키지의 중앙 클래스로, JDBC의 사용을 단순화하고 일반적인 오류를 방지하는데 도움을 준다.

  • 커넥션 획득

  • statement 준비 및 실행

  • 커넥션 종료

  • 트랜잭션을 다루기 위한 커넥션 동기화 등..

JdbcTemplate 사용법

  1. application.properties에 DB에 접근하기 위한 정보를 작성
spring.datasource.url=jdbc:mysql://localhost:3306/{DB 이름}
spring.datasource.username=root
spring.datasource.password={비밀번호}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  1. build.gradle에 JDBC 라이브러리와 해당 데이터베이스를 등록
// MySQL
implementation 'mysql:mysql-connector-java:8.0.28'
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
  • MySQL을 사용하고 있기 때문에 MySQL 드라이버 등록
  1. DB 연결이 필요한 곳에서 JdbcTemplate을 주입 받아와서 사용한다.
private final JdbcTemplate jdbctemplate;

public MemoRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
}
  • JdbcTemplate 객체는 스프링에서 따로 관리 하고 있기 때문에, 그걸 파라미터로 받아와서 주입을 통해 넣어준다.



기본 사용법

template.update()

  • 데이터를 변경할 때 update를 사용한다.

  • INSERT, UPDATE, DELETE SQL에 사용한다.


template.query()

  • 데이터를 하나 이상 조회할 때 사용한다.

  • 데이터를 조회해서 list로 반환한다.

  • 결과가 없다면 빈 컬렉션을 반환


RowMapper()

  • 데이터 조회 결과를 객체로 변환

  • RowMapper가 필요한 메서드에 직접 람다식을 작성 가능



INSERT

String sql = "INSERT INTO (테이블) (colName1, colName2) VALUES (?,?)";
jdbcTemplate.update(sql, "내용1", "내용2");
  • ? 를 사용해서 유동적으로 데이터를 넣어줄 수 있다.

UPDATE

String sql = "UPDATE (테이블) SET (colName1) = ? WHERE (colName2) = ?";
jdbcTemplate.update(sql,"내용1","내용2");
  • update 메서드 안에서 첫번째 인자에는 쿼리문으로 작성된 String 값을, 두번째 인자에서부터는 동적으로 넣을 데이터 순서대로 값을 넣어주면 된다.

DELETE

String sql = "DELETE FROM (테이블) WHERE (조건) = ?";
jdbcTemplate.update(sql,(조건));
  • 즉, update() 메서드는 INSERT, UPDATE, DELETE 에 다 사용할 수 있다.



SELECT

query() 메서드

  • "여러 건" 의 결과를 받아올 수 있기에 List 자료형에 담겨진다.
public List<Test> selectAll() {
	return jdbcTemplate.query("쿼리문",
    (rs, rowNum) -> new Test(
    rs.getParam1("특정 타입"),
    rs.getParam2("특정 타입")));
}

또는

RowMapper 인터페이스

public List<Test> selectAll() {
	return jdbcTemplate.query("쿼리문", new RowMapper<Test>() {
    	@Override
        public Test mapRow(ResultSet rs, int rowNum) throws SQLException {
        	// SQL 의 결과로 받아온 데이터들을 Test 타입으로 변환
            return new (특정 변환 클래스 타입) ..;
        }
    }
}
  • RowMapper은 인터페이스라서 익명 클래스로 구현하여 처리한다.
profile
백엔드 개발자가 되고 싶어요

0개의 댓글