반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ObjectInputStream
- first-child
- StringWriter
- ID중복
- Daemon()
- include액션태그
- 메모리스트림
- 동기화
- isinterrupted()
- 스레드그룸
- 상관서브쿼리
- interrupted()
- String char[] 형변환
- first-of-child
- Linux세팅
- char[] String 형변환
- 상관 서브 쿼리
- sleep()메소드
- 리눅스셋팅
- 아이디중복
- 표현 언어
- InputDialog
- interrupt()
- MemoryStream
- ThreadGroup()
- StringReader
- 리눅스세팅
- include 지시자
- Linux셋팅
- include지시자
Archives
- Today
- Total
다연이네
[days04] 게시판 만들기 본문
반응형
1. 테이블만들고 시퀀스 생성 - Oracle에서 작업
create sequence SEQ_TBL_CSTVSBOARD;
create table TBL_CSTVSBOARD (
seq number not null primary key
, writer varchar2(20) not null
, pwd varchar2(20) not null
, email varchar2(100)
, title varchar2(200) not null
, writedate date default sysdate
, readed number default 0
, tag number(1) default 0 -- 0 text , 1 html
, content clob
);
2. DTO 생성 - BoardDTO ( 테이블 정보를 가지고 있음 )
위의 테이블의 컬럼들을 모두 변수로 선언한 후, default 생성자와 getter-setter를 준다.
package days04.board;
import java.util.Date;
//VO ==DTO == 자바빈즈 (Java Bean) == POJO
public class BoardDTO {
private int seq ;
private String writer;
private String pwd;
private String email;
private String title;
private Date writedate ;
private int readed ;
private int tag;
private String content;
//default constructor
public BoardDTO() {
super();
}
//getter setter
public int getSeq() {
return seq;
}
public void setSeq(int seq) {
this.seq = seq;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getWritedate() {
return writedate;
}
public void setWritedate(Date writedate) {
this.writedate = writedate;
}
public int getReaded() {
return readed;
}
public void setReaded(int readed) {
this.readed = readed;
}
public int getTag() {
return tag;
}
public void setTag(int tag) {
this.tag = tag;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
3. DAO 생성 - BoardDAO INTERFACE로 생성한 후, 해당 인터페이스를 implements 하는 클래스 생성 - BoardDAOImpl
package days04.board;
import java.sql.SQLException;
import java.util.ArrayList;
public interface BoardDAO { //인터페이스는 상수와 추상메소드만 들어가 있어야 함
//1. 모든 게시글 목록 반환하는 메소드 선언
ArrayList<BoardDTO> select() throws SQLException; //관련 예외 호출하는 놈에게 떠넘기기겠다
//1-1 해당 페이지의 게시글 목록 반환하는 메소드
ArrayList<BoardDTO> select(int currentPage, int numberPerPage) throws SQLException;
//매개변수 : 보고자 하는 페이지, 한 페이지에 뿌릴 개수
//2. 게시글 쓰기 메소드
int insert( BoardDTO dto) throws SQLException;
//3. 조회수 증가 메소드 선언
void increaseReaded(int seq)throws SQLException;
//4. 해당 게시글 상세 보기 메소드 선언
BoardDTO view(int seq) throws SQLException;
//5. 총 페이지 수를 반환하는 메소드 선언
int getTotalPages(int numberPerPage) throws SQLException;
//6. 검색 메소드 선언
ArrayList<BoardDTO> select(int currentPage, int numberPerPage, int searchCondition, String searchWord) throws SQLException;
//7. 검색된 결과의 총 페이지수를 반환하는 메소드 선언
int getTotalPages(int numberPerPage
, int searchCondition, String searchWord) throws SQLException;
//8. 게시글 삭제 메소드 선언
int delete(int seq) throws SQLException;
//select() : 모든 게시글 정보를 셀렉해서 어레이리스트에 담음
//
}
package days04.board;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.util.DBConn;
public class BoardDAOImpl implements BoardDAO {
private Connection con = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
//디폴트 생성자
public BoardDAOImpl() {
//this.con = DBConn.getConnection();
//이거 좋은코딩 아님, 결합성이 높은 코딩
//엔진고장나면 자동차 버리는 꼴
}
//1 생성자에 의해 의존성주입
public BoardDAOImpl(Connection con) { //커넥션 객체를 외부에서 주입받아 오기
this.con = con; //Connection 객체를 의존성 주입 (DI)
}//같은 커넥션을 여러번 생성하지 않겠다는 뜻
//2 또는 커넥션 객체의 set만 만들기
//setter에 의해 의존성 주입 (1이나 2 둘다 좋음)
public void setCon(Connection con) {
this.con = con;
}
@Override
public ArrayList<BoardDTO> select() throws SQLException {
//모든 게시글 가져오도록 처리
//모든 게시글 가져와 어레이리스트에 담아 리턴
String sql = "SELECT seq, title, writer, writedate, readed "
+ " FROM TBL_CSTVSBOARD "
+ " ORDER BY seq DESC ";
this.pstmt = this.con.prepareStatement(sql);
this.rs = this.pstmt.executeQuery();
ArrayList<BoardDTO> list = null;
int seq;
String title;
String writer;
Date writedate; //java.sql.Date
int readed;
BoardDTO dto = null;
if(rs.next()) {
list = new ArrayList<BoardDTO>();
do {
//글번호 글제목 작성자 작성일 조회수 만 뿌릴거다
seq = rs.getInt("seq");
title = rs.getString("title");
writer = rs.getString("writer");
writedate = rs.getDate("writedate");
readed = rs.getInt("readed");
dto = new BoardDTO();
dto.setSeq(seq);
dto.setTitle(title);
dto.setWriter(writer);
dto.setWritedate(writedate);
dto.setReaded(readed);
list.add(dto);
}while(rs.next());
}
this.rs.close();
this.pstmt.close();
return list; //레코드가 없으면 0을 돌림
}
@Override
public int insert(BoardDTO dto) throws SQLException {
// 매개변수가 왜 BoradDTO야?
//글쓰기 페이지에서 입력받은 값을 가지고 컨트롤러를 거쳐 BoardDTO dto객체를 만들것
//그럼 모든 정보를 가진 dto객체가 컨트롤러에서 만들어져 그걸 서비스 계층으로 넘겨지고
//실제 DAO 객체에까지 전달해짐 그래서 매개변수가 BoardDTO
//=> 글쓰기 작업할때 모든 입력값을 dto객체로 만들어 DAO.insert()전달
//왜이렇게 어렵게 만드냐 ? 나중을 위해서.. MVC패턴...
String sql ="INSERT INTO TBL_CSTVSBOARD "
+" (seq, writer, pwd, email, title, tag, content)"
+" VALUES(SEQ_TBL_CSTVSBOARD.NEXTVAL, ?, ?, ?, ? , ? ,? )";
this.pstmt = this.con.prepareStatement(sql);
this.pstmt.setString(1, dto.getWriter());
this.pstmt.setString(2, dto.getPwd());
this.pstmt.setString(3, dto.getEmail());
this.pstmt.setString(4, dto.getTitle());
this.pstmt.setInt(5, dto.getTag());
this.pstmt.setString(6, dto.getContent());
//execute하기 전에 ?????? 해결
int rowCount = this.pstmt.executeUpdate();
this.pstmt.close();
return rowCount;
}
@Override
public void increaseReaded(int seq) throws SQLException {
String sql = "UPDATE TBL_CSTVSBOARD "
+" SET readed = readed+1"
+" WHERE seq = ? ";
this.pstmt = this.con.prepareStatement(sql);
this.pstmt.setInt(1, seq);
this.pstmt.executeUpdate(); //rowCount안써도 됨 (예외떻어지면 예외처리 바로 하니깐)
this.pstmt.close();
}
@Override
public BoardDTO view(int seq) throws SQLException {
String sql = "SELECT seq, writer, title, content, readed, writedate "
+" FROM TBL_CSTVSBOARD "
+" WHERE seq = ? ";
this.pstmt = this.con.prepareStatement(sql);
this.pstmt.setInt(1, seq);
this.rs = this.pstmt.executeQuery();
BoardDTO dto = null;
if(rs.next()) {
dto = new BoardDTO();
dto.setSeq(rs.getInt("seq"));
dto.setWriter(rs.getString("writer"));
dto.setTitle(rs.getString("title"));
dto.setContent(rs.getString("content"));
dto.setReaded(rs.getInt("readed"));
dto.setWritedate(rs.getDate("writedate"));
}
this.rs.close();
this.pstmt.close();
return dto;
}
}
4. 서비스를 담당하는 SERVICE 객체 생성 - BoardService
package days04.board;
import java.sql.SQLException;
import java.util.ArrayList;
public class BoardService {
private BoardDAO dao = null;
//1. 생성자 주입(DI) - DAO 객체
public BoardService() {}
public BoardService(BoardDAO dao) {
this.dao = dao;
}
//2. setter 의존성 주입(DI) 생성자나 세터 둘중 하나만 하면 됨
// public void setDao(BoardDAO dao) {
// this.dao = dao;
// }
//게시글 쓰기
public int insertService(BoardDTO dto) {
//컨트롤러 호출해서 서비스 호출해서 dao 에서 작업 ...
//입력받은 정보가 BoardDTO에 담겨져서 서비스까지 넘어 온다
//1) 로그기록
//2) dao.insert()
//3) 암호화
//4) 작성자 포인트 1증가
//등 글쓰기 작업에 다른 작업이 붙을 수 있음
//1. 로그기록
System.out.println(">게시판 글쓰기 -> 로그 기록했다");
//2. dao.insert() => DAO가 필요하다 => 위에가서 선언
int rowCount = 0;
try {
rowCount = this.dao.insert(dto);
} catch (SQLException e) {
//e.printStackTrace();
System.out.println("> BoardService.insertService() 테스트 실패!!!");
}
//4. 포인트
System.out.println(">게시판 글쓰기 -> 암호화, 포인트 증가");
//나중에 모든 작업들을 트랜잭션 처리를 할 것이다 (ACID) => 서비스 클래스에 한다.
return rowCount;
}
//게시글 전체 목록
//=> 서비스는 모두 컨트롤러로 넘겨줄 거기 떄문에
public ArrayList<BoardDTO> selectService(){
ArrayList<BoardDTO> list = null;
try {
System.out.println("> 게시판 목록 -> 로그 기록했다.");
list= this.dao.select();//전체 게시글을 돌려줌, 얘 가보면 예외처리 떠넘기겠다고 되어 있어서 트라이 캐치해주기
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public BoardDTO viewService(int seq) {
BoardDTO dto = null;
//1. 조회수 1증가
//2. dto 얻어오는 코딩 필요 => 2개 작업을 나중에 트랜잭션 처리
try {
this.dao.increaseReaded(seq);//1
dto = this.dao.view(seq);//2
} catch (SQLException e) {
e.printStackTrace();
}
return dto;
}
//selectService -> 매개변수2개
public ArrayList<BoardDTO> selectService(int currentPage, int numberPerPage) {
ArrayList<BoardDTO> list = null;
try {
System.out.println("> 게시판 목록 -> 로그 기록했다.");
list = this.dao.select(currentPage,numberPerPage);
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
//pagingService -> 매개변수3개
public String pagingService(
int currentPage
, int numberPerPage
, int numberOfPageBlock) {
String pagingBlock = "\t\t ";
int totalPages=0;
int startOfPageBlock, endOfPageBlock;
try {
totalPages = this.dao.getTotalPages(numberPerPage); //이것도 여기서 클릭해서 만든 것
//밑3줄은 try~catch 후 Ex02에서 복붙한거
startOfPageBlock = (currentPage-1)/numberOfPageBlock*numberOfPageBlock+1;
endOfPageBlock = startOfPageBlock+numberOfPageBlock-1;
if(endOfPageBlock>totalPages) endOfPageBlock = totalPages;
//복붙 후
if(startOfPageBlock!=1) pagingBlock += " < ";
for (int i = startOfPageBlock; i <=endOfPageBlock; i++) {
pagingBlock += String.format(currentPage==i ? " [%d] ": " %d ", i);
}
if(endOfPageBlock!=totalPages) pagingBlock+=" > ";
} catch (SQLException e) {
e.printStackTrace();
}
//int numberOfPageBlock = 10;
return pagingBlock;
}
//selectService -> 매개변수 4개
public ArrayList<BoardDTO> selectService(
int currentPage, int numberPerPage
, int searchCondition, String searchWord) {
//위에서 매개변수 2개짜리 메소드 내용 복붙
ArrayList<BoardDTO> list = null;
try {
System.out.println("> 게시판 목록 -> 로그 기록했다.");
list = this.dao.select(
currentPage,numberPerPage
, searchCondition, searchWord ); //여기도 매개변수 두개 추가
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
//pagingService -> 매개변수5개
public String pagingService(
int currentPage
, int numberPerPage
, int numberOfPageBlock
, int searchCondition,
String searchWord) {
//위 pagingService 복사
String pagingBlock = "\t ";
int totalPages=0;
int startOfPageBlock, endOfPageBlock;
try {
totalPages = this.dao.getTotalPages(numberPerPage
,searchCondition, searchWord); //이거 두개 추가
//밑3줄은 try~catch 후 Ex02에서 복붙한거
startOfPageBlock = (currentPage-1)/numberOfPageBlock*numberOfPageBlock+1;
endOfPageBlock = startOfPageBlock+numberOfPageBlock-1;
if(endOfPageBlock>totalPages) endOfPageBlock = totalPages;
//복붙 후
if(startOfPageBlock!=1) pagingBlock += " < ";
for (int i = startOfPageBlock; i <=endOfPageBlock; i++) {
pagingBlock += String.format(currentPage==i ? " [%d] ": " %d ", i);
}
if(endOfPageBlock!=totalPages) pagingBlock+=" > ";
} catch (SQLException e) {
e.printStackTrace();
}
//int numberOfPageBlock = 10;
return pagingBlock;
}
public int deleteService(int seq) {
//실질 삭제 작업은 DAO가 하고
//이 안에서는 로그기록, 다른일 둥등
int rowCount=0;
//System.out.println("> 게시판 목록 -> 로그 기록했다");
try {
rowCount=this.dao.delete(seq); //try~catch는 DAOImp까지 모두 작성 후 묶기로
} catch (SQLException e) {
e.printStackTrace();
}
return rowCount;
}
/* public ArrayList<BoardDTO> selectService(
int currentPage, int numberPerPage
, int searchCondition, String searchWord) {
//위에서 매개변수 2개짜리 메소드 내용 복붙
ArrayList<BoardDTO> list = null;
try {
System.out.println("> 게시판 목록 -> 로그 기록했다.");
list = this.dao.select(
currentPage,numberPerPage
, searchCondition, searchWord ); //여기도 매개변수 두개 추가
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
*/
}
5. 모든 처리가 이루어지는 controller 생성 - BoardController
package days04.board;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import com.util.DBConn;
public class BoardController {
//원래는 아니지만 여기서 입력 처리 출력 다 한다
//!!!!!!!!!!!!!컨트롤러에서 스캐너써서 입력받는다~!!!!!!!!!!!!!!!!!!
//필드
private int selectedNumber=0; //선택된 변수 저장할 변수 선언
private Scanner scanner =null;
private BoardService service = null;
//생성자
public BoardController() {
this.scanner = new Scanner(System.in);
}
//생성자를 통해 주입
public BoardController(BoardService service) {
this();
this.service = service;
}
//setter를 통해서도 가능
public void setService(BoardService service) {
this.service = service;
}
public void start() {
while(true) {
메뉴출력();
메뉴선택();
메뉴처리();
}
}
//Test 클래스 Controller Service DAO ORACLE
//main() -> 컨트롤러.start() -> 새글쓰기() -> insertService(dto) -> int insert(dto) -> 저장
//이걸 나타낸 게 시퀀스 다이어그램 (어떤 객체에 어떤 메소드가 호출되어지는지 한눈에 알 수 있음)
private void 메뉴처리() {
switch (this.selectedNumber) {
case 1: //새글
새글쓰기();
break;
case 2: //목록
목록보기();
break;
case 3: //목록
상세보기();
break;
case 5: //목록
삭제하기();
break;
case 6: //목록
검색하기();
break;
case 7: //종료
프로그램종료();
break;
default:
break;
}
}
private void 삭제하기() {
System.out.print("> 삭제할 게시글의 번호(seq) 입력. "); //입력을 콤마로 나열할 수 있음
int seq = this.scanner.nextInt();
int rowCount = this.service.deleteService(seq); //삭제한 후에 영향받은 개수
if(rowCount>=1) {
System.out.printf("> (%s) 삭제 완료!!!\n", seq);
}
일시정지();
}//삭제하기()
private void 검색하기() {
//제목(1) 내용(2) 작성자(3) 제목+내용(4)
int searchCondition; //검색조건을 저장
System.out.print("> 검색 조건 선택 : 제목(1) 내용(2) 작성자(3) 제목+내용(4) ");
searchCondition = this.scanner.nextInt();
this.scanner.skip("\r\n");
System.out.print("> 검색어 입력. ");
String searchWord = this.scanner.nextLine(); //문자열 중간에 공백이 있으면 nextline으로 읽어야 함
//목록보기 코딩 다 복사해오기 (나중에는 한개만 만들면 됨)
System.out.print("> 현재 페이지 (currentPage) 번호 입력 ? ");
this.currentPage = this.scanner.nextInt();
ArrayList<BoardDTO> list = this.service.selectService(
currentPage, numberPerPage
,searchCondition, searchWord //얘네 두개 추가
);
System.out.println("\t\t\t\t 게시판 ");
System.out.println("--------------------------------------------------------------------------");
System.out.printf("%s \t %s \t %s \t\t %s \t\t %s \n"
,"글번호","글제목","글쓴이","작성일","조회수");
System.out.println("--------------------------------------------------------------------------");
if(list==null) {
System.out.println("검색결과 없음");
}else {
Iterator<BoardDTO> ir = list.iterator();
while (ir.hasNext()) {
BoardDTO dto = ir.next();
System.out.printf("%d\t%-30s\t%s\t%s\t%d\n"
,dto.getSeq(),dto.getTitle(),dto.getWriter(),dto.getWritedate(),dto.getReaded());
}
System.out.println("--------------------------------------------------------------------------");
String pagingBlock = this.service.pagingService(
this.currentPage
,this.numberPerPage
,this.numberOfPageBlock
,searchCondition //추가
,searchWord//추가
);
System.out.println(pagingBlock);
}//if
System.out.println("--------------------------------------------------------------------------");
일시정지();
}//검색하기
private void 상세보기() {
//원래는 게시글(제목)을 클릭해서 이동해야하는데 우린 클릭 못하니까 입력받는걸로
System.out.print("> 게시글 번호(seq) 입력. ");
int seq = this.scanner.nextInt();
//this.service.insertService(dto)//새글작성
//this.service.selectService(); //보여주기
//이 작업을 거꾸로 할 것
//이태까지는 서비스 만들고 컨트롤러 호출 했는데
//지금은 컨트롤러 -> 서비스 순서로 만들어가겠다
BoardDTO dto = this.service.viewService(seq); //이거 코딩하고 viewService 클릭해서 보드 서비스에 자동으로 메소드만들기
//seq -> dto 출력
if(dto == null) {
System.out.println(" 해당 게시글은 존재하지 않습니다. "); //ex) 보고있는데 삭제된 경우
return;
}
//그렇지 않으면 해당 게시글 출력
System.out.println("ㄱ. 글번호 : "+seq);
System.out.println("ㄴ. 작성자 : "+dto.getWriter());
System.out.println("ㄷ. 조회수 : "+dto.getReaded());
System.out.println("ㄹ. 글제목 : "+dto.getTitle());
System.out.println("ㅁ. 글내용 : "+dto.getContent());
System.out.println("ㅂ. 작성자 : "+dto.getWriter());
System.out.println("\n [수정] [삭제] [목록]");
일시정지();
}
//여기와서 수정 11/27
private int currentPage = 1;
private int numberPerPage=10; //15면 한 페이지에 15개씩 뿌리는 것 (게시글 개수)
private int numberOfPageBlock = 10; //페이징 처리시 숫자 개수(블록개수) 1 2 3 4 5 ... 10 >
private void 목록보기() {
System.out.print("> 현재 페이지 (currentPage) 번호 입력 ? ");
this.currentPage = this.scanner.nextInt();
//ArrayList<BoardDTO> list = this.service.selectService(); 이건 어제
ArrayList<BoardDTO> list = this.service.selectService(currentPage, numberPerPage); //오늘 일케 바꿈
//화면에
//원래는 뷰(View) - 출력담당에 넘겨줘서 출력해야하지만
//지금은 아니고 그냥 출략
System.out.println("\t\t\t 게시판 ");
System.out.println("--------------------------------------------------------------------------");
System.out.printf("%s\t%s\t%s\t%s\t%s\n"
,"글번호","글제목","글쓴이","작성일","조회수");
System.out.println("--------------------------------------------------------------------------");
Iterator<BoardDTO> ir = list.iterator();
while (ir.hasNext()) {
BoardDTO dto = ir.next();
System.out.printf("%d\t%-30s\t%s\t%s\t%d\n"
,dto.getSeq(),dto.getTitle(),dto.getWriter(),dto.getWritedate(),dto.getReaded());
}
System.out.println("--------------------------------------------------------------------------");
//System.out.println("\t\t\t [1] 2 3 4 5 6 7 8 9 10 >"); 페이징 블럭을 고정값으로 두지 말고 days05 -> days02 주자
String pagingBlock = this.service.pagingService( //여기서 pagingService 클릭해서 생성하기
this.currentPage
,this.numberPerPage
,this.numberOfPageBlock
);
System.out.println(pagingBlock);
System.out.println("--------------------------------------------------------------------------");
일시정지();
}
private void 프로그램종료() {
DBConn.close();
System.out.println("\t\t 프로그램 종료 ");
System.exit(-1);
}
private void 새글쓰기() {
System.out.println("> writer, pwd, email, title, tag, content 입력 ");
String [] datas = this.scanner.next().split(",");
BoardDTO dto = new BoardDTO();
dto.setWriter( datas[0]);
dto.setPwd(datas[1]);
dto.setEmail(datas[2]);
dto.setTitle(datas[3]);
dto.setTag(Integer.parseInt(datas[4]));
dto.setContent(datas[5]);
int rowCount = this.service.insertService(dto);
if(rowCount==1)
System.out.println("> 새글 쓰기 완료!!! ");
일시정지();
}
private void 일시정지() {
System.out.println(" \t\t 계속하려면 엔터치세요. ");
try {
System.in.read();
System.in.skip(System.in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
private void 메뉴선택() {
System.out.print("> 메뉴를 선택하세요. ");
this.selectedNumber = this.scanner.nextInt();
//유효성검사 스킵
}
private void 메뉴출력() {
String [] menus = {
"새글", "목록", "보기", "수정", "삭제", "검색", "종료"
};
System.out.println("[ 메뉴 ]");
for (int i = 0; i < menus.length; i++) {
System.out.printf("%d. %s\t ",i+1, menus[i]);
}
System.out.println();
}
}
6. main 메소드가 있는 클래스 생성
package days04.board;
import java.sql.Connection;
import com.util.DBConn;
public class BoardTest {
public static void main(String[] args) {
Connection con = DBConn.getConnection();
BoardDAO dao = new BoardDAOImpl(con); //생성자DI
BoardService service = new BoardService(dao ); //생성자DI
BoardController controller = new BoardController(service); //생성자DI
controller.start();// start 메소드로 프로그램 시작
//배다연,1234,bae@iei.or,제목없음,0,내용없음
}
}
//컨트롤키 눌러서 이동
반응형
'JDBC' 카테고리의 다른 글
[days05] 저장 프로시저 (stored procedure)를 사용하는 CallableStatement 예제 (0) | 2020.11.29 |
---|---|
[days05] ResultSet 결과물에 대한 정보 추출, 사용 예제, ResultSetMetaData (0) | 2020.11.29 |
[days04] 월급 금액 등급별로 사원 정렬해서 출력하기 (0) | 2020.11.26 |
[days04] DTO, VO, DAO, 자바빈즈, POJO 용어 정리 (0) | 2020.11.26 |
[days03] PreparedStatement 사원 조회 (0) | 2020.11.25 |
Comments