코딩항해기
[JSP] JDBC - DAO 템플릿 정리 본문
[JSP] JDBCUtil 템플릿 정리
JDBC이긴한데 JSP에서 DB 연결할 때 사용하므로 JSP 카테고리에 정리했다.DB연결과 해제는 메서드로 만들어 사용하는 경우가 많고 그 형태가 패턴화되어있기 때문에 템플릿화된 코드라고 부른다. s
minibcake.tistory.com
DAO 부분도 고정된 형태로 진행되는 템플릿의 일종이라 한 번 정리한다.
로그는 Controller에서 최대한 DAO에 들어와 코드를 보는 일 없이 console로 확인할 수 있도록 설계했다.
현재 진행 중인 프로젝트의 boardDAO로 템플릿을 정리해보겠다.
package model.jiyoon;
public class BoardDAO {
//쿼리선언
private final String INSERT = "쿼리문";
(생략)
//고정 설정값이 있다면 선언
private final int MINLIKE = 5; //인기글 최소 기준
private final int SHOWHOTBOARD = 3; //보여줄 인기글 개수
public boolean insert(BoardDTO boardDTO) {
System.out.println("log: Board insert start");
Connection conn = JDBCUtil.connect();
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(INSERT);
pstmt.setString(1, boardDTO.getTitle()); //제목
pstmt.setString(2, boardDTO.getContent()); //내용
pstmt.setString(3, boardDTO.getVisibility()); //공개 비공개
pstmt.setInt(4, boardDTO.getCategoryNum()); //카테고리 pk(fk)
pstmt.setInt(5, boardDTO.getMemberNum()); //멤버 pk(fk)
//넘어온 값 확인 로그
System.out.println("log: parameter getTitle : "+boardDTO.getTitle());
System.out.println("log: parameter getContent : "+boardDTO.getContent());
System.out.println("log: parameter getVisibility : "+boardDTO.getVisibility());
System.out.println("log: parameter getCategoryNum : "+boardDTO.getCategoryNum());
System.out.println("log: parameter getMemberNum : "+boardDTO.getMemberNum());
if(pstmt.executeUpdate() <= 0) {
//쿼리는 정상적으로 실행됐으나 실패
System.err.println("log: Board insert execute fail");
return false;
}
} catch (SQLException e) {
System.err.println("log: Board insert SQLException fail");
return false;
} catch (Exception e) {
System.err.println("log: Board insert Exception fail");
return false;
} finally {
//연결해제
if(!JDBCUtil.disconnect(conn, pstmt)) {
//연결해제 실패
System.err.println("log: Board insert disconnect fail");
return false;
}
System.out.println("log: Board insert end");
}
System.out.println("log: Board insert true");
return true;
}
public boolean update(BoardDTO boardDTO) {
System.out.println("log: Board update start");
Connection conn = JDBCUtil.connect();
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(UPDATE);
pstmt.setString(1, boardDTO.getTitle()); //제목
pstmt.setString(2, boardDTO.getContent()); //내용
pstmt.setString(3, boardDTO.getVisibility()); //공개 비공개
pstmt.setInt(4, boardDTO.getBoardNum()); //게시물 pk
//넘어온 값 확인 로그
System.out.println("log: parameter getTitle : "+boardDTO.getTitle());
System.out.println("log: parameter getContent : "+boardDTO.getContent());
System.out.println("log: parameter getVisibility : "+boardDTO.getVisibility());
System.out.println("log: parameter getBoardNum : "+boardDTO.getBoardNum());
if(pstmt.executeUpdate() <= 0) {
//쿼리는 정상적으로 실행됐으나 실패
System.err.println("log: Board update execute fail");
return false;
}
} catch (SQLException e) {
System.err.println("log: Board update SQLException fail");
return false;
} catch (Exception e) {
System.err.println("log: Board update Exception fail");
return false;
} finally {
//연결해제
if(!JDBCUtil.disconnect(conn, pstmt)) {
//연결해제 실패
System.err.println("log: Board update disconnect fail");
return false;
}
System.out.println("log: Board update end");
}
System.out.println("log: Board update true");
return true;
}
public boolean delete(BoardDTO boardDTO) {
System.out.println("log: Board delete start");
Connection conn = JDBCUtil.connect();
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(DELETE);
pstmt.setInt(1, boardDTO.getBoardNum()); //게시글 pk
//넘어온 값 확인 로그
System.out.println("log: parameter getBoardNum : "+boardDTO.getBoardNum());
if(pstmt.executeUpdate() <= 0) {
//쿼리는 정상적으로 실행됐으나 실패
System.err.println("log: Board delete execute fail");
return false;
}
} catch (SQLException e) {
System.err.println("log: Board delete SQLException fail");
return false;
} catch (Exception e) {
System.err.println("log: Board delete Exception fail");
return false;
} finally {
//연결해제
if(!JDBCUtil.disconnect(conn, pstmt)) {
//연결해제 실패
System.err.println("log: Board delete disconnect fail");
return false;
}
System.out.println("log: Board delete end");
}
System.out.println("log: Board delete true");
return true;
}
public ArrayList<BoardDTO> selectAll(BoardDTO boardDTO) {
System.out.println("log: Board selectAll start");
ArrayList<BoardDTO> datas = new ArrayList<>();
Connection conn = JDBCUtil.connect();
PreparedStatement pstmt = null;
try {
if(boardDTO.getCondition().equals("ALL")) {
//- 게시판 별 목록
System.out.println("log: Board selectAll condition : SELECTALL");
pstmt = conn.prepareStatement(SELECTALL);
pstmt.setString(1, boardDTO.getCategoryName()); //카테고리 명
pstmt.setInt(2, boardDTO.getStartNum()); //페이지네이션 시작번호
pstmt.setInt(3, boardDTO.getEndNum()); //페이지네이션 끝번호
//넘어온 값 확인 로그
System.out.println("log: parameter getCategoryName : "+boardDTO.getCategoryName());
System.out.println("log: parameter getStartNum : "+boardDTO.getStartNum());
System.out.println("log: parameter getEndNum : "+boardDTO.getEndNum());
}
else if(boardDTO.getCondition().equals("HOT_SELECTALL")) {
//- 게시판 별 인기글 3개
System.out.println("log: Board selectAll condition : SELECTALL_HOT");
pstmt = conn.prepareStatement(SELECTALL_HOT);
pstmt.setString(1, boardDTO.getCategoryName()); //카테고리 명
pstmt.setInt(2, MINLIKE); //인기글 최소 기준
pstmt.setInt(3, SHOWHOTBOARD); //보여줄 인기글 개수
//넘어온 값 확인 로그
System.out.println("log: parameter getCategoryName : "+boardDTO.getCategoryName());
}
else if(boardDTO.getCondition().equals("TITLE_SELECTALL")) {
//- 검색 기능 (제목)
System.out.println("log: Board selectAll condition : SELECTALL_TITLE");
pstmt = conn.prepareStatement(SELECTALL_TITLE);
pstmt.setString(1, boardDTO.getCategoryName()); //카테고리 명
pstmt.setString(2, boardDTO.getKeyword()); //검색어
pstmt.setInt(3, boardDTO.getStartNum()); //페이지네이션 시작번호
pstmt.setInt(4, boardDTO.getEndNum()); //페이지네이션 끝번호
//넘어온 값 확인 로그
System.out.println("log: parameter getCategoryName : "+boardDTO.getCategoryName());
System.out.println("log: parameter getKeyword : "+boardDTO.getKeyword());
System.out.println("log: parameter getStartNum : "+boardDTO.getStartNum());
System.out.println("log: parameter getEndNum : "+boardDTO.getEndNum());
}
else {
//일치하는 컨디션값을 찾지 못했을 때
System.err.println("log: Board selectAll condition fail");
}
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
BoardDTO data = new BoardDTO();
data.setBoardNum(rs.getInt("BOARD_NUM")); //게시글 pk
data.setTitle(rs.getString("BOARD_TITLE")); //제목
data.setContent(rs.getString("BOARD_CONTENT")); //내용
data.setVisibility(rs.getString("BOARD_VISIBILITY")); //공개 비공개
data.setCategoryNum(rs.getInt("BOARD_CATEGORY")); //카테고리 pk(fk)
data.setCategoryName(rs.getString("CATEGORY_NAME")); //카테고리 명
data.setMemberNum(rs.getInt("MEMBER_NUM")); //작성자 pk(fk)
data.setMemberNickname(rs.getString("MEMBER_NICKNAME")); //작성자 닉네임
data.setLikeCnt(rs.getInt("LIKE_COUNT")); //좋아요 수
data.setWriteDay(rs.getString("BOARD_WRITE_DAY")); //작성일자
//반환된 객체 리스트에 추가
datas.add(data);
System.out.print("result "+data.getCategoryNum()+" | ");
}
rs.close();
System.out.println("end");
} catch (SQLException e) {
System.err.println("log: Board selectAll SQLException fail");
datas.clear();//잔여데이터 삭제
} catch (Exception e) {
System.err.println("log: Board selectAll Exception fail");
datas.clear();//잔여데이터 삭제
} finally {
//연결해제
if(!JDBCUtil.disconnect(conn, pstmt)) {
//연결해제 실패
System.err.println("log: Board selectAll disconnect fail");
datas.clear();//잔여데이터 삭제
}
System.out.println("log: Board selectAll end");
}
System.out.println("log: Board selectAll return datas");
return datas;
}
public BoardDTO selectOne(BoardDTO boardDTO) {
BoardDTO data = null;
System.out.println("log: Board selectOne start");
ArrayList<BoardDTO> datas = new ArrayList<>();
Connection conn = JDBCUtil.connect();
PreparedStatement pstmt = null;
try {
if(boardDTO.getCondition().equals("ONE")) {
//- 게시글 상세 조회
System.out.println("log: Board selectOne condition : SELECTONE");
pstmt = conn.prepareStatement(SELECTONE);
pstmt.setInt(1, boardDTO.getBoardNum()); //게시글 번호
//넘어온 값 확인 로그
System.out.println("log: parameter getBoardNum : "+boardDTO.getBoardNum());
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
data = new BoardDTO();
data.setBoardNum(rs.getInt("BOARD_NUM")); //게시글 pk
data.setTitle(rs.getString("BOARD_TITLE")); //제목
data.setContent(rs.getString("BOARD_CONTENT")); //내용
data.setVisibility(rs.getString("BOARD_VISIBILITY")); //공개 비공개
data.setCategoryNum(rs.getInt("BOARD_CATEGORY")); //카테고리 pk(fk)
data.setCategoryName(rs.getString("CATEGORY_NAME")); //카테고리 명
data.setMemberNum(rs.getInt("MEMBER_NUM")); //작성자 pk(fk)
data.setMemberNickname(rs.getString("MEMBER_NICKNAME"));//작성자 닉네임
data.setLikeCnt(rs.getInt("LIKE_COUNT")); //좋아요 수
data.setWriteDay(rs.getString("BOARD_WRITE_DAY")); //작성일자
System.out.println("result true");
}
rs.close();
}
else if(boardDTO.getCondition().equals("CNT")) {
//- 게시판 별 글 개수
System.out.println("log: Board selectOne condition : SELECTONE_CNT");
pstmt = conn.prepareStatement(SELECTONE_CNT);
pstmt.setString(1, boardDTO.getCategoryName()); //카테고리 명
//넘어온 값 확인 로그
System.out.println("log: parameter getCategoryName : "+boardDTO.getCategoryName());
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
data = new BoardDTO();
data.setBoardCnt(rs.getInt("B_CNT")); //게시판 별 게시글 총 개수
System.out.println("result true");
}
rs.close();
}
else if(boardDTO.getCondition().equals("CNTCONTENTS")) {
//- 게시판 별 내용 검색 글 개수
System.out.println("log: Board selectOne condition : SELECTONE_CONTENT_CNT");
pstmt = conn.prepareStatement(SELECTONE_CONTENT_CNT);
pstmt.setString(1, boardDTO.getCategoryName()); //카테고리 명
pstmt.setString(2, boardDTO.getKeyword()); //검색어
//넘어온 값 확인 로그
System.out.println("log: parameter getCategoryName : "+boardDTO.getCategoryName());
System.out.println("log: parameter getKeyword : "+boardDTO.getKeyword());
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
data = new BoardDTO();
data.setBoardCnt(rs.getInt("B_CNT")); //게시판 별 게시글 총 개수
System.out.println("result true");
}
rs.close();
}
else {
//일치하는 컨디션값을 찾지 못했을 때
System.err.println("log: Board selectOne condition fail");
}
System.out.println("end");
} catch (SQLException e) {
System.err.println("log: Board selectOne SQLException fail");
datas.clear();//잔여데이터 삭제
} catch (Exception e) {
System.err.println("log: Board selectOne Exception fail");
datas.clear();//잔여데이터 삭제
} finally {
//연결해제
if(!JDBCUtil.disconnect(conn, pstmt)) {
//연결해제 실패
System.err.println("log: Board selectOne disconnect fail");
datas.clear();//잔여데이터 삭제
}
System.out.println("log: Board selectOne end");
}
System.out.println("log: Board selectOne return datas");
return data;
}
}
'JSP (+JAVA Web)' 카테고리의 다른 글
[JSP] Servlet - 리스너 Listener (0) | 2024.09.02 |
---|---|
[JSP] DB에 있는 게시글 화면에 보여주기 (2) | 2024.08.31 |
[JSP] header, footer 넣기 2탄 (JSTL.ver) (0) | 2024.08.29 |
[JSP] 입력받은 이미지 파일 저장하기 (0) | 2024.08.27 |
[JSP] DB에서 이미지 파일 경로 받아서 화면에 띄우기 (0) | 2024.08.27 |