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();
    }
}