728x90
프로젝트 만들 때 구상법
DB테이블 생성 -> DTO생성 -> DAO 생성 -> Controller(Servlet) 생성 -> View(JSP) 파일 생성
1. DB 테이블 생성
1-1. 메모장에 들어갈 데이터: 글번호(no), 제목(title), 내용(content), 작성일(wdate)
create table Memo(
no number(10) primary key,
title varchar2(50) not null,
content varchar(1000) not null,
wdate date default sysdate not null
);
1-2. 자동 글번호 생성을 위한 시퀀스 생성 및 테스트를 위한 더미데이터 생성해주기
create sequence seq_Memo_no;
insert into Memo values(seq_Memo_no.nextval,'더미제목','내용',default);
2.DTO 생성하기
: DB에서 생성한 객체들을 게터세터로 묶어줌
memo.mvcboard 패키지 생성 -> MemoDTO.java 생성
package memo.mvcboard;
import model1.board.BoardDTO;
public class MemoDTO {
private int no;
private String title;
private String content;
private java.sql.Date wdate;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
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 java.sql.Date getWdate() {
return wdate;
}
public void setWdate(java.sql.Date wdate) {
this.wdate = wdate;
}
}
3. DAO 생성 (CRUD 역할을 할 메서드 생성)
package memo.mvcboard;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import common.DBConnPool;
import model2.mvcboard.MVCBoardDTO;
public class MemoDAO extends DBConnPool{
//DB Connection
public MemoDAO() {
super();
}
//글의 갯수
public int selectCount(Map<String,Object> map) {
int totalCount=0;
String query="select count(*) from Memo ";
if(map.get("searchWord")!=null) {
query += " WHERE " + map.get("searchField") + " "
+ " LIKE '%" + map.get("searchWord") + "%'";
}
try {
stmt=con.createStatement();
rs=stmt.executeQuery(query);
rs.next();
totalCount=rs.getInt(1);
} catch (Exception e) {
System.out.println("메모 갯수를 구하는 중 예외 발생");
e.printStackTrace();
}
return totalCount;
}
//글목록 with paging
public List<MemoDTO> selectListPage(Map<String,Object> map){
List<MemoDTO> board = new ArrayList<MemoDTO>(); //board가 목록임
String query="select * from ( "
+ " select tb.*, rownum rnum from ( "
+ " select * from Memo ";
//검색한 경우 추가
if(map.get("searchWord")!=null) {
query+=" where "+map.get("searchField")+""
+ " like '%"+map.get("searchWord")+"%'";
}
query+=" order by no desc "
+ " ) tb "
+ " ) "
+ " where rnum between ? and ?";
// System.out.println(query);
try { //select한 결과를 dto에 담음
psmt=con.prepareStatement(query);
psmt.setString(1, map.get("start").toString());
psmt.setString(2, map.get("end").toString());
rs=psmt.executeQuery();
while(rs.next()) {
MemoDTO dto=new MemoDTO();
dto.setNo(rs.getInt("no"));
dto.setTitle(rs.getString("title"));
dto.setContent(rs.getString("content"));
dto.setWdate(rs.getDate("wdate"));
board.add(dto);
}
}catch(Exception e) {
e.printStackTrace();
}
return board; //리스트값 리턴
}
// 주어진 일련번호에 해당하는 게시물을 DTO에 담아 반환합니다.
public MemoDTO selectView(String no) {
MemoDTO dto = new MemoDTO(); // DTO 객체 생성
String query = "SELECT * FROM Memo WHERE no=?"; // 쿼리문 템플릿 준비
try {
psmt = con.prepareStatement(query); // 쿼리문 준비
psmt.setString(1, no); // 인파라미터 설정
rs = psmt.executeQuery(); // 쿼리문 실행
if (rs.next()) { // 결과를 DTO 객체에 저장
dto.setNo(rs.getInt("no"));
dto.setTitle(rs.getString("title"));
dto.setContent(rs.getString("content"));
dto.setWdate(rs.getDate("wdate"));
}
}
catch (Exception e) {
System.out.println("메모 상세보기 중 예외 발생");
e.printStackTrace();
}
return dto; // 결과 반환
}
// 게시글 데이터를 받아 DB에 추가합니다(파일 업로드 지원). DTO타입으로 받아 옴
public int insertWrite(MemoDTO dto) {
int result = 0;
try {
// System.out.println("======================"+dto.getTitle()); //디버깅
String query = "INSERT INTO Memo ( "
+ " no, title, content, wdate ) "
+ " VALUES ( "
+ " seq_board_num.NEXTVAL,?,?,default )";
//DTO에서 하나씩 꺼내와서 값을 넣어줌
psmt = con.prepareStatement(query);
psmt.setString(1, dto.getTitle());
psmt.setString(2, dto.getContent());
result = psmt.executeUpdate();
}
catch (Exception e) {
System.out.println("게시물 입력 중 예외 발생");
e.printStackTrace();
}
return result;
}
// 게시글 데이터를 받아 DB에 저장되어 있던 내용을 갱신합니다(파일 업로드 지원).
public int updatePost(MemoDTO dto) {
System.out.println("DAO================" + dto.getTitle());
System.out.println("DAO=nononono===============" + dto.getNo());
int result = 0;
try {
// 쿼리문 템플릿 준비
String query = "UPDATE memo"
+ " SET title=?, content=?"
+ " WHERE no=?";
// 쿼리문 준비
psmt = con.prepareStatement(query);
psmt.setString(1, dto.getTitle());
psmt.setString(2, dto.getContent());
psmt.setInt(3, dto.getNo());
// 쿼리문 실행
result = psmt.executeUpdate();
System.out.println(psmt);
}
catch (Exception e) {
System.out.println("게시물 수정 중 예외 발생");
e.printStackTrace();
}
return result;
}
//게시물 삭제
public int deletePost(String no) {
System.out.println("DAO===================="+no);
int result = 0;
try {
//delete는 Primary키만 있으면 삭제가 가능하기 때문에 키를 1개만 가져옴
String query = "DELETE FROM Memo WHERE no=? ";
psmt = con.prepareStatement(query);
psmt.setString(1,no);
result = psmt.executeUpdate();
}
catch (Exception e) {
System.out.println("게시물 삭제 중 예외 발생");
e.printStackTrace();
}
return result;
}
}
여기까지 DAO, DTO 작성 후 다음 글에서 Controllor 작성을 올리겠습니다
728x90
'Programming > Java' 카테고리의 다른 글
| [spring data jpa] Native Query를 이용한 Join연산 (0) | 2023.09.05 |
|---|---|
| [Java] Builder pattern -이해 및 사용방법 (0) | 2023.08.31 |
| Java soket,dialog,button을 활용한 채팅창 만들기 (0) | 2023.07.17 |
| Java JPanel 이용한 막대차트, 꺾은선그래프, 파이차트 만들기 (0) | 2023.07.13 |
| Java StringTokenizer (0) | 2023.07.07 |