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

JDBC는 Java Database Connectivity로 DB에 접근할 수 있도록 Java에서 제공하는 API.
JDBC에 연결해야하는 DB의 JDBC 드라이버를 제공하면 DB 연결 로직을 변경할 필요없이 DB 변경이 가능.
언어가 다른 Java와 SQL을 연결해주는 역할!
커넥션 연결, statement 준비 및 실행, 커넥션 종료 등의 반복적이고 중복되는 작업들을 대신 처리해주는 JdbcTemplate이 등장.
spring.datasource.url=jdbc:mysql://localhost:3306/클래스이름
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;
}
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 사용도 처음이라 그것도 포스팅해보겠다.