MVC
- MVC : Model - View - Controller의 약자
- 코드의 유지보수나 확장성에 유리함
package ch20.oracle.sec05.app.dto;
import java.util.Date;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class Board {
private int bno;
private String btitle;
private String bcontent;
private String bwriter;
private Date bdate;
}
package ch20.oracle.sec05.app;
import java.util.Scanner;
import ch20.oracle.sec05.app.dto.Board;
import ch20.oracle.sec05.app.service.BoardService;
public class BoardConnection {
static Scanner scanner = new Scanner(System.in);
static BoardService boardService = new BoardService();
public static void main(String[] args) {
while(true) {
System.out.println("1.게시글목록 | 2.게시글작성 | 3.게시글조회 | 4.게시글수정 | 5.게시글삭제 | 6.종료");
System.out.print("원하는 작업은 ?");
String choice = scanner.nextLine();
switch(choice) {
case "1":
list(); // 게시글 목록
break;
case "2":
insert(); // 게시글 입력
break;
case "3":
search(); // 게시글 조회
break;
case "4":
update(); // 게시글 수정
break;
case "5":
delete(); // 게시글 삭제
break;
case "6":
boardService.close();
System.out.println("프로그램 종료");
System.exit(0);
break;
default:
System.out.println("입력이 잘못되었습니다");
break;
}
}
}
private static void update() {
try {
System.out.print("수정할 게시글 번호 : ");
int bno = Integer.parseInt(scanner.nextLine());
boolean found = false;
for(Board board : boardService.list()) {
if (board.getBno() == bno) {
found = true;
System.out.print("수정할 게시글 제목 : ");
String title = scanner.nextLine();
System.out.print("수정할 게시글 내용 : ");
String content = scanner.nextLine();
boardService.update(title, content, bno);
break;
}
}
if(!found) {
System.out.println("해당 게시글이 존재하지 않습니다. ");
return;
}
} catch (Exception e) {
System.out.println("수치만 입력해주세요");
return;
}
}
private static void delete() {
System.out.print("삭제할 게시글 번호 : ");
int bno = Integer.parseInt(scanner.nextLine());
boardService.delete(bno);
}
private static void insert() {
System.out.print("게시글 제목 : ");
String title = scanner.nextLine();
System.out.print("게시글 내용 : ");
String content = scanner.nextLine();
System.out.print("게시글 작성자 : ");
String writer = scanner.nextLine();
//객체생성
Board board = Board.builder()
.btitle(title)
.bcontent(content)
.bwriter(writer)
.build();
//등록
boardService.insert(board);
}
private static void search() {
//입력값 검증
try {
System.out.print("검색할 게시글 번호 : ");
int bno = Integer.parseInt(scanner.nextLine());
boolean found = false;
for(Board board : boardService.list()) {
if (board.getBno() == bno) {
found = true;
break;
}
}
if(!found) {
System.out.println("해당 게시글이 존재하지 않습니다. ");
return;
}
Board board = boardService.detailList(bno);
System.out.println(board.getBno() + " : " + board.getBtitle() + " : " +
board.getBcontent() + " : " + board.getBwriter() + " : " + board.getBdate());
} catch (Exception e) {
System.out.println("수치만 입력해주세요");
return;
}
}
private static void list() {
for(var board : boardService.list()) {
System.out.println(board.getBno() + " : " + board.getBtitle() + " : " +
board.getBcontent() + " : " + board.getBwriter() + " : " + board.getBdate());
}
}
}
package ch20.oracle.sec05.app.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import ch20.oracle.sec05.app.dto.Board;
public class BoardDAO {
Connection conn = null;
// 생성자 (등록)
public BoardDAO() {
try {
//JDBC Driver 등록
Class.forName("oracle.jdbc.OracleDriver");
//연결하기
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521/XE",
"scott",
"1004"
);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//close
public void close() {
if(conn != null) {
try {
//연결 끊기
conn.close();
} catch (SQLException e) {}
}
}
//목록
public List<Board> list() {
List<Board> list = new ArrayList<>();
try {
//SQL 구문 객체 생성한다
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM Boards");
//select 구문을 실행한다
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
//객체 생성 하여 배열에 추가한다
list.add(Board.builder()
.bno(rs.getInt("bno"))
.btitle(rs.getString("btitle"))
.bcontent(rs.getString("bcontent"))
.bwriter(rs.getString("bwriter"))
.bdate(rs.getDate("bdate"))
.build()
);
}
rs.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
//상세보기
public Board detailList(int bno) {
Board result = null;
try {
PreparedStatement selectStmt = conn.prepareStatement(
"SELECT * FROM boards WHERE bno=?");
selectStmt.setInt(1, bno);
ResultSet rs = selectStmt.executeQuery();
if (rs.next()) {
result = Board.builder()
.bno(rs.getInt("bno"))
.btitle(rs.getString("btitle"))
.bcontent(rs.getString("bcontent"))
.bwriter(rs.getString("bwriter"))
.bdate(rs.getDate("bdate"))
.build();
}
selectStmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
//등록
public Board insert(Board board) {
try {
//SQL 구문 객체 생성한다
PreparedStatement insertStmt = conn.prepareStatement(
"insert into boards (bno, btitle, bcontent, bwriter, bdate) "
+ "values(seq_bno.nextval, ?, ?, ?, sysdate)");
//인자값 설정
insertStmt.setString(1, board.getBtitle());
insertStmt.setString(2, board.getBcontent());
insertStmt.setString(3, board.getBwriter());
//SQL 구문 실행
insertStmt.executeUpdate();
insertStmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return board;
}
//수정
public void update(Board board) {
try {
//SQL 구문 객체 생성한다
PreparedStatement updateStmt = conn.prepareStatement(
"UPDATE boards "
+ "SET btitle = ?, "
+ "bcontent = ? "
+ "WHERE bno= ?");
//인자값 설정
updateStmt.setString(1, board.getBtitle());
updateStmt.setString(2, board.getBcontent());
updateStmt.setInt(3, board.getBno());
updateStmt.executeUpdate();
updateStmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//삭제
public void delete(int bno) {
try {
//SQL 구문 객체 생성한다
PreparedStatement deleteStmt = conn.prepareStatement(
"delete from boards WHERE bno= ?");
//인자값 설정
deleteStmt.setInt(1, bno);
deleteStmt.executeUpdate();
deleteStmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package ch20.oracle.sec05.app.service;
import java.util.List;
import ch20.oracle.sec05.app.dao.BoardDAO;
import ch20.oracle.sec05.app.dto.Board;
public class BoardService {
private BoardDAO dao = new BoardDAO();
public List<Board> list() {
return dao.list();
}
public Board detailList(int bno) {
return dao.detailList(bno);
}
public Board insert(Board board) {
return dao.insert(board);
}
public void update(String btitle, String bcontent, int bno) {
dao.update(Board.builder().bno(bno).btitle(btitle)
.bcontent(bcontent).build());
}
public void delete(int bno) {
dao.delete(bno);
}
public void close() {
dao.close();
}
}