프로그래밍 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



공지사항 등록을 위한 소스구현은 되었으니, 테스트를 해봐야죠~~~

posted by 생각퍼즐
: