Dev/JSP & Servlet

JSP 게시판(2) - DTO, DAO 생성

창문닦이 2019. 2. 25. 16:43

게시판 기능 구현

1.insert(작성) 2.select(조회) 3.update(수정) 4.delete(삭제)

(이 네가지 기능을 CRUD 라고 함. 이 기본적인 기능을 제공하는 게시판을 만들고자 한다. )

게시판 페이지 구성

list.jsp 게시판리스트

article.jsp 각각의 게시물 하나를 보여주는 페이지

update.jsp 게시물 수정

created.jsp 게시물 작성

Style sheet 따로 만들어서 적용할 것 (이 파일안에 각각의 jsp파일에 적용되는 css를 생성), JavaScript 별도 파일로 적용하였다

CSS에서의 스타일을 적용할때 생성한 이름 : ‘.’ 과 ‘#’ 의 차이점

# 세부개념 . 큰개념

태그에서 설정한 id나 class 속성에 따라 스타일을 지정한다.

id 에 줄 경우 아래처럼 #을 맨 앞에 붙여 사용하며, 원칙적으로 하나의 객체에만 적용한다

#아이디{ 속성1:속성값; 속성2:속성값; }

class에 줄 경우 아래처럼 .을 맨 앞에 붙여 사용하며, 여러 객체에 적용한다.

.클래스명{ 속성1:속성값; 속성2:속성값; }

게시판 만들기 

1. DB에 테이블생성

2. DTO 생성 (dto의 변수명 = 웹페이지에서의 변수명 = db에서의 컬럼명 일치하면 액션태그로 데이터입력시 잘 진행됨!)

3. DAO 생성

4. JSP페이지 생성

 

1. 게시판 테이블 만들기(BOARD TABLE)

게시판 리스트의 하나의 행을 어떻게 구성할 것인지 모델을 만들어 테이블을 생성한다.

[게시번호 /제목/ 작성자/ 작성일/ 조회수]

CREATE TABLE BOARD

(NUM NUMBER(9) PRIMARY KEY,

NAME  VARCHAR2(20) NOT NULL,

PWD VARCHAR2(10) NOT NULL,

EMAIL VARCHAR2(50),

SUBJECT VARCHAR2(50) NOT NULL,

CONTENT VARCHAR2(4000) NOT NULL ,

IPADDR VARCHAR2(20),

HITCOUNT NUMBER(9)

CREATED DATE); 

 

 

2. DTO CLASS 생성(BoardDTO)

package com.board;

public class BoardDTO {

 

private int num; //게시글 고유번호

private String name; //작성자

private String pwd; //비밀번호

private String email; //이메일

private String subject; //제목

private String content; //내용

private String ipAddr; //IP주소

private String created; //작성일

private int hitCount; //조회수

 

GETTER, SETTER 작성

}

2. DAO CLASS 생성(BoardDAO)

