반응형
게시판 만들기 프로젝트 진행
게시판 등록 또는 조회 시 로그인하는 식으로 프로젝트를 진행하였다.
더보기
---------------- 자유 게시판 ----------------
1. 게시판 등록
2. 전체 게시판 조회
---------------- 전체 게시판 조회 ----------------
# 게시판 출력
1. 검색
2. 게시판 상세 조회
---------------- 검색 ----------------
1. 제목 검색
2. 내용 검색
3. 날짜 검색
---------------- 게시판 상세 조회 ----------------
1. 게시판 수정
2. 게시판 삭제
임의로 SQL 테이블을 작성하여 프로젝트를 진행한다.
기존의 방식에 페이징 방식과 로그인, 세션 저장 방식을 추가하여 진행하였다.
package controller;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import service.FreeService;
import service.UserService;
import util.ScanUtil;
import util.View;
import view.BoardPrint;
import vo.BoardVo;
import vo.UserVo;
public class MainController extends BoardPrint {
// sessionStorage은 하나 밖에 존재하지 않음
static public Map<String, Object> sessionStorage = new HashMap<>();
UserService userService = UserService.getInstance();
FreeService freeService = FreeService.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_INSERT:
view = boardInsert();
break;
case BOARD_LIST:
view = boardList();
break;
case LOGIN:
view = login();
break;
default:
break;
}
}
}
private View boardList() {
int page = 1;
if(sessionStorage.containsKey("page")) page = (int)sessionStorage.get("page");
int start = 1+(page-1)*3;
int end = page*3;
Map<String, Object> count_list = freeService.boardMax();
BigDecimal count_temp = (BigDecimal)count_list.get("COUNT");
int boardMax = count_temp.intValue();
List<Object> param = new ArrayList();
param.add(start);
param.add(end);
List<BoardVo> list = freeService.boardList(param);
for (BoardVo boardVo : list) {
System.out.println(boardVo);
}
System.out.println("1. 이전 페이지");
System.out.println("2. 다음 페이지");
int sel = ScanUtil.menu();
if(sel == 1) {
page = page-1;
if(page < 1) page = 1;
sessionStorage.put("page", page);
}
if(sel == 2) {
if(end < boardMax) page = page + 1;
sessionStorage.put("page", page);
}
return View.BOARD_LIST;
}
private View login() {
String id = ScanUtil.nextLine("ID : ");
String pass = ScanUtil.nextLine("PASS : ");
List<Object> param = new ArrayList();
param.add(id);
param.add(pass);
boolean loginPass = userService.login(param);
if (loginPass) {
UserVo user = (UserVo)sessionStorage.get("user");
System.out.println(user.getName() + " 님 환영합니다.");
} else {
System.out.println("1. 다시 로그인 하시겠습니까?");
System.out.println("2. 회원가입");
System.out.println("3. 홈");
int sel = ScanUtil.menu();
if(sel == 1) return View.LOGIN;
if(sel == 2) return View.LOGIN; // 회원가입 생략하여 프로그램 작성
if(sel == 3) return View.MAIN;
}
View view = (View)sessionStorage.get("view"); // 로그인 전의 화면을 찾아 view 에 넣어줌
if(view == null) return View.MAIN;
return view;
}
private View boardInsert() {
int mem_no;
if(sessionStorage.containsKey("user")) {
UserVo user = (UserVo) sessionStorage.get("user");
mem_no = user.getNo();
} else {
// 로그인이 안 됐을 때 로그인 페이지로 이동
sessionStorage.put("view", View.BOARD_INSERT);
return View.LOGIN;
}
String name = ScanUtil.nextLine("제목 : ");
String content = ScanUtil.nextLine("내용 : ");
// 이후 삽입 insert 문 제외하여 진행함
return View.BOARD_LIST;
}
private View home() {
// 출력
printHome();
int sel = ScanUtil.menu();
switch (sel) {
case 1:
return View.BOARD_INSERT;
case 2:
return View.BOARD_LIST;
case 3:
return View.MAIN;
default:
return View.MAIN;
}
}
}
package dao;
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
import vo.BoardVo;
public class FreeDao {
private static FreeDao instance = null;
private FreeDao() {
}
public static FreeDao getInstance() {
if (instance == null) {
instance = new FreeDao();
}
return instance;
}
JDBCUtil jdbc = JDBCUtil.getInstance();
public List<BoardVo> boardList(List<Object> param) {
String sql = "select *\r\n" +
"from (select rownum rn, a.* from \r\n" +
" (select no, name, content, \r\n" +
" mem_no, to_char(reg_date, 'YYYY/MM/DD') reg_date\r\n" +
" from java_freeboard\r\n" +
" order by no) a )\r\n" +
"where rn between ? and ?";
return jdbc.selectList(sql, param, BoardVo.class);
}
public Map<String, Object> boardMax() {
String sql = "select count(*) count \r\n" +
"from java_freeboard";
return jdbc.selectOne(sql);
}
}
package dao;
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
import vo.UserVo;
public class UserDao {
private static UserDao instance = null;
private UserDao() {
}
public static UserDao getInstance() {
if (instance == null) {
instance = new UserDao();
}
return instance;
}
JDBCUtil jdbc = JDBCUtil.getInstance();
public UserVo login(List<Object> param) {
String sql = "select * from java_user\r\n" +
"where id = ?\r\n" +
"and pass = ?";
return jdbc.selectOne(sql, param, UserVo.class);
}
}
package service;
import java.util.List;
import java.util.Map;
import dao.FreeDao;
import vo.BoardVo;
public class FreeService {
private static FreeService instance = null;
private FreeService() {
}
public static FreeService getInstance() {
if (instance == null) {
instance = new FreeService();
}
return instance;
}
FreeDao dao = FreeDao.getInstance();
public List<BoardVo> boardList(List<Object> param) {
return dao.boardList(param);
}
public Map<String, Object> boardMax() {
return dao.boardMax();
}
}
package service;
import java.util.List;
import controller.MainController;
import dao.UserDao;
import vo.UserVo;
public class UserService {
private static UserService instance = null;
private UserService() {
}
public static UserService getInstance() {
if (instance == null) {
instance = new UserService();
}
return instance;
}
UserDao dao = UserDao.getInstance();
public boolean login(List<Object> param) {
UserVo user = dao.login(param);
if(user != null) {
MainController.sessionStorage.put("user", user);
return true;
}
return false;
}
}
package util;
import java.util.Scanner;
public class ScanUtil {
// 스캐너를 손쉽게 사용할 수 있는 static 메서드를 가지고있음
static Scanner sc = new Scanner(System.in);
public static int menu() {
return nextInt("메뉴 : ");
}
public static String nextLine(String print) {
System.out.print(print);
return nextLine();
}
private static String nextLine() {
return sc.nextLine();
}
public static int nextInt(String print) {
System.out.print(print);
return nextInt();
}
private static int nextInt() {
while(true) {
try {
int result = Integer.parseInt(sc.nextLine());
return result;
}catch (NumberFormatException e) {
System.out.println("잘못 입력!!");
}
}
}
}
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 vo;
import java.util.Date;
public class BoardVo {
private int no;
private String name;
private String content;
private int mem_no;
private String reg_date;
// private Date reg_date2;
private String delyn;
// private String writer; // sql에서 writer로 같은 이름을 부여하여 가져온다면 이곳에서도 사용할 수 있음
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getMem_no() {
return mem_no;
}
public void setMem_no(int mem_no) {
this.mem_no = mem_no;
}
public String getReg_date() {
return reg_date;
}
public void setReg_date(String reg_date) {
this.reg_date = reg_date;
}
// public Date getReg_date2() {
// return reg_date2;
// }
// public void setReg_date2(Date reg_date2) {
// this.reg_date2 = reg_date2;
// }
public String getDelyn() {
return delyn;
}
public void setDelyn(String delyn) {
this.delyn = delyn;
}
@Override
public String toString() {
return "BoardVo [no=" + no + ", name=" + name + ", content=" + content + ", mem_no=" + mem_no + ", reg_date="
+ reg_date + "]";
}
}
package vo;
public class UserVo {
private String id;
private String pass;
private String name;
private String delyn;
private int no;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDelyn() {
return delyn;
}
public void setDelyn(String delyn) {
this.delyn = delyn;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
@Override
public String toString() {
return "UserVo [id=" + id + ", pass=" + pass + ", name=" + name + ", delyn=" + delyn + ", no=" + no + "]";
}
}
TIP
N:M 테이블의 내용을 처리하기 위해 따로 테이블을 생성하는 것이 편하다.
ex) 커피 판매 시 여러개를 구매 시
반응형
'자바' 카테고리의 다른 글
[Java 고급] 1장 Collection Framework와 List (1) | 2024.01.27 |
---|---|
[Java 초급] 28장 MVC 패턴6 : 영화 예매 (0) | 2024.01.10 |
[Java 초급] 26장 MVC 패턴4 : 도서 대여 시스템 (1) | 2024.01.08 |
[Java 초급] 25장 MVC 패턴3 : 커피 주문 시스템 (0) | 2024.01.08 |
[Java 초급] 24장 MVC 패턴2 : 게시판 만들기1 (0) | 2024.01.04 |