iknowahra / cspiEdu

CSPI OJT
0 stars 0 forks source link

2021.10.15 교육내용 정리 #27

Open iknowahra opened 2 years ago

iknowahra commented 2 years ago

2021.10.15


Structure 정리
Url -> controller -> service -> DAO -> Mapper -> DB

1. Mapper 를 작성하기

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="board">
    <!-- 생략 -->
    <insert id="insertBoard">
        INSERT INTO BOARD
            (
                NO
                ,TITLE
                ,CONTENT
                ,REG_ID
                ,REG_DT
                ,UPD_ID
                ,UPD_DT
            )
            VALUES(
                (SELECT MAX(B.NO)+1 FROM BOARD B)
                ,#{title}
                ,#{content}
                ,#{userId}
                ,NOW()
                ,#{userId}
                ,NOW()
            )
    </insert>
</mapper>



주의 해야할 점!

BOARD는 한 쿼리 내부에서 같은 이름으로 한 번만 호출할 수 있다.

따라서 BOARD의 MAX값에 접근할 경우 BOARD의 ALLIAS를 BOARD 외에 별도로 지정하여 호출해줘야 한다. SELECT MAX(B.NO)+1 FROM BOARD B) 에선 BOARD의 ALLIAS를 B로 설정하여 호출해야 한다.



2. DAO 작성하기

package com.ahra.www.dao;

@Repository("BoardDao")
public class BoardDao {

    @Autowired // 이 객체를 bean에 넣어줌 원래라면 새롭게 만들어야 함. 의존성 주입
    SqlSession sqlSession;

    public int insertBoard (FormTestVo vo) {
        return sqlSession.insert("board.insertBoard", vo);
    }
}


참고 사항 : FormTestVo객체의 vo에 포함된 하나의 필드가 필요하면, vo로 표기할 수 있다.

//생략
    public FormTestVo selectBoardReader(FormTestVo vo) { 
        //selectBoardReader(Integer no)대신 vo로 대체 가능
        return sqlSession.selectOne("board.selectBoardReader", vo);
    }
//생략



3. Service 작성하기

package com.ahra.www.service;

@Service("BoardService")
public class BoardServiceImpl implements BoardService {

    @Autowired
    BoardDao dao;

    /**
     *  add post
     */

    @Override
    public int insertBoard(FormTestVo vo) {
        // TODO Auto-generated method stub
        return dao.insertBoard(vo); // 성공한 횟수로 리턴됨
    }
}


참고 사항 : /** 주석*/을 작성하면, 해당 매소드에 접근 했을 때, 주석을 참고할 수 있어 여럿이 공동작업할 때 어떤 기능을 하는지, 어떤 파라미터가 필요한지 미리 알 수 있어 좋다.



4. Controller 작성하기


// BoardController.java
@Controller
@RequestMapping("/board")
public class BoardController {
    @Autowired
    BoardService service;

    @RequestMapping("/write")
    public String insertPost(){
        return "/board/write";
    }

    @RequestMapping(value="/regist", method=RequestMethod.POST)
    public String registPost(FormTestVo newPost){
        int res = service.insertBoard(newPost); //성공한 횟수로 리턴됨
        return "redirect:/board";
    }
}



5. View 작성하기



viewer작성

<%--/board/write.jsp--%>
<html>
<head>
<title>Write</title>
</head>
<body>
    <h1>Write post</h1>
    <form action="regist" method="post">
        <label for="title"> title </label> 
        <input id="title" name="title" type="text"><br> 
        <label for="userId"> user </label> 
        <input id="userId" name="userId" type="text"><br> 
        <label for="content"> content </label>
        <textarea id="content" name="content"></textarea><br> 
        <input type="submit" value="post">
    </form>
</body>
</html>