참고 사이트 : https://lineage2m.plaync.com/board/free/list
package com.green.domain.dao;
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.green.domain.dto.Board2DTO;
import com.green.mybatis.MybatisConfig;
public class Board2DAO { // 'DB 처리' 관련된 모든 것
// 공통 작업 : [ MybatisConfig.java ]를 통해, (이미 만들어진 + 1개만 + 서버 끝날때까지 계속 유지 + 공유) sqlSessionFactory 객체를, 멤버 필드로 생성
private SqlSessionFactory sqlSessionFactory = MybatisConfig.getInstance(); // [ MybatisConfig.java ] 참고
// // [ Board2Controller ]에서 시작되어, [ Board2Service ]를 거치고, [ Board2ServiceImpl ]를 거쳐서, 최종적으로 도착한 'findAll() 메서드 ( 타입 : List<Board2DTO> )'
// // 최종적으로 알고보니, 'findAll() 메서드'는 CRUD에서 select와 관련된 거였음
// public List<Board2DTO> findAll() { // [ 모든 데이터 조회 방법 1 ] : 모든 게시글을, 1개의 페이지에서 전부 조회
//
// // SqlSessionFactory를 통해, SqlSession 객체 생성
// SqlSession sqlSession = sqlSessionFactory.openSession(); // select만 하는 거니깐, true(auto-commit)로 설정할 필요 없음
//
// List<Board2DTO> result = sqlSession.selectList("board2Mapper.findAll"); // selectList("mapper의 namespace") : [ board2-Mapper.xml ] 참조
//
//
// sqlSession.close();
//
// return result;
//
// }
// [ Board2Controller ]에서 시작되어, [ Board2Service ]를 거치고, [ Board2ServiceImpl ]를 거쳐서, 최종적으로 도착한 'findBoardByPage() 메서드 ( 타입 : List<Board2DTO> )'
// 최종적으로 알고보니, 'findBoardByPage() 메서드'는 CRUD에서 select와 관련된 거였음
public List<Board2DTO> findBoardByPage(RowBounds rb) { // [ 모든 데이터 조회 방법 2 ] : 모든 게시글을, 여러 개의 페이지로 나눠서 조회(paging) => 한 페이지에서 5개의 게시글만 표현 + 7개의 페이지 번호
// SqlSessionFactory를 통해, SqlSession 객체 생성
SqlSession sqlSession = sqlSessionFactory.openSession(); // select만 하는 거니깐, true(auto-commit)로 설정할 필요 없음
List<Board2DTO> result = sqlSession.selectList("board2Mapper.findAll", null, rb); // selectList("mapper의 namespace", select할 Parameter, rowBounds) : [ board2-Mapper.xml ]
// select할 Parameter가 null인 이유 : [ board2-Mapper.xml ]의 findAll에서 #{ } 이런 게 없으니깐~
sqlSession.close();
return result;
}
// [ Board2ServiceImpl ]에서 만들어진, 'getBoardTotal() 메서드 ( 타입 : int )'
// 'getBoardTotal() 메서드'는 CRUD에서 select와 관련된 거임
public int getBoardTotal() {
SqlSession sqlSession = sqlSessionFactory.openSession();
int result = sqlSession.selectOne("board2Mapper.total");
sqlSession.close();
return result;
}
// [ Board2Controller ]에서 시작되어, [ Board2Service ]를 거치고, [ Board2ServiceImpl ]를 거쳐서, 최종적으로 도착한 'insert() 메서드 ( 타입 : void )'
// 최종적으로 알고보니,'insert() 메서드'는 CRUD에서 insert와 관련된 거였음
public void insert(Board2DTO dto) { // void이므로, return 값이 없음
SqlSession sqlSession = sqlSessionFactory.openSession(true); // insert 하는 것이므로, true(auto-commit)으로 설정할 필요 있음
sqlSession.insert("board2Mapper.save", dto);
/* insert("mapper의 namespace", 매개변수인 Board2DTO dto - insert할 Parameter)
- "mapper의 namespace" : [ board2-Mapper.xml ] 참조
- insert할 Parameter : 최초의 기원은, [ write.jsp ]에서 <form> 태그 안의 name 속성에 해당하는 값 */
sqlSession.close();
}
// [ Board2Controller ]에서 시작되어, [ Board2Service ]를 거치고, [ Board2ServiceImpl ]를 거쳐서, 최종적으로 도착한 'detail() 메서드 ( 타입 : Board2DTO )'
// 최종적으로 알고보니,'detail() 메서드'는 CRUD에서 update 및 select와 관련된 거였음
public Board2DTO detail(int no) {
SqlSession sqlSession = sqlSessionFactory.openSession(); // update가 있으니, commit을 해야 되는데 , 이 작업을 아래에서 따로 함 : [ sqlSession.commit(); ]
// [ 작업 1 ] : <상세 페이지> 창으로 이동 시(즉, 조회 시), 조회 수(read_count)를 1 증가시키기
int ea = sqlSession.update("board2Mapper.up", no);
System.out.println("조회 결과 : ("+no+"번)의 조회수 "+ea+" 증가 완료!"); // ea : 'update를 1번 했다'라는 의미
// [ 작업 2 ] : 조회 수를 1 증가시킨 채로, 선택된 no에 대한 한 줄의 데이터를 읽기
Board2DTO result = sqlSession.selectOne("board2Mapper.detail", no); /* 한 줄의 row(튜플)만 select하는 것이므로, selectOne을 사용
( 물론, [ board2-Mapper ]에서 '선택한 no에 해당하는 한 줄의 row 값'만을 select하기에
selectList를 사용해도 굳이 상관은 없으나, 의미상 selectList가 아닌 selectOne을 사용하는 것이 옳다 ) */
/* selectOne("mapper의 namespace", 매개변수인 int no - select할 Parameter)
- "mapper의 namespace" : [ board2-Mapper.xml ] 참조
- select할 Parameter : 최초의 기원은, [ list.jsp ]에서의 Query String Parameter("no") */
// ( 트랜잭션 ) : ex.) [ 작업 1 ]이 성공하고, [ 작업 2 ]가 실패한 경우
// ※ 지금은 [ 작업 1 ] 및 [ 작업 2 ]가 무조건 성공할 수 있게 코드문을 완벽하게 작성했으므로, 아래의 작업을 안 해도 상관 없는데, 그냥 이런 게 있다는 것을 보여주기 위해 작성
if(ea==1 && result==null) {
sqlSession.rollback();
return null;
}
sqlSession.commit();
sqlSession.close();
return result;
}
// [ Board2Controller ]에서 시작되어, [ Board2Service ]를 거치고, [ Board2ServiceImpl ]를 거쳐서, 최종적으로 도착한 'delete() 메서드 ( 타입 : int )'
// 최종적으로 알고보니,'delete() 메서드'는 CRUD에서 delete와 관련된 거였음
public int delete(int no) {
SqlSession sqlSession = sqlSessionFactory.openSession(true);
int result = sqlSession.delete("board2Mapper.del", no); // int result = 1 ( 1개가 삭제되었다는 의미 )
/* delete("mapper의 namespace", 매개변수인 int no - delete할 Parameter)
- "mapper의 namespace" : [ board2-Mapper.xml ] 참조
- delete할 Parameter : 최초의 기원은, [ detail.jsp ]에서의 Query String Parameter("no") */
sqlSession.close();
return result;
}
// [ Board2Controller ]에서 시작되어, [ Board2Service ]를 거치고, [ Board2ServiceImpl ]를 거쳐서, 최종적으로 도착한 'update() 메서드 ( 타입 : int )'
// 최종적으로 알고보니,'update() 메서드'는 CRUD에서 update와 관련된 거였음
public int update(Board2DTO dto) {
SqlSession sqlSession = sqlSessionFactory.openSession(true);
int result = sqlSession.update("board2Mapper.update", dto); // int result = 1 ( 1개가 수정되었다는 의미 )
/* update("mapper의 namespace", 매개변수인 Board2DTO dto - update할 Parameter)
- "mapper의 namespace" : [ board2-Mapper.xml ] 참조
- update할 Parameter : 최초의 기원은, [ detail.jsp ]에서 <form> 태그 안의 name 속성에 해당하는 값 */
sqlSession.close();
return result;
}
}