반응형
게시판 만들기 프로젝트 진행
아래의 메뉴로 구성된 프로젝트를 구현한다.
더보기
------------ HOME ------------
1. 게시판 전체 조회
2. 게시판 등록
3. 홈
----------- 전체 조회 -----------
전체 리스트 출력
1. 게시판 상세 보기
2. 홈
---------- 게시판 등록 ----------
게시글 이름 :
게시글 내용 :
작성자 :
-------- 게시판 상세조회 --------
1. 게시판 수정
2. 게시판 삭제
3. 게시판 리스트
4. 홈
---------- 게시판 수정 ----------
1. 제목
2. 내용
3. 전체
4. 취소
아래와 같이 DB 테이블과 데이터를 생성해놓는다.
최종적인 프로젝트 파일은 바로 하단에 접기로 기입해놓았다.
package controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import service.BoardService;
import util.ScanUtil;
import util.View;
import view.BoardPrint;
public class MainController extends BoardPrint {
// sessionStorage은 하나 밖에 존재하지 않음
static public Map<String, Object> sessionStorage = new HashMap<>();
BoardService boardService = BoardService.getInstance();
public static void main(String[] args) {
new MainController().start();
}
private void start() {
View view = View.MAIN;
while (true) {
switch (view) {
case MAIN:
view = home();
break;
case BOARD_LIST:
view = boardList();
break;
case BOARD_INSERT:
view = boardInsert();
break;
case BOARD_DETAIL:
view = boardDetail();
break;
case BOARD_DELETE:
view = boardDelete();
break;
case BOARD_UPDATE:
view = boardUpdate();
break;
default:
break;
}
}
}
private View boardUpdate() {
System.out.println("1. 제목");
System.out.println("2. 내용");
System.out.println("3. 전체");
System.out.println("4. 취소");
int sel = ScanUtil.nextInt("수정할 항목을 고르시오.");
if(sel == 4) return View.BOARD_DETAIL;
String name = null;
String content = null;
List<Object> param = new ArrayList();
if(sel == 1 || sel ==3) {
name = ScanUtil.nextLine("제목 >> ");
param.add(name);
}
if(sel == 2 || sel ==3) {
content = ScanUtil.nextLine("내용 >> ");
param.add(content);
}
int boardNo = (int) sessionStorage.get("boardNo");
param.add(boardNo);
boardService.boardUpdate(param, sel);
return View.BOARD_DETAIL;
}
private View boardDelete() {
String yn = ScanUtil.nextLine("삭제 하시겠습니까? (y/n) ");
if(yn.equalsIgnoreCase("n")) {
return View.BOARD_DETAIL;
}
else if(yn.equalsIgnoreCase("y")) {
int boardNo = (int) sessionStorage.get("boardNo");
List<Object> param = new ArrayList();
param.add(boardNo);
boardService.boardUpdate(param, 0);
}
else {
return View.BOARD_DELETE;
}
return View.BOARD_LIST;
}
private View boardDetail() {
int boardNo = (int) sessionStorage.get("boardNo");
Map<String, Object> board = boardService.boardDetail(boardNo);
printDetail(board);
printDetailMenu();
int sel = ScanUtil.nextInt("메뉴 선택 : ");
switch (sel) {
case 1:
return View.BOARD_UPDATE;
case 2:
return View.BOARD_DELETE;
case 3:
return View.BOARD_LIST;
case 4:
return View.MAIN;
default:
return View.BOARD_LIST;
}
}
private View boardInsert() {
System.out.println("----게시판 등록----");
String name = null;
String content = null;
String writer = null;
List<Object> param = new ArrayList();
name = ScanUtil.nextLine("게시글 이름 : ");
param.add(name);
content = ScanUtil.nextLine("게시글 내용 : ");
param.add(content);
writer = ScanUtil.nextLine("작성자 : ");
param.add(writer);
boardService.boardInsert(param);
return View.BOARD_LIST;
}
private View boardList() {
List<Map<String, Object>> list = boardService.boardList();
printBoardList(list);
printListMenu();
int sel = ScanUtil.nextInt("메뉴 선택 : ");
switch (sel) {
case 1:
int boardNo = ScanUtil.nextInt("게시판 번호 입력 : ");
sessionStorage.put("boardNo", boardNo);
return View.BOARD_DETAIL;
case 2:
return View.MAIN;
default:
return View.BOARD_LIST;
}
}
private View home() {
// 출력
printHome();
int sel = ScanUtil.nextInt("메뉴 선택 : ");
switch (sel) {
case 1:
return View.BOARD_LIST;
case 2:
return View.BOARD_INSERT;
case 3:
return View.MAIN;
default:
return View.MAIN;
}
}
}
package service;
import java.util.List;
import java.util.Map;
import dao.BoardDao;
public class BoardService {
private static BoardService instance = null;
private BoardService() {
}
public static BoardService getInstance() {
if (instance == null) {
instance = new BoardService();
}
return instance;
}
BoardDao dao = BoardDao.getInstance();
public List<Map<String, Object>> boardList() {
// db에서 자르지 않을 시 아래와 같은 방식으로 잘라줘야 함.
List<Map<String, Object>> list = dao.boardList();
for(Map<String, Object> map : list) {
String content = (String) map.get("CONTENT");
if(content.length() > 10) {
content = content.substring(0, 10) + ".....";
}
content = content.replace("\n", ""); // 세 종류를 다 넣어줘야 함.
content = content.replace("\r", "");
content = content.replace("\r\n", "");
map.put("CONTENT", content);
}
return list;
// return dao.boardList(); // 윗줄 전부 주석 후 이 줄만 사용해도 됨 >> db에서 자르지 않았을 경우 위와 같이 사용해야 함.
}
public Map<String, Object> boardDetail(int no) {
return dao.boardDetail(no);
}
public void boardUpdate(List<Object> param, int sel) {
dao.boardUpdate(param, sel);
}
public void boardInsert(List<Object> param) {
dao.boardInsert(param);
}
}
package dao;
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
public class BoardDao {
private static BoardDao instance = null;
private BoardDao() {
}
public static BoardDao getInstance() {
if (instance == null) {
instance = new BoardDao();
}
return instance;
}
JDBCUtil jdbc = JDBCUtil.getInstance();
public List<Map <String, Object>> boardList() {
String sql = "select no, name, substr(content, 0, 20) content, \r\n" +
"writer, to_char(reg_date, 'YYYY/MM/DD') reg_date\r\n" +
"from java_freeboard\r\n" +
"where delyn = 'N'";
return jdbc.selectList(sql);
}
public Map<String, Object> boardDetail(int no) {
String sql = "select no, name, content, \r\n" +
"writer, to_char(reg_date, 'YYYY/MM/DD') reg_date\r\n" +
"from java_freeboard\r\n" +
"where delyn = 'N'\r\n" +
"and no = " + no;
return jdbc.selectOne(sql);
}
public void boardUpdate(List<Object> list, int sel) {
// update java_freeboard
// set
// name = '수정1
// , content = '수정1'
// where no = 1;
// System.out.println("1. 제목");
// System.out.println("2. 내용");
// System.out.println("3. 전체");
String sql_front = "update java_freeboard"
+ " set ";
String format = "%s = ?";
String sql = sql_front;
if(sel == 0) {
sql += "DELYN = 'Y'";
}
if(sel == 1 || sel ==3) {
sql += String.format(format, "NAME"); // %s에 name이 들어감
}
if(sel ==2 || sel ==3) {
if(sel == 3 ) sql += ", ";
sql += String.format(format, "CONTENT");
}
sql += "WHERE NO = ?";
jdbc.update(sql, list);
}
public void boardInsert(List<Object> param) {
String sql = "insert into java_freeboard\r\n" +
"values (board_seq.nextval, ?, ?, ?, sysdate, 'N')";
jdbc.update(sql, param);
}
}
package view;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
public class BoardPrint {
public void printVar() {
System.out.println("========================");
}
public void printLn(int num) {
for(int i=0; i<num; i++) System.out.println();
}
public void printHome() {
printVar();
System.out.println("1. 게시판 전체 조회");
System.out.println("2. 게시판 등록");
System.out.println("3. 홈");
printLn(3);
printVar();
}
public void printBoardList(List<Map<String, Object>> list) {
System.out.println("번호\t제목\t내용\t\t\t작성일\t\t작성자");
for (Map<String, Object> map : list) {
BigDecimal no = (BigDecimal) map.get("NO"); // 오라클에서는 number 타입
String name = (String) map.get("NAME"); // 오라클에서는 varchar2 타입
String content = (String) map.get("CONTENT");
// Timestamp regDate = (Timestamp) map.get("REG_DATE"); // 오라클에서는 date 타입
String regDate = (String) map.get("REG_DATE"); // 오라클에서 char로 바꿔왔기에 string 타입으로 작성 가능
String writer = (String) map.get("WRITER");
// System.out.println(no.intValue()); // number에서 int 값만 꺼냄
System.out.println(no.intValue() + "\t" + name + "\t" + content + "\t" + regDate + "\t" + writer);
}
}
public void printListMenu() {
printVar();
System.out.println("1. 게시판 상세 보기");
System.out.println("2. 홈");
printLn(4);
printVar();
}
public void printDetailMenu() {
printVar();
System.out.println("1. 게시판 수정");
System.out.println("2. 게시판 삭제");
System.out.println("3. 게시판 리스트");
System.out.println("4. 홈");
printLn(2);
printVar();
}
public void printDetail(Map<String, Object> board) {
printVar();
BigDecimal no = (BigDecimal) board.get("NO");
String name = (String) board.get("NAME");
String content = (String) board.get("CONTENT");
String regDate = (String) board.get("REG_DATE");
String writer = (String) board.get("WRITER");
System.out.println("제목 : " + name);
System.out.println("번호 : " + no + "\t 작성일 : " + regDate + "\t 작성자 : " + writer);
System.out.println(content);
printVar();
}
}
package util;
public enum View {
MAIN, // 기본화면
BOARD_INSERT, // 게시판 등록
BOARD_LIST, // 게시판 전체 조회
BOARD_DETAIL, // 게시판 상세 보기
BOARD_UPDATE, // 게시판 수정
BOARD_DELETE // 게시판 삭제
}
반응형
'자바' 카테고리의 다른 글
[Java 초급] 26장 MVC 패턴4 : 도서 대여 시스템 (1) | 2024.01.08 |
---|---|
[Java 초급] 25장 MVC 패턴3 : 커피 주문 시스템 (0) | 2024.01.08 |
[Java 초급] 23장 MVC 패턴1, 회원가입 (2) | 2024.01.03 |
[Java 초급] 22.5장 테스트 (0) | 2024.01.02 |
[Java 초급] 22장 JDBC Utility 클래스 (0) | 2024.01.02 |