자료구조(Data Structure)/JDBC

JDBC 실습 예제 - 10

CNOW 2024. 6. 27. 16:22
💡 학습 목표
JDBC를 사용하여 학생 관리 시스템을 구축해 보자.
  • 학생의 정보를 데이터베이스에 저장하고 관리하는 간단한 시스템을 구축합니다.
  • 학생 정보를 추가, 조회, 수정, 삭제할 수 있는 기능을 구현합니다. 

 

  1. 기능 요구사항
    • 학생 정보 추가
    • 학생 정보 조회
    • 학생 정보 수정
    • 학생 정보 삭제
  2. 비기능 요구사항
    • 사용자 친화적인 콘솔 인터페이스 제공
    • 적절한 예외 처리 및 로그 기록
    • 데이터베이스 연결 풀 사용(HikariCP)

 

>> 프로젝트 설계 <<

  1. 데이터베이스 설계 및 테이블 생성
  2. 테이블 - 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 {
		
	}
	
}