๐ก ํ์ต ๋ชฉํ
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
);
๋ง๋ค์ด ๋ณด๊ธฐ
DBConnectionManager
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);
} // end of DBConnectionManager()
// ์ธ๋ถ์์ ํด๋์ค์ด๋ฆ.getxxx ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฃผ๋ฉด ๋๋ค.
// ํ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผํ๋๋ก ๋๊ธฐํ ์ ์ฉ
public synchronized DBConnectionManager getInstance() {
if (instance == null) {
instance = new DBConnectionManager();
}
return instance;
} // end of getInstance()
// Connection ๊ฐ์ฒด๋ฅผ ๋ฐํ (๊ตฌํ์ฒด - HikariCP ์ด๋ค.)
public Connection getConnection() throws SQLException{
return dataSource.getConnection();
} // end of getConnection()
} // end of class
StudentDTO
package ver2.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
// DTO์ ๊ธฐ๋ฅ์ ๋จ์ง ๋ฐ์ดํฐ๋ง ๋ด๋ ์ญํ ์ ํ๋๊ฒ์ ์๋๋ค.
// ๊ธฐ๋ฅ๋ ์ถ๊ฐ ๊ฐ๋ฅํ๋ค.
@Data // getter setter ๋์์ ์ฌ์ฉํ ์ ์๋ค.
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class StudentDTO {
private int id;
private String name;
private int age;
private String email;
} // end of class
StudentDAO
package ver2;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
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 {
String query = " INSERT INTO students (name, age, email) values(?, ?, ?) ";
try(
Connection conn = DBConnectionManager.getInstance().getConnection()
) {
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, dto.getName());
pstmt.setInt(2, dto.getAge());
pstmt.setString(3, dto.getEmail());
pstmt.executeUpdate();
}
}
// ํ์์ ์์ด๋๋ก ์กฐํํ๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (id ๋๋ ์ด๋ฆ์ผ๋ก ๋ง์ด ํ๋ค.)
public StudentDTO getStudentbyId(int id) throws SQLException {
String query = " SELECT * FROM students WHERE id = ? ";
try(
Connection conn = DBConnectionManager.getInstance().getConnection()
) {
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setInt(1, id);
try(ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
return new StudentDTO(rs.getInt("id"), rs.getString("name"), rs.getInt("age"), rs.getString("email"));
}
}
}
// todo ์์ ํ๊ธฐ
return null;
}
// ํ์ ์ ์ฒด ์กฐํ ๊ธฐ๋ฅ
public List<StudentDTO> getAllStudents() throws SQLException{
// tip - ๋ฆฌ์คํธ๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ ์ฝ๋ ์์ฑํ๊ธฐ
List<StudentDTO> list = new ArrayList<>();
String query = " SELECT * FROM students ";
try(
Connection conn = DBConnectionManager.getInstance().getConnection()
) {
PreparedStatement pstmt = conn.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
// ๋ฉ์๋ ์ฒด์ด๋ ๊ธฐ๋ฒ
StudentDTO dto = new StudentDTO().builder()
.id(rs.getInt("id"))
.name(rs.getString("name"))
.age(rs.getInt("age"))
.email(rs.getString("email"))
.build();
list.add(dto);
}
}
// todo ์์ ํ๊ธฐ
return list;
}
// ํ์ ์ ๋ณด ์์ ํ๊ธฐ
public void updateStudent(String name, StudentDTO dto) throws SQLException {
String query = " UPDATE SET name = ?, age = ?, email = ? WHERE name = ? ";
try(
Connection conn = DBConnectionManager.getInstance().getConnection();
) {
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, dto.getName());
pstmt.setInt(2, dto.getAge());
pstmt.setString(3, dto.getEmail());
pstmt.setString(4, name); // ์กฐ๊ฑด๊ฐ ์
ํ
pstmt.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
}
}
// ํ์ ์ ๋ณด ์ญ์ ํ๊ธฐ
public void deleteStudent(int id) throws SQLException {
String query = " DELETE FROM students WHERE id = ? ";
try(
Connection conn = DBConnectionManager.getInstance().getConnection();
) {
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setInt(1, id);
pstmt.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
}
}
} // end of class
StudentManagementSystem
package ver2;
import java.sql.SQLException;
import java.util.List;
import ver2.model.StudentDTO;
public class StudentManagementSystem {
private static final StudentDAO studentDAO = new StudentDAO();
public static void main(String[] args) {
// ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ ๊พธ๋ฉฐ ์ค๋ ๋๋ค.
try {
List<StudentDTO> list = studentDAO.getAllStudents();
System.out.println(list.size());
System.out.println(list.toString());
} catch (SQLException e) {
e.printStackTrace();
}
} // end of main
} // end of class
