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 |
Tags
- 오라클
- EnhancedFor
- 컬렉션프레임워크
- NestedFor
- 인터페이스
- 예외미루기
- 다형성
- 메소드오버로딩
- oracle
- Java
- cursor문
- 제네릭
- 정수형타입
- 한국건설관리시스템
- 대덕인재개발원
- 생성자오버로드
- 자바
- 예외처리
- abstract
- 집합_SET
- GRANT VIEW
- 자동차수리시스템
- 참조형변수
- 객체 비교
- 사용자예외클래스생성
- 컬렉션 타입
- 추상메서드
- 환경설정
- 어윈 사용법
- exception
Archives
- Today
- Total
거니의 velog
(20) 토요일 수업 4 본문
https://becomefullstackdev.tistory.com/117
[mybatis sql 문 타일링 방법]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="commonMapper">
<sql id="pagingHeader">
select
b.*
, count(1) over() as total_cnt
from (
select
a.*, row_number() over (order by a.bo_no desc) rnum
from (
</sql>
<sql id="pagingFooter">
) a
) b
<![CDATA[
where b.rnum >= #{startRow} and b.rnum <= #{endRow}
]]>
</sql>
</mapper>
<select id="selectNoticeList" parameterType="pagingVO" resultType="noticeVO">
<include refid="commonMapper.pagingHeader" />
select
bo_no, bo_title, bo_content, bo_writer, bo_date, bo_hit, bo_impor
from notice
where 1=1
<!-- <include refid="noticeSearch" /> -->
<if test="searchType != null and searchType == 'title'">
and (bo_title like '%' || #{searchWord} || '%')
</if>
<if test="searchType != null and searchType == 'writer'">
and (bo_writer like '%' || #{searchWord} || '%')
</if>
<if test="searchType != null and searchType == 'both'">
and (bo_title like '%' || #{searchWord} || '%')
and (bo_writer like '%' || #{searchWord} || '%')
</if>
<include refid="commonMapper.pagingFooter" />
</select>
1. 컨트롤러 (안내데스크)
- 자료수집 : (파라미터, Session, Application)
- 자료검증
- 업무처리 (파라미터 구성 -> Service 호출)
. CUD 작업 2개 이상 존재 지양 -> why? 트랜잭션 단위가 달라지므로 앞에서 성공한 서비스는 DB에 들어감.
. 즉, 트랜잭션 단위를 고려하라는 말
. 같은 트랜잭션
-> 반드시 서비스를 1개로 호출 필요 -> 커넥션 단위가 1개이며 주소도 1개여야 함
. 다른 트랜잭션
try {
서비스호출1
}catch(Exception e) {
}
try {
서비스호출1
}catch(Exception e) {
}
- 자료반환 (view 페이지, data)
// 공지사항 리스트 출력
@CrossOrigin(origins = "http://localhost")
@RequestMapping(value = "/list.do", method = RequestMethod.GET)
public String noticeList(
@RequestParam(name = "page", required = false, defaultValue = "1") int currentPage,
@RequestParam(required = false, defaultValue = "title") String searchType,
@RequestParam(required = false) String searchWord,
Model model
) {
/** 자료 수집 및 정의 */
Map<String,Object> param = new HashMap<>();
param.put("currentPage", currentPage);
param.put("searchType", searchType);
param.put("searchWord", searchWord);
/** 서비스 호출 */
// 공지사항 게시판 리스트 가져오기
noticeService.noticeList(param);
/** 반환 자료 */
PaginationInfoVO<NoticeVO> pagingVO = (PaginationInfoVO<NoticeVO>) param.get("pagingVO");
List<NoticeVO> importantNoticeList = (List<NoticeVO>) param.get("importantNoticeList");
List<NoticeVO> fileExistNoticeList = (List<NoticeVO>) param.get("fileExistNoticeList");
/** 자료 검증 */
log.info("pagingVO : " + pagingVO.toString());
log.info("importantNoticeList : " + importantNoticeList.toString());
log.info("importantNoticeList : " + importantNoticeList.toString());
log.info("fileExistNoticeList : " + fileExistNoticeList.toString());
/** 자료 반환 */
model.addAttribute("searchType", searchType);
model.addAttribute("searchWord", searchWord);
model.addAttribute("pagingVO", pagingVO);
model.addAttribute("importantNoticeList", importantNoticeList);
model.addAttribute("fileExistNoticeList", fileExistNoticeList);
return "board/noticeBoardList";
}
@Override
public void noticeList(Map<String, Object> param) {
/** 파라미터 조회 */
int currentPage = (int) param.get("currentPage");
String searchType = (String) param.get("searchType");
String searchWord = (String) param.get("searchWord");
/** 파라미터 정의 */
PaginationInfoVO<NoticeVO> pagingVO = new PaginationInfoVO<NoticeVO>();
List<NoticeVO> importantNoticeList = new ArrayList<NoticeVO>();
List<NoticeVO> fileExistNoticeList = new ArrayList<NoticeVO>();
/** 메인로직 처리 */
// 검색 기능
if(StringUtils.isNotBlank(searchWord)) {
pagingVO.setSearchType(searchType);
pagingVO.setSearchWord(searchWord);
}
pagingVO.setCurrentPage(currentPage);
// 총 게시글 수 가져오기
int totalRecord = noticeMapper.selectNoticeCount(pagingVO);
pagingVO.setTotalRecord(totalRecord);
// 총 게시글을 리스트로 받아오기
List<NoticeVO> dataList = noticeMapper.selectNoticeList(pagingVO);
pagingVO.setDataList(dataList);
// 중요공지 리스트 가져오기
importantNoticeList = noticeMapper.importantNoticeList();
// 파일이 들어있는 게시글 리스트 가져오기
fileExistNoticeList = noticeMapper.fileExistNoticeList();
/** 반환자료 저장 */
param.put("pagingVO", pagingVO);
param.put("importantNoticeList", importantNoticeList);
param.put("fileExistNoticeList", fileExistNoticeList);
}
// 플래너 공개/비공개 처리 메서드
@PostMapping("/chgStatusPlan.do")
public String chgStatusPlan(
PlanerVO planerVO,
Model model,
RedirectAttributes ra
) {
/** 자료 수집 및 정의 */
Map<String, Object> param = new HashMap<String, Object>();
param.put("memId", planerVO.getMemId());
param.put("plNo", planerVO.getPlNo());
param.put("plPrivate", planerVO.getPlPrivate());
/** 서비스 호출 */
myTripService.chgStatusPlan(param);
/** 반환 자료 */
ServiceResult result = (ServiceResult) param.get("result");
String message = (String) param.get("message");
String goPage = (String) param.get("goPage");
/** 자료 검증 */
log.info("result : " + result);
log.info("message : " + message);
log.info("goPage : " + goPage);
if(result.equals(ServiceResult.OK)) { // 업데이트 성공
ra.addFlashAttribute("message", message);
}else { // 업데이트 실패
model.addAttribute("message", message);
}
/** 자료 반환 */
return goPage;
}
@Override
public void chgStatusPlan(Map<String, Object> param) {
/** 파라미터 조회 */
String memId = (String) param.get("memId");
int plNo = (int) param.get("plNo");
String plPrivate = (String) param.get("plPrivate");
/** 파라미터 정의 */
PlanerVO planerVO = new PlanerVO();
int status = 0;
ServiceResult result = null;
String message = "";
String goPage = "";
/** 메인로직 처리 */
// 해당 플래너를 공개/비공개 처리 하기
planerVO.setMemId(memId);
planerVO.setPlNo(plNo);
if(plPrivate.equals("Y")) { // 비공개 처리
planerVO.setPlPrivate("N");
}else if(plPrivate.equals("N")) { // 공개 처리
planerVO.setPlPrivate("Y");
}
status = myTripMapper.chgStatusPlan(planerVO);
if(status > 0) { // 업데이트 성공
result = ServiceResult.OK;
if(plPrivate.equals("Y")) { // 비공개 처리
message = "해당 플래너를 비공개 처리하였습니다.";
}else if(plPrivate.equals("N")) { // 공개 처리
message = "해당 플래너를 공개 처리하였습니다.";
}
goPage = "redirect:/partner/mygroup.do";
}else { // 업데이트 실패
result = ServiceResult.FAILED;
message = "해당 플래너를 갱신하는데 실패했습니다.";
goPage = "partner/mygroup";
}
/** 반환자료 저장 */
param.put("result", result);
param.put("message", message);
param.put("goPage", goPage);
}
'대덕인재개발원_final project' 카테고리의 다른 글
(22) 토요일 수업 5 (0) | 2024.02.03 |
---|---|
(21) 웹 소켓 세팅 (1) | 2024.02.01 |
(19) 보강 12 (0) | 2024.01.08 |
(18) 토요일 수업 3 (0) | 2024.01.08 |
(17) Tomcat Servers 설정 (1) | 2024.01.05 |