'service'에 해당되는 글 1건
- 2017.03.16 :: 스프링 프로젝트 - 공지사항 기능 구현
프로그래밍
2017. 3. 16. 11:30
공지사항 등록 비즈니스 로직
1. Controller 구현
- request 등록을 수행하는 regNotice 메소드의 return 값은 정상적으로 처리하면 "redirect:/notice/공지사항목록화면"으로 처리해야 됩니다. 공지사항 목록화면 구현 후 수정하시면 됩니다.
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 32 33 34 35 36 | package com.devdic.board.controller; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.devdic.board.service.NoticeService; import com.devdic.board.vo.NoticeVO; @Controller public class NoticeController { @Autowired public NoticeService noticeService; private static final Logger logger = LoggerFactory.getLogger(NoticeController.class); // 등록화면 보여주기 @RequestMapping(value="/regNoticeView") public String regNoticeView(HttpServletRequest request) throws Throwable { return "/notice/regNotice"; } // request정보 등록 @RequestMapping(value="/regNotice") public String regNotice(HttpServletRequest request, NoticeVO noticeVO) throws Throwable { noticeService.regNotice(request, noticeVO); return "/notice/regNotice"; } } | cs |
2. Service 구현(interface제외)
- 공지사항 등록이 비즈니스 로직을 담당
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | package com.devdic.board.service.impl; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.devdic.board.dao.NoticeDao; import com.devdic.board.service.NoticeService; import com.devdic.board.vo.NoticeVO; import com.devdic.util.file.FileUpload; @Service public class NoticeServiceImpl implements NoticeService{ @Autowired public NoticeDao noticeDao; @Override public int regNotice(HttpServletRequest req, NoticeVO noticeVO) throws Exception { // TODO Auto-generated method stub // 공지사항 정보 등록 insertNotice(noticeVO); FileUpload fileUpload = new FileUpload(); List<NoticeVO> list= fileUpload.parseInsertFileInfo(req); int i = 0; for(NoticeVO fileList: list){ i++; noticeVO.setAttFileId(i); noticeVO.setAttFileNm(fileList.getAttFileNm()); noticeVO.setAttFileSaveNm(fileList.getAttFileSaveNm()); noticeVO.setAttFileSize(fileList.getAttFileSize()); noticeVO.setDelYn("N"); // 첨부파일 등록 insertAttFile(noticeVO); } return 0; } private int insertNotice(NoticeVO noticeVO) throws Exception{ return noticeDao.insertNotice(noticeVO); } private int insertAttFile(NoticeVO notieceVO) throws Exception{ return noticeDao.insertAttFile(notieceVO); } } | cs |
3. Repository(DAO) 구현(interface제외)
- namespace는 mapper(notice.xml)에 정의된 namespace 값입니다.
- 4.SQL작성의 notice.xml을 확인하세요!
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 | package com.devdic.board.dao.impl; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.devdic.board.dao.NoticeDao; import com.devdic.board.vo.NoticeVO; @Repository public class NoticeDaoImpl implements NoticeDao{ @Autowired private SqlSessionTemplate sqlSession; private final String namespace = "SqlMapNoticeDao"; public int insertNotice(NoticeVO noticeVO) throws Exception{ return sqlSession.insert(namespace+".insertNotice", noticeVO); } public int insertAttFile(NoticeVO noticeVO) throws Exception{ return sqlSession.insert(namespace+".insertAttFile", noticeVO); } } | cs |
4. SQL 작성
- root-context.xml 설정파일에서 mybatis 설정부분을 보면...
mapper(SQL) 파일의 경로를 설정한 것이 기억나시죠^^
1 2 | <!-- SQL(mapper) 경로 지정 --> <property name="mapperLocations" value="classpath:sqlMap/**/*.xml"/> | cs |
아래의 그림처럼 공지사항과 관련된 SQL을 작성하기 위한 notice.xml 파일을 하나 생성합니다.
notice.xml을 아래의 코드를 참조하여 작성합니다.
mybatis의 바인드 처리는 "#"으로 처리하시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.2//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="SqlMapNoticeDao"> <insert id="insertNotice" parameterType = "com.devdic.board.vo.NoticeVO"> <selectKey keyProperty="noticeId" resultType="int" order="BEFORE"> SELECT NVL(MAX(NOTICE_ID) + 1, 1) AS NOTICE_ID FROM TB_NOTICE </selectKey> INSERT INTO TB_NOTICE(NOTICE_ID, NOTICE_TITLE, NOTICE_CONTENT, DEL_YN) VALUES(#{noticeId}, #{noticeTitle}, #{noticeContent}, #{delYn}) </insert> <insert id="insertAttFile" parameterType = "com.devdic.board.vo.NoticeVO"> INSERT INTO TB_ATT_FILE(NOTICE_ID, FILE_ID, ATT_FILE_SAVE_NM, ATT_FILE_NM, ATT_FILE_SIZE, DEL_YN) VALUES(#{noticeId}, #{attFileId}, #{attFileSaveNm}, #{attFileNm}, #{attFileSize}, #{delYn}) </insert> </mapper> | cs |
공지사항 등록을 위한 소스구현은 되었으니, 테스트를 해봐야죠~~~
'프로그래밍' 카테고리의 다른 글
SSL 인증 우회하기 (1) | 2017.04.18 |
---|---|
스프링 프로젝트 - 공지사항 등록 테스트 (0) | 2017.03.17 |
스프링 프로젝트 - 첨부파일 처리 (0) | 2017.03.10 |
스프링 프로젝트 - 공지사항 Request 처리를 위한 환경설정 (0) | 2017.02.21 |
스프링 프로젝트-공지사항 등록 화면 구현 (0) | 2017.02.17 |