스프링을 모르는 사람들에게. CRUD 2
게시판 목록을 화면에 띄워보자.
- src/main/webapp/web-INF/views에 폴더를 새로 만들자.
- 그 후 jsp 파일을 만든다.
home.jsp 코드를 바꿔주자.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>
메인페이지
</h1>
<P> The time on the server is ${serverTime}. </P>
<a href='<c:url value='/board/list'/>' role="button" class="btn btn-outline-info">들어가기</a>
</body>
</html>
list.jsp에서 코드를 바꿔주자.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<meta charset="UTF-8">
<title>list</title>
</head>
<body>
<form name="userForm">
<h1>List page</h1>
<table>
<thead>
<tr>
<th scope="col">번호</th>
<th scope="col">ID</th>
<th scope="col">성함</th>
<th scope="col">목표</th>
<th scope="col">작성일</th>
<th scope="col">작성시간</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="list">
<tr>
<td class="text_ct">${list.no} </td>
<td class="text_ct">${list.id} </td>
<td class="text_ct">${list.name} </td>
<td class="text_ct">${list.goal} </td>
<td class="text_ct"><fmt:formatDate value="${list.date}" pattern="yyyy/MM/dd" /></td>
<td class="text_ct"><fmt:formatDate value="${list.time}" pattern="HH:mm:ss" /></td>
</tr>
</c:forEach>
</tbody>
</table>
</form>
</body>
</html>
board 폴더에 list.jsp를 만들었으니 이 board페이지로 이동시켜줄 controller를 만든것이다.
package com.myproject.myapp;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.board.domain.BoardVO;
@Controller
@RequestMapping("/board/*")
public class BoardController {
@RequestMapping(value="/list", method=RequestMethod.GET) //url mapping
public void getList() throws Exception{
}
}
boardMapper.xml
- 이제 DB안에 있는 내용을 불러오자.
- 다시 한번 말하지만 여기는 쿼리문을 작성하는 곳이다.
<?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="com.board.mappers.board">
<!-- 게시물 목록 -->
<select id="list" resultType="com.board.domain.BoardVO">
select
no, id, name, goal, date, time
from i_can_do_it
</select>
</mapper>
DAO 생성
- HTTP Request를 Web Application이 받게 되면 Thread를 생성하게 되는데 비즈니스 로직이 DB로부터 데이터를 얻어오기 위해 매번 Driver를 로드하고 Connection 객체를 생성하게 되면 엄청 많은 커넥션이 일어난다.
- 그래서 DAO를 하나 만들어 DB 전용 객체로만 쓰기 위해 dao package 를 만들어준다.
- src/main/java 하위에 만들어준다.
package com.board.dao;
import java.util.List;
import com.board.domain.BoardVO;
public interface boardDAO {
public List<BoardVO> list();//조회
}
클래스 추가
package com.board.dao;
import java.util.List;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import com.board.domain.BoardVO;
@Repository
public class boardDAOImpl implements boardDAO {
@Inject
private SqlSession sql;
private static String namespace = "com.board.mappers.board";
// 게시물 목록
// @Override
public List<BoardVO> list() {
return sql.selectList(namespace + ".list");
}
}
Service 생성
- Service는 비지니스 로직이 들어가는 부분이다. Controller가 Request를 받으면 적절한 Service에 전달하고, 전달 받은 Service는 비즈니스 로직을 처리한다. DAO로 데이터베이스를 접근하고, DTO로 데이터를 전달받은 다음, 적절한 처리를 해 반환한다.
package com.board.service;
import java.util.List;
import com.board.domain.BoardVO;
public interface boardService {
public List<BoardVO> list();
}
package com.board.service;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.board.dao.boardDAO;
import com.board.domain.BoardVO;
@Service
public class boardServiceImpl implements boardService {
@Inject
private boardDAO dao;
// 회원 목록
@Override
public List<BoardVO> list() {
return dao.list();
}
}
BoardController.java
- VO를 list로 받아와서 service를 연결시켜주는 코드를 추가해준다.
package com.myproject.myapp;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.board.domain.BoardVO;
import com.board.service.boardService;
@Controller
@RequestMapping("/board/*")
public class BoardController {
@Inject
private boardService service;
@RequestMapping(value="/list", method=RequestMethod.GET) //url mapping
public String getList(Model model) throws Exception{
List<BoardVO> list = service.list();
model.addAttribute("list", list);
//board/list.jsp로 포워딩
return "board/list";
}
}
root-context.xml
- domain, dao, service를 사용하겠다고 선언한다.
<context:component-scan base-package="com.board.domain" />
<context:component-scan base-package="com.board.dao" />
<context:component-scan base-package="com.board.service" />
Leave a comment