/ LECTURE

Spring - MVC

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

62일차 수업

Spring MVC

Mybatis 까지 이용해 db연결에 성공했다면 MVC 를 적용해본다

Java 폴더 내에 각 기능 별로 controller, dao, service, domain 으로 분류하고

WEB-INF 폴더 내에 views 폴더에 화면을 담당하는 jsp 파일을 넣는다

DAO와 Service 클래스는 인터페이스를 생성해 구현하는 방식으로 설계한다

Controller


@Controller // annotation을 활용한다
public class BoardController {

    @Autowired
    private BoardService boardService;

    @RequestMapping("test") // test라는 요청이 들어오면
    public String test(){	// 바로 밑에 메소드가 실행이 되고
        boardService.timeTest();	// 코드를 실행하고
        return "test";	// 어떤 view파일을 반환할지 명시할 수 있다
    }

    @RequestMapping("/{step}")	// 만일 요청과 반환할 view페이지의 파일명이 같다면
    public String viewPage(@PathVariable String step){	// 변수화 하여 사용할 수 있다
        // 사용자가 단순 화면 이동을 하는 경우는 해당 메소드를 이용
        return step;
    }

    @RequestMapping("getBoardList")
    public String getBoardList(Model model, String searchCondition, String searchKeyword){

        HashMap map = new HashMap();
        map.put("searchCondition",searchCondition);
        map.put("searchKeyword", searchKeyword);

        //DB 접속해서 데이터 가져와야함
        List<BoardVO> bList = boardService.getBoardList(map);
        model.addAttribute("boardList",bList);	// 키와 값으로 구성된 정보를 전달 할 수도있다
        return "getBoardList";
    }

    @RequestMapping("getBoard")
    public ModelAndView getBoard(BoardVO vo) {
        // model 과 view를 동시에 줄 수도 있다
        ModelAndView m = new ModelAndView();
        m.setViewName("/WEB-INF/views/getBoard.jsp ");
        m.addObject("board",boardService.getBoard(vo));

        return m;
    }

    // 이동 후 view 뿐만아니라 데이터를 불러와야할 상황이 필요할 경우 redirect를 이용한다
    @RequestMapping("deleteBoard")
    public String deleteBoard(BoardVO vo){
        boardService.deleteBoard(vo);
        return "redirect:getBoardList";
    }
}

DAO

@Repository("boardDAO")
public class BoardDAOImpl implements BoardDAO{

// annotation을 활용할 경우, SqlSession 전용 bean을 만들 클래스를 생성하지 않아도 된다
@Autowired
private SqlSessionTemplate mybatis;

    @Override
    public String timeTest() {
        System.out.println("test");
        return mybatis.selectOne("testMapper.getTime");
    }

    @Override
    public List<BoardVO> getBoardList(HashMap map) {
        System.out.println("==>DAO 호출");
        // mapper 중에서 BoardDAO 라는 네임 스페이스를 가진 mapper 를 찾고
        //  그 안에 id 가 getBoardList 인 태그 안에 있는 쿼리를 실행해라
        System.out.println(map.get("searchCondition"));
        System.out.println(map.get("searchKeyword"));
        return mybatis.selectList("BoardDAO.getBoardList",map);
    }
}

Mapper

Mybatis 를 활용할 경우 if 문과 같은 제어문을 이용해 동적으로 이용할 수있다

<mapper namespace="BoardDAO">
    <!-- board 라는 형태로 결과를 주세요
    alias 별칭으로 설정한 board 입니다-->
    <insert id="insertBoard" parameterType="board">
        INSERT INTO upLoadtemp(b_id, b_name, b_email, b_content, b_title, b_pwd, b_date, b_count
            <if test="b_fname != null">
            , b_fname, b_fsize, b_fname_en
            </if>
        )
        VALUES(uploadtemp_bid_seq.nextval, #{b_name}, #{b_email}, #{b_content}, #{b_title}, #{b_pwd}, CURRENT_DATE, 0
            <if test="b_fname != null">
            , #{b_fname}, #{b_fsize}, #{b_fname_en}
            </if>
        )
    </insert>
</mapper>

VIEW

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!-- ${name} 과 같은 방식으로 데이터를 불러올 수있고-->
<!-- jstl 을 이용하면 기존 jsp 보다 가독성이 높게 반복문과 같은 구조를 짤 수 있다-->
<c:forEach items="${boardList }" var="board">
<tr>
    <td>${board.seq }</td>
    <td align="left"><a href="getBoard?seq=${board.seq }">${board.title }</a></td>
    <td>${board.writer }</td>
    <td><fmt:formatDate value="${board.regDate }" pattern="yyyy-MM-dd"/></td>
    <td>${board.cnt }</td>
</tr>
</c:forEach>