
๋ชจ๋
:์ฝ๋,๋ผ์ด๋ธ๋ฌ๋ฆฌ,๋ฑ ๊ด๋ จ๋ ๊ธฐ๋ฅ๋ค์ ๋ฌถ์ด์ ๊ตฌํ ํ๋ ๋จ์๋ก ์ฆ ํ๋์ ํ์ผ์ ์๊ธฐํ๋ค.
SRP
:๊ฐ ๋ชจ๋(๋ ์ด์ด)๋ง๋ค ์ต์ํ์ ์ฑ
์๋ง ๋ถ์ฌํ๊ฒํ๋ค.
๋ฉ์ธ ์ฝ๋๋ฅผ ์คํํ ํ์ผ๊ณผ ํ
์คํธ ์ฝ๋๋ฅผ ์คํ ํ ํ์ผ์ ๋ฐ๋ก ๋ง๋ ๋ค.
๋ ๊ตฌ์ฒด์ ์ผ๋ก jdbc์ ์์๋ก ์ค๋ช
ํ๋ฉด main์ฝ๋, DAO์ฝ๋,DB์ ์ฐ๊ฒฐํ๋ ์ฝ๋ ๊ฐ์๋ฅผ ๋ชจ๋ํ ์์ผ์ ๋ง๋ ๋ค.
DAO(Data Acceess Object)
:๋ง๊ตญ ๊ณตํต ์์ธ์ค ์ค๋ธ์ ํธ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ณ ์กฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
to string()
:๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํ ์ํฌ ๋ ์ฌ์ฉ
controller
: ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ ๋ถ๋น ์ํค๋ ์ (์๋ณ์ ์ฌ์ฉ)srp
main ํ์ผ
import dao.BankDAO;
import db.DBConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class BankApp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("์ญ์ ํ ๊ณ์ข ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์: ");
int number = sc.nextInt();
BankDAO dao = new BankDAO();
int result = dao.deleteByNumber(number);
if (result == 1){
System.out.println("์ญ์ ์ฑ๊ณตํ์ต๋๋ค.");
}else{
System.out.println("์ญ์ ์คํจํ์ต๋๋ค");
}
}
}
DAOํ์ผ
package dao;
import db.DBConnection;
import model.Account;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/**
* DAO -Data Access Object
* SRP - ๋จ์ผ ์ฑ
์์ ์์น
*/
public class BankDAO {
public int deleteByNumber(int number) {
Connection conn = DBConnection.getInstance();
try {
String sql = "delete from account_tb where number = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);//๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒํผ ์ฌ์ฉ ์ฆ ๋ฒํผ ๋ฌ๊ธฐ
// parameterIndex๋ ์ฟผ๋ฆฌ๋ง๋ค์ ๋ฌผ์ํ ์์
// ์๋ต ๊ฒฐ๊ณผ ์์ณฅ ๋ฐ์ ํ ์ด ๊ฒฐ๊ณผ๋ก ์จ๋ค.
pstmt.setInt(1, number);
int num = pstmt.executeUpdate();//ํ๋ฌ์ฌ ์ญํ ์ ๊ฐ์ง๊ณ ์์
return num;
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
public int insert(String password, int balnace) {
Connection conn = DBConnection.getInstance();
try {
String sql = "insert into account_tb(password, balance, created_at) values(?,?,now())";
PreparedStatement pstmt = conn.prepareStatement(sql);//๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒํผ ์ฌ์ฉ ์ฆ ๋ฒํผ ๋ฌ๊ธฐ
// parameterIndex๋ ์ฟผ๋ฆฌ๋ง๋ค์ ๋ฌผ์ํ ์์
// ์๋ต ๊ฒฐ๊ณผ ์์ณฅ ๋ฐ์ ํ ์ด ๊ฒฐ๊ณผ๋ก ์จ๋ค.
pstmt.setString(1, password);
pstmt.setInt(2, balnace);
int num = pstmt.executeUpdate();//ํ๋ฌ์ฌ ์ญํ ์ ๊ฐ์ง๊ณ ์์
return num;
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
public int updateByNumber(int balance, int number) {
Connection conn = DBConnection.getInstance();
try {
String sql = "update account_tb set balance = ? where number = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);//๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒํผ ์ฌ์ฉ ์ฆ ๋ฒํผ ๋ฌ๊ธฐ
// parameterIndex๋ ์ฟผ๋ฆฌ๋ง๋ค์ ๋ฌผ์ํ ์์
// ์๋ต ๊ฒฐ๊ณผ ์์ณฅ ๋ฐ์ ํ ์ด ๊ฒฐ๊ณผ๋ก ์จ๋ค.
pstmt.setInt(1, balance);
pstmt.setInt(2, number);
int num = pstmt.executeUpdate();//ํ๋ฌ์ฌ ์ญํ ์ ๊ฐ์ง๊ณ ์์
return num;
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
public Account selectByNumber(int number) {
Connection conn = DBConnection.getInstance();
try {
String sql = "select * from account_tb where number = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, number);
//select ๊ฒฐ๊ณผ๋ ํ
์ด๋ธ๋ก ๋ฐ๊ฒ ์ค์
ResultSet rs = pstmt.executeQuery(); //rs = ํ
์ด๋ธํํ
์ ๋ฐ์ดํฐ
boolean isRow = rs.next(); //์ปค์ ํ์นธ ๋ด๋ฆฌ๊ธฐ
//์ถ๋ ฅํ๊ณ ์ถ์ ์นผ๋ผ๋ง ๊ณจ๋ผ ์ถ๋ ฅํ๊ธฐ
//๋ฐ์ค ๋ง๋ค๊ธฐ
if (rs.next()){
Account account = new Account(
rs.getInt("number"),
rs.getString("password"),
rs.getInt("balance"),
rs.getTimestamp("created_at")
);
return account;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//์ ์ฒด ์กฐํ ํ ๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์กฐํ
public List<Account> selectAll(){
Connection conn = DBConnection.getInstance();
try {
String sql = "select * from account_tb order by number desc";//order by number desc ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ณ๊ฒฝ
PreparedStatement pstmt = conn.prepareStatement(sql);
//select ๊ฒฐ๊ณผ๋ ํ
์ด๋ธ๋ก ๋ฐ๊ฒ ์ค์
ResultSet rs = pstmt.executeQuery(); //rs = ํ
์ด๋ธํํ
์ ๋ฐ์ดํฐ
//์ถ๋ ฅํ๊ณ ์ถ์ ์นผ๋ผ๋ง ๊ณจ๋ผ ์ถ๋ ฅํ๊ธฐ
//๋ฐ์ค ๋ง๋ค๊ธฐ
List<Account> accountList = new ArrayList<>();
while (rs.next()){
Account account = new Account(
rs.getInt("number"),
rs.getString("password"),
rs.getInt("balance"),
rs.getTimestamp("created_at")
);
accountList.add(account);
}
return accountList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
DB์ฐ๊ฒฐ ํ์ผ
package db;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
public static Connection getInstance() { //์์ผ
String username = "root";
String password = "1234";
String url = "jdbc:mariadb://localhost:3306/cosdb"; //ํ๋กํ ์ฝ//ip์ฃผ์:ํฌํธ๋ฒํธ/ํ
์ด๋ธ ๋ช
// ํ๋กํ ์ฝ์ด ์ ์ฉ๋ ์์ผ
try {
Connection conn = DriverManager.getConnection(url, username, password);
System.out.println("db connect succes");
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
DB์ SELECTํ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํ ์ค๋ธ์ ํธ ์ฝ๋
package model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import java.sql.Timestamp;
//๋ชจ๋ ์์ฑ์๋ฅผ ๋ง๋ ๋ค.
/*
*DB์ Slect ํ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ธฐ ์ํ ์ค๋ธ์ ํธ
*/
@ToString
@AllArgsConstructor //๋ชจ๋ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ์น๊ตฌ๋ค์ ์๋์ผ๋ก ์์ฑ์๋ก ๋ง๋ค์ด ์ฃผ๋ lobok ๋ผ์ด๋ธ๋ฒ๋ฆฌ์ค ํ๋
@Getter
public class Account {
private int number;
private String passworld;
private int balance;
//java.sql์ TimeSTAMP
//์นด๋ฉํ๊ธฐ๋ฒ ์ฌ์ฉํ๊ธฐ
private Timestamp createdAt;
}
TEST ํ์ผ
๋ชจ๋
jdbc๋ง๋ค๊ธฐ
์ค์ต
์น - ๋ฏธ๋ค์จ์ด -DB
์น์์ DB์์ ์๋ ๋ด์ฉ ์์ฒญ์ ํด์(์๋ฐ) ํตํด์ ํ๋๋ฐ ์ด๋ ์๋ณ์๋ก ์์ฒญ์ ํ๋ค.
PUT UPDATE
WRITE์์ฒญ์ ์๋ต์ ๋ฐ๋๊ฐ ํ์์๋ค OKAY๋ง ์ฃผ๋ฉด๋๋ค.
GET๊ณผ DELTE๋ HTTP์ ํค๋๋ง ์์ผ๋ฉด ๋๋ค.
๊ทธ ์ธ POSTํ๊ณ PUT์ ๋ฐ๋๋ฐ์ดํฐ๊น์ง ํ์ํ๋ค.
๊ทธ ์ด์ ๋ ๊ฐ๋จํ๋ฐ ๋ฐ๋์ ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ์ ธ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฆฌ์คํ์ค ๋ฐ๋(์๋ต ๋ฐ๋)
๋ง์ํ์
(์ ์ธ๊ณ ํ์ค)
x-www-from-urlencoded
password=1234&balance=1000
DB์์
ํ๋ก์ ์
:์ปฌ๋ผ์ ๊ณจ๋ผ๋ด๋๊ฒShare article