💡 학습 목표
JDBC를 사용하여 학생 관리 시스템을 구축해 보자.
- 학생의 정보를 데이터베이스에 저장하고 관리하는 간단한 시스템을 구축합니다.
- 학생 정보를 추가, 조회, 수정, 삭제할 수 있는 기능을 구현합니다.
- 기능 요구사항
- 학생 정보 추가
- 학생 정보 조회
- 학생 정보 수정
- 학생 정보 삭제
- 비기능 요구사항
- 사용자 친화적인 콘솔 인터페이스 제공
- 적절한 예외 처리 및 로그 기록
- 데이터베이스 연결 풀 사용(HikariCP)
>> 프로젝트 설계 <<
- 데이터베이스 설계 및 테이블 생성
테이블 - tbstudent
컬럼 - id, name, age, email
create database studentdb;
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
만들어 보기
package ver2;
import java.sql.Connection;
import java.sql.SQLException;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
// 싱글톤 패턴 - 단 하나의 객체만 필요함을 보장해야 된다면
// 싱글톤 패턴으로 설계 할 수 있다.
public class DBConnectionManager {
// 자기 자신의 참조 주소값을 담을 변수 생성 단. private
private static DBConnectionManager instance;
private HikariDataSource dataSource;
// 생성자를 <---- 외부에서 생성자를 호출 못 하게 막아야 한다.
private DBConnectionManager() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/studentdb?serverTimezone=Asia/Seoul");
config.setUsername("root");
config.setPassword("asd123");
config.setMaximumPoolSize(10);
dataSource = new HikariDataSource(config);
}
// 외부에서 클래스이름.getxxx 메서드를 만들어 주면 된다.
// 한 번에 하나의 스레드만 접근하도록 동기화 적용
public synchronized DBConnectionManager getInstance() {
if(instance == null) {
instance = new DBConnectionManager();
}
return instance;
}
// Connection 객체를 반환(구현체 - HikariCP 이다)
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
package ver2.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
// DTO 기능은 단지 데이터만 담을 역할을 하는것은 아닙니다.
// 기능도 추가 가능하다.
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class StudentDTO {
private int id;
private String name;
private int age;
private String email;
}
package ver2;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import ver2.model.StudentDTO;
// 물론 기능 설계는 인터페이스를 먼저 작성하고 구현 클래스를 만드는 것이 좋다
public class StudentDAO {
// 학생 정보 추가 기능 만들기
public void addStudent(StudentDTO dto) throws SQLException {
}
// 학생에 아이디 조회하는 기능 만들기, (id)
public StudentDTO getStudentById(int id) throws SQLException {
// todo 수정하기
return null;
}
// 학생 전체 조회 기능
public List<StudentDTO> getAllStudents() throws SQLException {
// tip - 리스트라면 무조건 리스트를 생성하고 코드 작성
List<StudentDTO> list = new ArrayList<>();
return list;
}
// 학생 정보 수정하기
public void updateStudent(String name, StudentDTO dto) throws SQLException {
}
// 학생 정보 삭제하기
public void deleteStudent(int id) throws SQLException {
}
}
'Java' 카테고리의 다른 글
JDBC에서의 예외 처리 (0) | 2024.07.05 |
---|---|
JDBC 성능 최적화 (0) | 2024.07.05 |
JDBC를 활용한 CRUD와 SOLID 원칙 (1) | 2024.07.05 |
JDBC 배치 처리 (0) | 2024.06.13 |
JDBC 트랜잭션 관리와 배치 처리 (0) | 2024.06.12 |