Board - Ibatis : 2020.11.20 고급자바 수업노트 - ibatis 기본 with : board 테이블

 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 ); 
}

















댓글