애플리케이션 서버에서 DB에 접근하기 위해서는 여러가지 작업이 필요하다.
DB에 연결하기 위해 커넥션을 연결
SQL을 작성 후 커넥션을 통해 SQL을 요청
요청한 SQL에 대한 응답을 받음
그렇지만, 기존의 서버를 변경해야한다면? 이 작업을 다시 해야함
따라서 데이터베이스 회사들은 자신들의 데이터베이스에 맞도록 JDBC 인터페이스를 실제로 구현한 후 라이브러리로 제공한다.
JDBC란 Java Database Connectivity로 DB에 접근할 수 있도록 Java에 제공하는 API이다.
각 DB 회사에서 제공하는 JDBC의 드라이버만 교체를 하면 손 쉽게 데이터베이스를 변경 가능
JdbcTemplate은 JDBC 코어 패키지의 중앙 클래스로, JDBC의 사용을 단순화하고 일반적인 오류를 방지하는데 도움을 준다.
커넥션 획득
statement 준비 및 실행
커넥션 종료
트랜잭션을 다루기 위한 커넥션 동기화 등..
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
// MySQL
implementation 'mysql:mysql-connector-java:8.0.28'
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
private final JdbcTemplate jdbctemplate;
public MemoRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
template.update()
데이터를 변경할 때 update를 사용한다.
INSERT, UPDATE, DELETE SQL에 사용한다.
template.query()
데이터를 하나 이상 조회할 때 사용한다.
데이터를 조회해서 list로 반환한다.
결과가 없다면 빈 컬렉션을 반환
RowMapper()
데이터 조회 결과를 객체로 변환
RowMapper가 필요한 메서드에 직접 람다식을 작성 가능
String sql = "INSERT INTO (테이블) (colName1, colName2) VALUES (?,?)";
jdbcTemplate.update(sql, "내용1", "내용2");
String sql = "UPDATE (테이블) SET (colName1) = ? WHERE (colName2) = ?";
jdbcTemplate.update(sql,"내용1","내용2");
String sql = "DELETE FROM (테이블) WHERE (조건) = ?";
jdbcTemplate.update(sql,(조건));
query() 메서드
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 (특정 변환 클래스 타입) ..;
}
}
}