카테고리 없음
DAO / DTO 구현
dev-bleck
2022. 11. 9. 17:13
Statement
- Java 자체로는 SQL 구문을 이해 못하기 때문에 Statement를 이용하여 SQL 구문을 실행시킴
PreparedStatement
- Statement보다 향상된 기능
- 매개변수 '?'에 값을 대입한다
Resultset
- 결과값을 저장하고, 저장한 값을 한 행 단위로 불러올 수 있음
- Statement 클래스의 executeQuery(String sql) 메소드를 통해 저장함
1. JdbcUtils
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcUtil {
private static String className = "org.mariadb.jdbc.Driver";
private static String url = "jdbc:mariadb://localhost:3306/myapp";
private static String user = "*****";
private static String password = "*****";
private static Connection conn;
public static Connection getConnection() {
try {
Class.forName(className);
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn) {
if(conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(PreparedStatement conn) {
if(conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet conn) {
if(conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection conn, PreparedStatement stmt, ResultSet rs) {
// 생성된 것의 역순으로 close
close(rs);
close(stmt);
close(conn);
}
}
2. DAO
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 org.comstudy.day15.JdbcUtil;
public class BoardDAO {
private static String SELECT_ALL = "SELECT * FROM BOARD";
private static String SELECT_ONE = "SELECT * FROM BOARD WHERE No=?";
private static String INSERT = "INSERT INTO BOARD(title, content, author, writeday) values(?, ?, ?, ?)";
private static String UPDATE = "UPDATE BOARD SET title=?, content=?, author=?, writeday=? WHERE bno=?";
private static String DELETE = "DELETE FROM BOARD WHERE bno=?";
private Connection conn; // DB와의 연결을 위해 conn 객체 생성
private PreparedStatement stmt; // 매개변수 '?'에 값을 대입한다. statement보다 향상된 성능
private ResultSet rs; // 결과값을 저장하고, 저장한 값을 한 행 단위로 불러올 수 있음
// commitCheck
private void commitCheck(int cnt) {
try {
if(cnt > 0) {
conn.commit();
} else {
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// SELECT_ALL : List 생성
public List<BoardDTO> selectAll() {
List<BoardDTO> list = new ArrayList<BoardDTO>();
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(SELECT_ALL);
rs = stmt.executeQuery();
if(rs.next()) {
int bno = rs.getInt("bno");
String title = rs.getString("title");
String content = rs.getString("content");
String author = rs.getString("author");
String writeday = rs.getString("writeday");
list.add(new BoardDTO(bno, title, content, author, writeday));
}
commitCheck(stmt.executeUpdate());
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
return list;
}
// SELECT_ONE
public BoardDTO selectOne(BoardDTO dto) {
BoardDTO user = null;
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(SELECT_ONE);
stmt.setInt(1, dto.getBno());
rs = stmt.executeQuery();
if(rs.next()) {
int bno = rs.getInt(1);
String title = rs.getString(2);
String content = rs.getString(3);
String author = rs.getString(4);
String writeday = rs.getString(5);
user = new BoardDTO(bno, title, content, author, writeday);
}
commitCheck(stmt.executeUpdate());
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
return user;
}
// INSERT
public void insert(BoardDTO dto) {
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(INSERT);
stmt.setString(1, dto.getTitle());
stmt.setString(2, dto.getContent());
stmt.setString(3, dto.getAuthor());
stmt.setString(4, dto.getWriteday());
rs = stmt.executeQuery();
commitCheck(stmt.executeUpdate());
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
}
// UPDATE
public void update(BoardDTO dto) {
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(UPDATE);
stmt.setString(1, dto.getTitle());
stmt.setString(2, dto.getContent());
stmt.setString(3, dto.getAuthor());
stmt.setString(4, dto.getWriteday());
stmt.setInt(5, dto.getBno());
rs = stmt.executeQuery();
commitCheck(stmt.executeUpdate());
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
}
// DELETE
public void delete(BoardDTO dto) {
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(DELETE);
stmt.setInt(1, dto.getBno());
rs = stmt.executeQuery();
commitCheck(stmt.executeUpdate());
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
}
public static void main(String[] args) {
BoardDAO dao = new BoardDAO();
// test
BoardDTO dto = new BoardDTO(0, "타이틀", "콘텐츠", "저자", "날짜");
dao.insert(dto);
List<BoardDTO> list = dao.selectAll();
for(BoardDTO user : list) {
System.out.println(user);
}
}
}
3. DTO
public class BoardDTO {
private int bno; // 보드의 번호
private String title;
private String content;
private String author;
private String writeday; // 날짜
// 디폴트 생성자
public BoardDTO() {
this(0, "", "", "", "");
}
// 생성자
public BoardDTO(int bno, String title, String content, String author, String writeday) {
this.bno = bno;
this.title = title;
this.content = content;
this.author = author;
this.writeday = writeday;
}
// setters & getters
public int getBno() {
return bno;
}
public void setBno(int bno) {
this.bno = bno;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getWriteday() {
return writeday;
}
public void setWriteday(String writeday) {
this.writeday = writeday;
}
// toString
@Override
public String toString() {
return "BoardDTO [bno=" + bno + ", title=" + title + ", content=" + content + ", author=" + author
+ ", writeday=" + writeday + "]";
}
}
4. Result
728x90