반응형
이번 글에서는 실제 데이터베이스와 연동하여 게시글 정보를 등록, 수정, 삭제, 조회, 목록 출력하는 DAO(Data Access Object) 클래스를 작성해봅니다. DAO는 DB와 직접 연결되는 계층으로, 비즈니스 로직에서 데이터를 처리할 때 핵심 역할을 합니다.
📦 BoardDAO.java
package com.springbook.biz.board;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class BoardDAO {
private Connection conn;
private PreparedStatement stmt;
private ResultSet rs;
private final String BOARD_INSERT =
"INSERT INTO board (seq, title, writer, content) " +
"VALUES ((SELECT NVL(MAX(seq), 0) + 1 FROM board), ?, ?, ?)";
private final String BOARD_UPDATE =
"UPDATE board SET title = ?, content = ? WHERE seq = ?";
private final String BOARD_DELETE =
"DELETE FROM board WHERE seq = ?";
private final String BOARD_GET =
"SELECT * FROM board WHERE seq = ?";
private final String BOARD_LIST =
"SELECT * FROM board ORDER BY seq DESC";
public void insertBoard(BoardVO vo) {
System.out.println("insertBoard 시작");
try {
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(BOARD_INSERT);
stmt.setString(1, vo.getTitle());
stmt.setString(2, vo.getWriter());
stmt.setString(3, vo.getContent());
stmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(stmt, conn);
}
}
public void updateBoard(BoardVO vo) {
System.out.println("updateBoard 시작");
try {
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(BOARD_UPDATE);
stmt.setString(1, vo.getTitle());
stmt.setString(2, vo.getContent()); // 수정됨
stmt.setInt(3, vo.getSeq());
stmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(stmt, conn);
}
}
public void deleteBoard(BoardVO vo) {
System.out.println("deleteBoard 시작");
try {
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(BOARD_DELETE);
stmt.setInt(1, vo.getSeq());
stmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(stmt, conn);
}
}
public BoardVO getBoard(BoardVO vo) {
System.out.println("getBoard 시작");
BoardVO board = null;
try {
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(BOARD_GET);
stmt.setInt(1, vo.getSeq());
rs = stmt.executeQuery();
if (rs.next()) {
board = new BoardVO();
board.setSeq(rs.getInt("seq"));
board.setTitle(rs.getString("title"));
board.setWriter(rs.getString("writer"));
board.setContent(rs.getString("content"));
board.setRegDate(rs.getDate("regdate"));
board.setCnt(rs.getInt("cnt"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(rs, stmt, conn);
}
return board;
}
public List<BoardVO> getBoardList(BoardVO vo) {
System.out.println("getBoardList 시작");
List<BoardVO> boardList = new ArrayList<>();
try {
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(BOARD_LIST);
rs = stmt.executeQuery();
while (rs.next()) {
BoardVO board = new BoardVO();
board.setSeq(rs.getInt("seq"));
board.setTitle(rs.getString("title"));
board.setWriter(rs.getString("writer"));
board.setContent(rs.getString("content"));
board.setRegDate(rs.getDate("regdate"));
board.setCnt(rs.getInt("cnt"));
boardList.add(board);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(rs, stmt, conn);
}
return boardList;
}
}
💬 코드 설명
- insertBoard() : 새로운 게시글 등록 (글 번호는 자동 증가).
- updateBoard() : 글 번호를 기준으로 제목과 내용을 수정.
- deleteBoard() : 해당 글 번호를 가진 게시글 삭제.
- getBoard() : 하나의 게시글 상세 조회.
- getBoardList() : 전체 게시글 목록을 역순으로 조회.
💡 포인트 정리
- DAO는 DB와 연결된 로직만 담당하며, 비즈니스 로직은 Service 계층에서 처리.
- SQL은 상수로 정의해 가독성과 유지보수성을 높임.
- JDBCUtil을 활용해 자원 해제를 일관되게 처리.
- getBoardList()는 여러 개의 BoardVO를 리스트로 반환.
📌정리하자면, 이번 강의에서는 실제 데이터베이스와 연동되는 DAO 클래스를 직접 작성해 보았습니다. 게시글 등록, 수정, 삭제, 조회, 목록 출력까지의 CRUD 기능을 모두 구현했고, 다음 단계에서는 이 DAO를 서비스 계층에서 사용하여 MVC 구조로 연결해나갈 수 있게 됩니다.
'Spring > 실습 정리' 카테고리의 다른 글
Spring 8강 - JSP로 로그인 화면 만들기 (0) | 2025.06.19 |
---|---|
Spring 7강 - UserDAO & UserService 구성 (1) | 2025.06.18 |
Spring 6강 - BoardService 계층 구성과 실행 테스트 (0) | 2025.06.18 |
Spring 4강 - BoardVO와 JDBCUtil 클래스 구성 (0) | 2025.06.17 |
Spring 3강 - 어노테이션 기반 의존성 주입 (0) | 2025.06.17 |
Spring 2강 - 생성자 주입과 다형성 객체 활용 (1) | 2025.06.16 |