res 폴더 ( resource 폴더 )
--------------------------------------------------------------------------------------------------------
properties
# 이 줄은 주석 처리 줄 입니다.
# properties 파일을 작성하는 방법은
# key값=value값 과 같은 모양으로 만듭니다.
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=Aurora
pass=java
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 이 문서는 ibatis 의 환경 설정용 xml 문서 입니다. -->
<!-- pc 가 문서설정해줌 ibatis 라이브러리에 설정을 가져옴 -->
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sl-map-config-2.dtd">
<!-- 환경설정 -->
<sqlMapConfig>
<!--
DB와 연결하는 정보를 properties 파일에 설정해 놓고
이 properties 파일의 내용을 읽어올 수 있도록 설정한다.
-->
<properties resource="dbinfo.properties"/>
<!--
각각의 sqlMap 파일의 namespace와 아이디 속성값을 연결해서 실행할 쿼리문을 선택한다.
-->
<settings useStatementNamespaces="true" />
<!--
쿼리문에서 사용할 VO객체는 패키지 이름을 포함한 전체 이름을 사용해야 하는데
그렇게 되면 문장이 너무 길어질 수 있다.
그래서 전체 이름 대신 사용할 alias 를 설정할 수 있다.
형식 : <typeAlias alias = "alias명" type="클래스의 전체이름" />
-->
<typeAlias alias="lprodVo" type="kr.or.ddit.basic.LprodVO"/>
<typeAlias alias="memVo" type="kr.or.ddit.member.vo.MemberVO"/>
<typeAlias alias="boardVo" type="kr.or.ddit.vo.JdbcBoardVO"/>
<!-- DB와 연결을 처리하는 부분 -->
<transactionManager type = "JDBC">
<dataSource type="SIMPLE">
<property name ="JDBC.Driver" value="${driver}"/>
<property name ="JDBC.ConnectionURL" value="${url}"/>
<property name ="JDBC.Username" value="${user}"/>
<property name ="JDBC.Password" value="${pass}"/>
</dataSource>
</transactionManager>
<!-- 실행할 SQL 문을 등록한다. -->
<!--
실행할 SQL문을 xml 문서로 따로 작성한 후 그 xml 문서를 아래와 같이 등록하면 된다.
형식) <sqlMap resource="경로명/파일명.xml"/>
-->
<sqlMap resource="kr/or/ddit/member/ibatis/board.xml"/>
경로가 package 에 없으면 오류가 난다.
</sqlMapConfig>
-----------------------------------------------------------------------------------------------------
package kr.or.ddit.vo;
public class JdbcBoardVO {
private int board_no;
private String board_title;
private String board_writer;
private String board_date;
private int board_cnt;
private String board_content;
public int getBoard_no() {
return board_no;
}
public void setBoard_no(int board_no) {
this.board_no = board_no;
}
public String getBoard_title() {
return board_title;
}
public void setBoard_title(String board_title) {
this.board_title = board_title;
}
public String getBoard_writer() {
return board_writer;
}
public void setBoard_writer(String board_writer) {
this.board_writer = board_writer;
}
public String getBoard_date() {
return board_date;
}
public void setBoard_date(String board_date) {
this.board_date = board_date;
}
public int getBoard_cnt() {
return board_cnt;
}
public void setBoard_cnt(int board_cnt) {
this.board_cnt = board_cnt;
}
public String getBoard_content() {
return board_content;
}
public void setBoard_content(String board_content) {
this.board_content = board_content;
}
}
-----------------------------------------------------------------------------------------------------
package kr.or.ddit.util;
import java.io.IOException;
import java.io.Reader;
import java.nio.charset.Charset;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class BuildedSqlMapClient {
private static SqlMapClient smc;
static {
Reader rd = null;
try {
Charset charset = Charset.forName("UTF-8");
Resources.setCharset(charset);
rd = Resources.getResourceAsReader("sqlMapConfig.xml");
smc = SqlMapClientBuilder.buildSqlMapClient(rd);
} catch (IOException e) {
System.out.println("SqlMapClient객체 생성 실패~~~");
e.printStackTrace();
} finally {
if(rd!=null) try { rd.close(); }catch (IOException e2) { }
}
}
public static SqlMapClient getSqlMapClient() {
return smc;
}
}
----------------------------------------------------------------------------------------------------
service
package kr.or.ddit.board.service;
import java.util.List;
import kr.or.ddit.vo.JdbcBoardVO;
public interface IJdbcBoardService {
/**
* JdbcBoardVO 에 담겨진 자료를 DB 에 insert 하는 메서드
*
* @param boardVo DB에 insert 할 자료가 저장될 JdbcBoardVO 객체
* @return 작업성공 : 1 작업 실패 : 0
*/
public int insertBoard(JdbcBoardVO boardVo);
/**
*
* 게시글 번호를 매개값으로 받아서 그 게시글 정보를 삭제하는 메서드
* @param boardNo 삭제할 게시글 번호
* @return 작업성공 : 1 작업실패 : 0
*/
public int deleteBoard(int boardNo);
/**
* 하나의 JdbcBoardVO 자료를 이용하여 DB에 update 하는 메서드
*
* @param boardVo update 할 게시글 정보가 저장될 JdbcBoardVO 객체
* @return 작업성공 : 1 , 작업실패 : 0
*/
public int updateBoard(JdbcBoardVO boardVo);
/**
*
* 전체 게시글 정보를 가져와서 List 에 담아서 반환하는 메서드
* @return JdbcBoardVO 객체를 담고 있는 List
*/
public List<JdbcBoardVO> getAllBoardList();
/**
*
* 게시글 번호를 매개값으로 받아서 그 게시글 정보의 내용을 가져와 반환하는 메서드
* @param boardNo 가져올 게시글번호
* @return 게시글 번호에 맞는 자료가 있으면 게시글 정보를 담고 있는 JdbcBoardVO 객체 , 자료가 없으면 null 을 반환
*
*
*/
public JdbcBoardVO getBoard(int boardNo);
/**
* 검색할 제목을 가진 여러개의 게시글이 나올 수가 있다.
* 게시글의 제목을 이용하여 데이터를 검색하는 메서드
* @param title 검색할 게시글 제목
* @return 검색된 결과를 담은 List 객체
*
*/
public List<JdbcBoardVO> getSearchBoardList(String title);
/**
* 게시글 번호를 매개값으로 받아서 해당 자료의 조회수를 증가시키는 메서드
* @param boardNo 조회수를 증가할 게시글 번호
* @return 작업성공 : 1 반환 작업실패 : 0 반환
*/
public int setCountIncrement(int boardNo );
}
----------------------------------------------------------------------------------------------------
package kr.or.ddit.board.service;
import java.util.List;
import kr.or.ddit.board.dao.IJdbcBoardDao;
import kr.or.ddit.board.dao.JdbcBoardDaoImpl;
import kr.or.ddit.vo.JdbcBoardVO;
public class JdbcBoardServiceImpl implements IJdbcBoardService {
private IJdbcBoardDao dao ;
private static JdbcBoardServiceImpl service;
//생성자
private JdbcBoardServiceImpl() {
dao = JdbcBoardDaoImpl.getInstance();
}
public static JdbcBoardServiceImpl getInstance() {
if(service == null ) service = new JdbcBoardServiceImpl();
return service ;
}
@Override
public int insertBoard(JdbcBoardVO boardVo) {
// TODO Auto-generated method stub
return dao.insertBoard(boardVo);
}
@Override
public int deleteBoard(int boardNo) {
// TODO Auto-generated method stub
return dao.deleteBoard(boardNo);
}
@Override
public int updateBoard(JdbcBoardVO boardVo) {
// TODO Auto-generated method stub
return dao.updateBoard(boardVo);
}
@Override
public List<JdbcBoardVO> getAllBoardList() {
// TODO Auto-generated method stub
return dao.getAllBoardList();
}
@Override
public JdbcBoardVO getBoard(int boardNo) {
//보통 서비스에서 뭔가를 추가해야 할때 해준다 ( 예를들어 게시글을 보면 cnt 가 1 씩 증가하는것.
int cnt = setCountIncrement(boardNo); //조회수를 증가시킨다.
if(cnt == 0 ) { //조회수 증가가 실패했을때
return null ;
}
return dao.getBoard(boardNo);
}
@Override
public List<JdbcBoardVO> getSearchBoardList(String title) {
// TODO Auto-generated method stub
return dao.getSearchBoardList(title);
}
@Override
public int setCountIncrement(int boardNo) {
// TODO Auto-generated method stub
return dao.setCountIncrement(boardNo);
}
}
---------------------------------------------------------------------------------------------------
Controller
package kr.or.ddit.board.main;
import java.util.List;
import java.util.Scanner;
import kr.or.ddit.board.service.IJdbcBoardService;
import kr.or.ddit.board.service.JdbcBoardServiceImpl;
import kr.or.ddit.vo.JdbcBoardVO;
public class JdbcBoardController {
private Scanner scan;
private IJdbcBoardService service;
public JdbcBoardController() {
scan = new Scanner(System.in);
service = JdbcBoardServiceImpl.getInstance();
}
public static void main(String[] args) {
new JdbcBoardController().jdbcBoardStart();
}
// 게시판 시작 메서드
private void jdbcBoardStart() {
String boardTitle = null; //검색할 제목이 저장될 변수
int choice = -1 ;
while (true) {
//검색 작업이 아니면 전체 리스트가 출력되어야 한다.
if( choice != 3 ) {
boardTitle = null ;
}
choice = displayMenu(boardTitle);
switch (choice) {
case 1: insertBoard(); // 새글 작성
break;
case 2: viewBoard(); // 게시글 보기
break;
case 3: boardTitle = searchBoard();// 검색
break;
case 0: // 작업 끝
System.out.println("게시판 프로그램 종료....");
return;
default:
System.out.println("번호를 잘못 입력했습니다. 다시 입력하세요");
}
}
}
private String searchBoard(){
System.out.println();
scan.nextLine(); //입력버퍼 비우기
System.out.println("검색작업");
System.out.println("---------------------------------------------");
System.out.println("- 검색할 제목 입력 : ");
String title = scan.nextLine();
return title;
}
// 게시판 목록을 보여주고 메뉴를 나타내며 사용자가 입력한메뉴 번호를 반환하는 메서드
private int displayMenu(String title) {
List<JdbcBoardVO> boardList;
if(title == null || "".equals(title)) {
boardList = service.getAllBoardList();
}else {
boardList = service.getSearchBoardList(title);
}
// 전체 게시글들을 가져온다.
System.out.println();
System.out.println("--------------------------------------------------");
System.out.println("No 제목 작성자 조회수 ");
System.out.println("--------------------------------------------------");
if (boardList == null || boardList.size() == 0) {
System.out.println("출력할 게시글이하나도 없습니다.");
} else {
for (JdbcBoardVO boardVo : boardList) {
System.out.println(boardVo.getBoard_no() + " " + boardVo.getBoard_title()
+ boardVo.getBoard_writer() + boardVo.getBoard_cnt());
}
}
System.out.println("----------------------------------------------------");
System.out.println("메뉴 : 1. 새글 작성 2. 게시글 보기 3. 검색 0.작업물");
System.out.println("작업 선택 >>");
return scan.nextInt();
}
// 새글을 작성하는 메서드
private void insertBoard() {
System.out.println();
scan.nextLine();
System.out.println("\t 새글 작성하기");
System.out.println("-----------------------------------------------------");
System.out.println(" - 제목 : ");
String title = scan.nextLine();
System.out.println("- 작성자 : ");
String writer = scan.nextLine();
System.out.println(" - 내용 : ");
String content = scan.nextLine();
// 입력받은 데이터를 VO 객체에 담는다.
JdbcBoardVO boardVo = new JdbcBoardVO();
boardVo.setBoard_title(title);
boardVo.setBoard_writer(writer);
boardVo.setBoard_content(content);
int cnt = service.insertBoard(boardVo);
if (cnt > 0) {
System.out.println("새글이 추가되었습니다.");
} else {
System.out.println("새글 추가 실패 !!!!!! ");
}
}
// 게시글 내용을 보여주는 메서드
private void viewBoard() {
System.out.println();
System.out.println("보기를 원하는 게시물 번호 입력 >>");
int num = scan.nextInt();
//private IJdbcBoardService service;
JdbcBoardVO boardVo = service.getBoard(num);
if(boardVo == null) {
System.out.println(num + "번의 게시글이 존재하지 않습니다.");
return;
}
System.out.println();
System.out.println(num + "번글 내용");
System.out.println("----------------------------------------");
System.out.println("- 제목 : " + boardVo.getBoard_title());
System.out.println("- 작성자 : " + boardVo.getBoard_writer());
System.out.println("- 내용 : " + boardVo.getBoard_content());
System.out.println("- 작성일 : " + boardVo.getBoard_date());
System.out.println("- 조회수 : " + boardVo.getBoard_cnt());
System.out.println("----------------------------------------");
System.out.println("메뉴 : 1. 수정 2. 삭제 3. 리트스로가기");
System.out.println("작업선택>>>>");
int choice = scan.nextInt();
switch(choice) {
case 1 : //수정
updateBoard(num);
break;
case 2 :
deleteBoard(num);//삭제
break;
case 3 : //리스트로 가기
break;
} //스위치 문 끝
} //viewBoard() 끝
//수정문
//게시글을 수정하는 메서드
private void updateBoard(int boardNo) {
System.out.println();
System.out.println("수정 작업하기");
System.out.println("----------------------------------");
scan.nextLine(); //버퍼 비우기
System.out.println("- 제목 : ");
String title = scan.nextLine();
System.out.print(" - 내용 : ");
String content = scan.nextLine();
//입력한 수정할 데이터를 vo 객체에 담는다.
JdbcBoardVO boardVo = new JdbcBoardVO();
boardVo.setBoard_no(boardNo);
boardVo.setBoard_title(title);
boardVo.setBoard_content(content);
int cnt = service.updateBoard(boardVo);
if (cnt > 0 ) {
System.out.println( boardNo + "번글이 수정되었습니다. ");
}
else {
System.out.println( boardNo + "번글 수정 실패 !");
}
}
//삭제문
private void deleteBoard(int boardNo) {
int cnt = service.deleteBoard(boardNo);
if (cnt > 0 ) {
System.out.println( boardNo + "번글이 삭제되었스니다. ");
}
else {
System.out.println( boardNo + "번글 삭제 실패 !");
}
}
}
-----------------------------------------------------------------------------------------------------
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/dtd-map-2.dtd">
<sqlMap namespace="board">
<insert id="insertBoard" parameterClass="boardVo">
insert into jdbc_board (BOARD_NO , BOARD_TITLE , BOARD_WRITER ,
BOARD_DATE , BOARD_CNT , BOARD_CONTENT )
values ( board_seq.nextval , #board_title# , #board_writer# , sysdate, 0 , #board_content# )
</insert>
<delete id="deleteBoard" parameterClass="int">
delete from jdbc_board where board_no = #board_no#
</delete>
<update id="updateBoard" parameterClass="boardVo">
update jdbc_board set board_title = #board_title# , board_date = sysdate , board_content = #board_content#
where board_no = #board_no#
</update>
<select id="getAllBoardList" resultClass="boardVo">
select board_no , board_title , board_writer ,
to_char(board_date , 'YYYY-MM-DD') board_date , board_cnt , board_content
from jdbc_board
order by board_no desc
</select>
<select id="getBoard" parameterClass="int" resultClass="boardVo">
select board_no, board_title, board_writer,
to_char(board_date, 'YYYY-MM-DD') board_date, board_cnt, board_content
from jdbc_board
where board_no = #board_no#
order by board_no desc
</select>
<select id="getSearchBoardList" parameterClass="String" resultClass="boardVo">
select board_no , board_title , board_writer ,
to_char(board_date , 'YYYY-MM-DD') board_date , board_cnt , board_content
board_cnt , board_content
from jdbc_board
where board_title like '%' || #jsd# || '%'
order by board_no desc
</select>
<update id="setCountIncrement" parameterClass="int">
update jdbc_board set
board_cnt = board_cnt + 1
where board_no = #board_no#
</update>
</sqlMap>
-----------------------------------------------------------------------------------------------------
Dao
package kr.or.ddit.board.dao;
import java.sql.SQLException;
import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient;
import kr.or.ddit.util.BuildedSqlMapClient;
import kr.or.ddit.vo.JdbcBoardVO;
public class JdbcBoardDaoImpl implements IJdbcBoardDao {
private SqlMapClient smc;
private static JdbcBoardDaoImpl dao;
private JdbcBoardDaoImpl() {
smc = BuildedSqlMapClient.getSqlMapClient();
}
public static JdbcBoardDaoImpl getInstance() {
if (dao == null)
dao = new JdbcBoardDaoImpl();
return dao;
}
@Override
public int insertBoard(JdbcBoardVO boardVo) {
int cnt = 0;
try {
Object obj = smc.insert("board.insertBoard", boardVo);
if(obj==null) cnt = 1 ; //null 이면 수행이 성공
} catch (SQLException e) {
cnt = 0;
}
System.out.println("insertBoard xml 완료");
return cnt;
}
@Override
public int deleteBoard(int boardNo) {
int cnt = 0;
try {
cnt = smc.delete("board.deleteBoard" , boardNo );
} catch (SQLException e) {
cnt = 0;
e.printStackTrace();
}
System.out.println("deleteBoard xml 완료");
return cnt;
}
@Override
public int updateBoard(JdbcBoardVO boardVo) {
int cnt = 0;
try {
cnt = smc.update("board.updateBoard", boardVo);
} catch (SQLException e) {
cnt = 0;
e.printStackTrace();
}
System.out.println("updateBoard xml 완료");
return cnt;
}
@Override
public List<JdbcBoardVO> getAllBoardList() {
List<JdbcBoardVO> boardList = null;
try {
boardList = smc.queryForList("board.getAllBoardList");
} catch (SQLException e) {
boardList = null;
}
System.out.println("getAllBoardList xml 완료");
return boardList;
}
@Override
public JdbcBoardVO getBoard(int boardNo) {
JdbcBoardVO boardVo = null;
try {
boardVo = (JdbcBoardVO)smc.queryForObject("board.getBoard", boardNo);
} catch (SQLException e) {
boardVo = null;
e.printStackTrace();
}
System.out.println("getBoard xml 완료");
return boardVo;
}
@Override
public List<JdbcBoardVO> getSearchBoardList(String title) {
List<JdbcBoardVO> boardList = null;
try {
boardList = smc.queryForList("board.getSearchBoardList", title );
} catch (SQLException e) {
boardList = null ;
e.printStackTrace();
}
System.out.println("getSearchBoardList xml 완료");
return boardList;
}
@Override
public int setCountIncrement(int boardNo) {
int cnt = 0 ;
try {
cnt = smc.update("board.setCountIncrement", boardNo);
} catch (SQLException e) {
cnt = 0 ;
e.printStackTrace();
}
System.out.println("setCountIncrement xml 완료");
return cnt;
} //setCountIncrement 끝
}
-----------------------------------------------------------------------------------------------------
package kr.or.ddit.board.dao;
import java.util.List;
import kr.or.ddit.vo.JdbcBoardVO;
public interface IJdbcBoardDao {
/**
* JdbcBoardVO 에 담겨진 자료를 DB 에 insert 하는 메서드
*
* @param boardVo DB에 insert 할 자료가 저장될 JdbcBoardVO 객체
* @return 작업성공 : 1 작업 실패 : 0
*/
public int insertBoard(JdbcBoardVO boardVo);
/**
*
* 게시글 번호를 매개값으로 받아서 그 게시글 정보를 삭제하는 메서드
* @param boardNo 삭제할 게시글 번호
* @return 작업성공 : 1 작업실패 : 0
*/
public int deleteBoard(int boardNo);
/**
* 하나의 JdbcBoardVO 자료를 이용하여 DB에 update 하는 메서드
*
* @param boardVo update 할 게시글 정보가 저장될 JdbcBoardVO 객체
* @return 작업성공 : 1 , 작업실패 : 0
*/
public int updateBoard(JdbcBoardVO boardVo);
/**
*
* 전체 게시글 정보를 가져와서 List 에 담아서 반환하는 메서드
* @return JdbcBoardVO 객체를 담고 있는 List
*/
public List<JdbcBoardVO> getAllBoardList();
/**
*
* 게시글 번호를 매개값으로 받아서 그 게시글 정보의 내용을 가져와 반환하는 메서드
* @param boardNo 가져올 게시글번호
* @return 게시글 번호에 맞는 자료가 있으면 게시글 정보를 담고 있는 JdbcBoardVO 객체 , 자료가 없으면 null 을 반환
*
*
*/
public JdbcBoardVO getBoard(int boardNo);
/**
* 검색할 제목을 가진 여러개의 게시글이 나올 수가 있다.
* 게시글의 제목을 이용하여 데이터를 검색하는 메서드
* @param title 검색할 게시글 제목
* @return 검색된 결과를 담은 List 객체
*
*/
public List<JdbcBoardVO> getSearchBoardList(String title);
/**
* 게시글 번호를 매개값으로 받아서 해당 자료의 조회수를 증가시키는 메서드
* @param boardNo 조회수를 증가할 게시글 번호
* @return 작업성공 : 1 반환 작업실패 : 0 반환
*/
public int setCountIncrement(int boardNo );
}
댓글
댓글 쓰기