[Spring] JDBC 사용하기

Sun choi·2024년 8월 14일

NEW 지식

목록 보기
16/34

JDBC 사용하는 법 정리
실무에서는 거의 안쓴다고는 하지만 이번 개인과제에 필수 조건이라 사용하였다.

JDBC란?

JDBC는 Java Database Connectivity로 DB에 접근할 수 있도록 Java에서 제공하는 API.
JDBC에 연결해야하는 DB의 JDBC 드라이버를 제공하면 DB 연결 로직을 변경할 필요없이 DB 변경이 가능.
언어가 다른 Java와 SQL을 연결해주는 역할!

JdbcTemplate이란?

커넥션 연결, statement 준비 및 실행, 커넥션 종료 등의 반복적이고 중복되는 작업들을 대신 처리해주는 JdbcTemplate이 등장.

JdbcTemplate 사용방법

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

public MemoRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
}

INSERT, UPDATE, DELETE, SELECT SQL문 작성 후 사용.


내가 프로젝트에 작성한 코드

//일정 등록
    @PostMapping("/scheduler")
    public SchedulerResponseDto createScheduler (@RequestBody SchedulerRequestDto schedulerRequestDto) {
        // RequestDto -> Entity
        Scheduler scheduler = new Scheduler(schedulerRequestDto);

        // DB 저장
        KeyHolder keyHolder = new GeneratedKeyHolder(); // 기본 키를 반환받기 위한 객체

        Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
        scheduler.setCreateDate(currentTimestamp);
        scheduler.setUpdateDate(currentTimestamp);

        String sql = "INSERT INTO scheduler (username, contents, password, createDate, updateDate) VALUES (?, ?, ?, ?, ?)";
        jdbcTemplate.update( con -> {
                    PreparedStatement preparedStatement = con.prepareStatement(sql,
                            Statement.RETURN_GENERATED_KEYS);

                    preparedStatement.setString(1, scheduler.getUsername());
                    preparedStatement.setString(2, scheduler.getContents());
                    preparedStatement.setString(3, scheduler.getPassword());
                    preparedStatement.setObject(4, scheduler.getCreateDate());
                    preparedStatement.setObject(5, scheduler.getUpdateDate());
                    return preparedStatement;
                },
                keyHolder);

        // DB Insert 후 받아온 기본키 확인
        Long id = keyHolder.getKey().longValue();
        scheduler.setId(id);

        // Entity -> ResponseDto
        SchedulerResponseDto schedulerResponseDto = new SchedulerResponseDto(scheduler);

        return schedulerResponseDto;
    }

createDate와 updateDate는 SQL문에 default CURRENT_TIMESTAMP를 넣어서 자동으로 현재 날짜와 로컬 시간을 나타내주게 작성했는데 자꾸 null 값이 나와서 이 코드를 최후의 수단으로 넣어줬다.

 Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
        scheduler.setCreateDate(currentTimestamp);
        scheduler.setUpdateDate(currentTimestamp);

Postman으로 반환 확인

이렇게 두 데이터베이스 연결 및 JDBC 를 사용을 해보았다.
DTO 사용도 처음이라 그것도 포스팅해보겠다.

profile
풀스택 개발자의 공부기록 📖

0개의 댓글