[포트폴리오 페이지]_10단계_CRUD 게시판 구현_(feat.등록기능 구현)

2022. 4. 3. 18:23[Spring]_/[Spring]_포트폴리오 페이지 만들기

728x90
반응형

[환경]

 

개발툴 : IntelliJ

DB : oracle

프레임워크 : spring , mybatis

 

----

개발 목표 : 오라클 디비를 이용해서 게시판 CRUD 중 C(create) 만들기

[완료화면]

등록 버튼 클릭시 메뉴 1의 게시판에 새로운 항목이 생성

한국어는 깨지는 현상이 발생-> 추후 해결예정

[디렉토리]

CRUD는 같은 파일에 작성

 

[JSP 파일]

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<style>
    .board{
        width: 100%;
    }
</style>
</head>
<body>
<div id="content">
    <div id="contentwrap">


        <form id="frm">
            <input type="text" placeholder="제목" id="subject" name="subject">
            <input type="text" placeholder="내용" id="writecontent" name="content">
            <button type="button" onclick="fn_boardRegi();">등록</button>
        </form>

    </div>
</div>
</body>
</html>
<script src='/js/jquery-3.6.0.min.js?ver=1'></script>

<script>
    function fn_boardRegi(){
        let title = $("#subject").val();

        let content = $("#writecontent").val();
        let $globalStorage = $commons.storage.g_variable;
        let writer = $globalStorage.getValue("loginUser");
        let date = $commons.util.date();

        fetch("/board/register.do",{
            method: 'POST',
            headers: {
                'content-type' : 'application/json'
            },
            body: JSON.stringify({
                title: title,
                content : content,
                writer : writer,
                regdate: date,
                viewcnt : 0
            })
        }).then(res => res.json())
        .then(data => {
            console.log(data);
        })

    };
</script>

fetch 를 사용하여 해당 url을 호출하고, 데이터는 json으로 가공하여 전달,

데이터들은 입력 폼 안에 적힌 text, globalstorage에 저장된 사용자 명을 받아서 전달한다.

 

[Controller]

@RequestMapping("/board/register.do")
@ResponseBody
public String boardWrite(@RequestBody Map<String,String> map) throws Exception{
    BoardVO vo = new BoardVO();
    int cnt = boardService.serchbno() + 1;
    System.out.println("cnt = " + cnt);
    String title = map.get("title");
    String content = map.get("title");
    String writer = map.get("writer");
    String regdate = map.get("regdate");
    //String viewcnt = map.get("viewcnt");

    BoardVO boarddata = new BoardVO();
    boarddata.setBno(cnt);
    boarddata.setTitle(title);
    boarddata.setContent(content);
    boarddata.setWriter(writer);
    boarddata.setRegdate(regdate);
    boarddata.setViewcnt(0);
    boardService.boardWrite(boarddata);




    return "ok";
}

json으로 전달된 값 -> Map형식으로 받아서 해당 key 값을 기준으로 각각의 변수에 지정하고

모델인 VO에 Setter를 이용하여 저장한다. 그 값을 service에 전달.

bno의 경우 게시판의 고유 id 이자 게시판 번호로 별도의 쿼리를 작성하여 최상단의 수에 +1 을 한 뒤 그 값을 입력한다

 

[Serivce]

public interface BoardService {
    public List<BoardVO> boardSearch() throws Exception;
    public void boardWrite(BoardVO boardVO) throws Exception;
    public int serchbno()throws Exception;
}

[ServiceImpl]

@Override
public void boardWrite(BoardVO boardVO) throws Exception {
    boardmapper.boardWrite(boardVO);
}

@Override
public int serchbno() throws Exception {
    return boardmapper.searchbno();
}

bno 는 별도의 쿼리를 작성하여, 마지막에 저장된 bno 를 받아온다. 

 

[BoardMapper]

@Mapper
public interface BoardMapper {
    List<BoardVO> boardSearch();
    void boardWrite(BoardVO boardVO);
    int searchbno();
}

[BoardMapper.xml]

<insert id="boardWrite">
    insert into board (bno, title,content,writer)
    values(#{bno},#{title},#{content},#{writer})
</insert>

<select id="searchbno" resultType="int">
    select max(BNO) from board
</select>

searchbno 는 max를 이용하여 가장 큰 값을 되돌려준다.

boardwrite는 전달받은 값들을 각각의 컬럼에 저장한다.

 

감사합니다.

728x90
반응형