public class BoardDAO {

 

//의존성주입

private Connection conn;

public BoardDAO(Connection conn){

this.conn = conn;

}

 

//num의 max값 구하기

public int getMaxNum(){

 

int maxNum = 0;

PreparedStatement pstmt =null;

ResultSet rs = null;

String sql;

 

try {

 

sql = "select nvl(max(num),0) from board " ;

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();

if(rs.next()){

maxNum = rs.getInt(1);

}

rs.close();

pstmt.close();

 

} catch (Exception e) {

System.out.println(e.toString());

}

return maxNum;

}

 

//게시판 입력

public int insertData(BoardDTO dto){

 

int result =0;

PreparedStatement pstmt = null;

String sql;

try {

sql = "insert into board (num,name,pwd,email,subject,content,ipaddr,hitCount,created) ";

sql += "values (?,?,?,?,?,?,?,0,sysdate) ";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, dto.getNum());

pstmt.setString(2, dto.getName());

pstmt.setString(3, dto.getPwd());

pstmt.setString(4, dto.getEmail());

pstmt.setString(5, dto.getSubject());

pstmt.setString(6, dto.getContent());

pstmt.setString(7, dto.getIpAddr());

 

result = pstmt.executeUpdate();

pstmt.close();

 

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

 

 

//전체데이터 출력(페이지마다 개수 제한)

public List<BoardDTO> getLists(int start, int end, String searchKey, String searchValue){

//rownum을 매개변수로 할당해서 해당범위만 리스트로 출력

 

List<BoardDTO> lists = new ArrayList<BoardDTO>();

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql;

try {

searchValue = "%" + searchValue + "%";

 

sql = "select * from ( ";

sql += "select rownum rnum, data.* from ( ";

sql += "select num,name,subject,hitCount, ";

sql += "to_char(created,'YYYY-MM-DD') created ";

sql += "from board where " +searchKey+ " like ? ";

sql += "order by num desc) data) ";

sql += "where rnum >= ? and rnum <=? ";

 

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, searchValue);

pstmt.setInt(2, start);

pstmt.setInt(3, end);

rs = pstmt.executeQuery();

 

while(rs.next()){

 

BoardDTO dto = new BoardDTO();

dto.setNum(rs.getInt("num"));

dto.setName(rs.getString("name"));

dto.setSubject(rs.getString("subject"));

dto.setHitCount(rs.getInt("hitCount"));

dto.setCreated(rs.getString("created"));

 

lists.add(dto);

}

rs.close();

pstmt.close();

 

} catch (Exception e) {

System.out.println(e.toString());

}

return lists;

}

 

//전체데이터의 갯수 카운팅

public int getDataCount(String searchKey, String searchValue){

 

int totalDataCount = 0;

PreparedStatement pstmt =null;

ResultSet rs = null;

String sql;

 

try {

 

//검색어 포함하는 내용을 다출력하게 하기 위해 %붙임

searchValue = "%" + searchValue + "%";

sql = "select nvl(count(*),0) from board ";

sql += "where " + searchKey + " like ? ";

//searchKey는 셋중에하나 작성자,제목,내용

pstmt= conn.prepareStatement(sql);

pstmt.setString(1, searchValue);

 

rs = pstmt.executeQuery();

if(rs.next())

totalDataCount = rs.getInt(1);

 

rs.close();

pstmt.close();

 

} catch (Exception e) {

System.out.println(e.toString());

}

return totalDataCount;

}

 

//num으로 조회한 데이터

public BoardDTO getReadData(int num){

BoardDTO dto = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql;

 

try {

 

sql = "select num, name, pwd, email, subject, content, ipAddr, hitCount, created ";

sql += "from board where num = ?";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, num);

rs = pstmt.executeQuery();

 

if(rs.next()){

 

dto = new BoardDTO();

dto.setNum(rs.getInt("num"));

dto.setName(rs.getString("name"));

dto.setPwd(rs.getString("pwd"));

dto.setEmail(rs.getString("email"));

dto.setSubject(rs.getString("subject"));

dto.setContent(rs.getString("content"));

dto.setIpAddr(rs.getString("ipAddr"));

dto.setHitCount(rs.getInt("hitCount"));

dto.setCreated(rs.getString("created"));

}

rs.close();

pstmt.close();

 

} catch (Exception e) {

System.out.println(e.toString());

}

return dto;

}

 

//조회수 증가

public int updateHitCount(int num){

 

int result = 0;

PreparedStatement pstmt = null;

String sql;

 

try {

sql = "update board set hitCount=hitCount+1 ";

sql += "where num=?";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, num);

result = pstmt.executeUpdate();

pstmt.close();

 

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

 

//게시판 수정

public int updateData(BoardDTO dto){

 

int result = 0;

PreparedStatement pstmt = null;

String sql;

 

try {

 

sql = "update board set name=?, pwd=?, email=?, subject=?,";

sql += "content=? where num=?";

 

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, dto.getName());

pstmt.setString(2, dto.getPwd());

pstmt.setString(3, dto.getEmail());

pstmt.setString(4, dto.getSubject());

pstmt.setString(5, dto.getContent());

pstmt.setInt(6, dto.getNum());

 

result = pstmt.executeUpdate();

 

pstmt.close();

 

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

 

//게시판 삭제

public int deleteData(int num){

int result = 0;

PreparedStatement pstmt = null;

String sql;

try {

sql= "delete board where num=? ";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, num);

result = pstmt.executeUpdate();

pstmt.close();

 

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

}