Project
[Weather Diary] JPA vs JDBC
sangyunpark
2023. 9. 4. 22:56
JPA
Java Persistent API
ORM(Object Relation Mapper) 중 하나 (자바용 ORM)
JDBC
Java Database Connectivity
SQL Mapper 중 하나
사용해보기
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc' // jdbc 추가
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'mysql:mysql-connector-java' // mysql connect 추가
}
application.properties 파일에 DB 접속정보 저장하기
Memo 테이블 만들기
mysql
create table memo(
id int not null primary key auto_increment,
text varchar(50) not null
)
JDBC를 활용해서 Memo repository
package com.example.weatherdiary.repository;
import com.example.weatherdiary.domain.Memo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import javax.sql.DataSource;
import java.util.List;
import java.util.Optional;
@Repository
public class JdbcMemoRepository {
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcMemoRepository(DataSource dataSource){
this.jdbcTemplate = new JdbcTemplate(dataSource); // application.properties 정보
}
public Memo save(Memo memo){
String sql = "insert into memo values(?,?)";
jdbcTemplate.update(sql, memo.getId(), memo.getText());
return memo;
}
private RowMapper<Memo> memoRowMapper(){
// jdbc를 통해서 가져온 데이터 값의 형태 ResultSet
return ((rs, rowNum) -> new Memo(
rs.getInt("id"),
rs.getString("text")
));
}
public List<Memo> findAll(){
String sql = "select * from memo";
return jdbcTemplate.query(sql,memoRowMapper());
}
public Optional<Memo> findById(int id){
String sql = "select * from memo where id = ?";
return jdbcTemplate.query(sql,memoRowMapper(),id).stream().findFirst();
}
}