Spring JDBC 흐름
라이브러리 추가
// build.gradle
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
// 추가적으로 필요한 DB 커넥터를 추가하면 됩니다.
...
}
Repository 생성
- DB와 연결할 repository 클래스를 생성합니다.
- @Repository 를 붙여 Repository라는 것을 알립니다.
@Repository
public class JdbcRepository{
// JdbcTemplate을 필드로 가져와야 합니다.
private final JdbcTemplate jdbcTemplate;
// 생성자로 DataSource을 주입하여 사용합니다.
@Autowired
public JdbcRepository(DataSource dataSource){
this.jdbcTemplate = new JdbcTemplate(datasource);
}
}
실제 사용 예시
@Repository
public class JdbcMemoRepository{
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcMemoRepository(DataSource dataSource){
this.jdbcTemplate = new JdbcTemplate(datasource);
}
// 저장
public Memo save(Memo memo){
// 실행할 쿼리를 작성합니다.
String sql = "insert into memo values(?,?)";
// sql을 db로 날리면서 ?에는 입력한 매개변수가 차례대로 들어갑니다.
// update()를 사용합니다.
jdbcTemplate.update(sql, memo.getId(), memo.getTexT());
return memo;
}
// RowMapper 메소드 작성
private RowMapper<Memo> memoRowMapper(){
// jdbc로 날린 쿼리의 결과값은 ResultSet에 담겨 옵니다.
// RowMapper를 이용하여 쿼리 결과값을 원하는 객체에 매핑을 해주어야 합니다.
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()); // 조회시에는 query()를 사용합니다.
}
public Optional<Memo> findById(int id){
String sql = "select * from memo where id = ?";
return jdbcTemplate.query(sql, memoRowMapper(), id).stream().findFirst();
}
}