본문 바로가기
Spring

[Spring] MyBatis(2) 메인페이지 -> 공지사항 목록 페이지

by moca7 2024. 10. 21.

 

 

 

ㅁ 실제 db 연동을 해본다.

 

 

 

ㅁ src/main/webapp/WEB-INF/views에 main.jsp 수정

 

 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

    <h2>메인페이지</h2>

    <a href="${ contextPath }/notice/list.do">공지사항 목록페이지로 이동</a>
   
</body>
</html>
 

 

 

 

 

 

ㅁ NoticeContoller

 

 
package com.br.sbatis.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.br.sbatis.dto.NoticeDto;
import com.br.sbatis.service.NoticeService;

import lombok.RequiredArgsConstructor;

@RequestMapping("/notice")
@RequiredArgsConstructor
@Controller
public class NoticeController {

   
    private final NoticeService noticeService;
   
    @GetMapping("/list.do")
    public void noticeList() {
        List<NoticeDto> list = noticeService.selectNoticeList();
    }
   
}

 

 

 

ㅁ NoticeServiceImpl

 

 
package com.br.sbatis.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.br.sbatis.dao.NoticeDao;
import com.br.sbatis.dto.NoticeDto;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service
public class NoticeServiceImpl implements NoticeService {
   
   
    private final NoticeDao noticeDao;
   

    @Override
    public List<NoticeDto> selectNoticeList() {
        return noticeDao.selectNoticeList();
    }

    @Override
    public NoticeDto selectNoticeByNo(int noticeNo) {
        return null;
    }

    @Override
    public int insertNotice(NoticeDto n) {
        return 0;
    }

    @Override
    public int updateNotice(NoticeDto n) {
        return 0;
    }

    @Override
    public int deleteNotice(String[] deleteNo) {
        return 0;
    }
   
   

}

 

- db연동을 해도, 우리가 close할 필요 없다.

 

 

 

ㅁ NoticeDao

 

 
package com.br.sbatis.dao;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

import com.br.sbatis.dto.NoticeDto;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Repository
public class NoticeDao {
   
    private final SqlSessionTemplate sqlSession;
   
   
    public List<NoticeDto> selectNoticeList() {
        return sqlSession.selectList("noticeMapper.selectNoticeList");
    }
   

}

 

- 완성된 sql문이라 매개변수 하나짜리 selectList() 메소드를 사용한다.

 

 

 

 

ㅁ notice-mapper.xml

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


    <resultMap id="noticeResultMap" type="NoticeDto">
        <result column="no" property="no" />
        <result column="title" property="title" />
        <result column="content" property="content" />
    </resultMap>

 
    <select id="selectNoticeList" resultMap="noticeResultMap">
        select
                no
              , title
              , content
          from  notice
         order
            by  no desc        
    </select>
 
</mapper>

 

- 지금은 컬럼명과 필드명이 같아서 resultMap을 작성하지 않아도 되지만, 나중에는 다른 경우가 많다.

resultMap도 만든다.

- resultMap의 type에는 풀클래스명이나 별칭이 와야 한다.

 

 

 

 

ㅁ NoticeController 수정

 

 
package com.br.sbatis.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.br.sbatis.dto.NoticeDto;
import com.br.sbatis.service.NoticeService;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RequestMapping("/notice")
@RequiredArgsConstructor
@Controller
public class NoticeController {

   
    private final NoticeService noticeService;
   
    @GetMapping("/list.do") // /notice/list.do
    public void noticeList(Model model) {
        List<NoticeDto> list = noticeService.selectNoticeList();
        log.debug("list: {}", list);
        model.addAttribute("list", list);
       
        // return "notice/list"; void여도 포워딩하려 한다. url mapping("/notice/list")를 가지고 ~
       
       
    }
   
}

 

- 응답 데이터 확인을 위해 로그를 찍어보고 싶을 때 Logger 객체를 내가 직접 필드로 선언해서 써도 되지만,

Lombok을 사용 중이라면 클래스 위에 @Slf4j 어노테이션을 붙이는 것만으로 log 객체를 사용할 수 있다.

- log.info(), log.debug() 등의 메서드를 통해 쉽게 로그를 출력할 수 있다.

 

 

 

 

ㅁ list.jsp

 

 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

    <h3>공지사항 목록 페이지</h3>

    <c:choose>
        <c:when test="${ empty list }">
            존재하는 공지사항이 없습니다
        </c:when>
       
        <c:otherwise>
            <table border="1">
                <thead>
                    <tr>
                        <th>번호</th>
                        <th>제목</th>
                        <th>내용</th>
                    </tr>
                </thead>
               
                <tbody>
                    <c:forEach var="n" items="${ list }">
                        <tr>
                            <td>${ n.no }</td>
                            <td>${ n.title }</td>
                            <td>${ n.content }</td>
                        </tr>
                    </c:forEach>
                </tbody>
            </table>
        </c:otherwise>
    </c:choose>

</body>
</html>

 

 

 

 

 

'Spring' 카테고리의 다른 글

[Spring] MyBatis(3) 자리 옮김  (0) 2024.10.21
[Spring] MyBatis(1) 세팅  (0) 2024.10.21
[Spring] MVC2 (6) ajax5 - 6번째 버튼  (0) 2024.10.21
[Spring] MVC2 (5) ajax4 - 5번째 버튼  (0) 2024.10.21
[Spring] MVC2 (4) ajax3 - 4번째 버튼  (0) 2024.10.21