책 상세 화면 만들기
책 상세 정보를 보여주기 위한 화면을 만든다.
책 상세 쿼리 작성
책 상세 화면을 조회하는 쿼리를 작성한다.
매퍼 XML에 쿼리를 옮긴다.
src/main/resources/sqlmap/book_SQL.xml
// book_SQL.xml
<?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="book">
<insert id="insert" parameterType="hashMap" useGeneratedKeys="true" keyProperty="book_id">
<![CDATA[
insert into book
(title, category, price)
values
(#{title}, #{category}, #{price})
]]>
</insert>
<select id="select_detail" parameterType="hashMap" resultType="hashMap">
<![CDATA[
select
title,
category,
price,
insert_date
from
book
where
book_id = #{bookId}
]]>
</select>
</mapper>
책 상세 DAO 메소드 작성
src/main/java/sample/spring/codehows/BookDao.java
// BookDao.java
package sample.spring.codehows;
import java.util.Map;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class BookDao {
@Autowired
SqlSessionTemplate sqlSessionTemplate;
public int insert(Map<String, Object> map) {
return this.sqlSessionTemplate.insert("book.insert", map);
}
>> 추가
public Map<String, Object> selectDetail(Map<String, Object> map) {
return this.sqlSessionTemplate.selectOne("book.select_detail", map);
}
}
sqlSessionTemplate 의 selectOne 메소드는 데이터를 한 개만 가져올 때
쿼리 결과 행 수가 0개면 selectOne 메소드는 null을 반환
쿼리 결과가 여러 개면 TooManyResultsException 예외 발생
책 상세 서비스 클래스 메소드 생성
src/main/java/sample/spring/codehows/BookServiceImpl.java
package sample.spring.codehows;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl implements BookService {
@Autowired
BookDao bookDao;
@Override
public String create (Map<String, Object> map) {
int affectRowCount = this.bookDao.insert(map);
if(affectRowCount == 1) {
return map.get("book_id").toString();
}
return null;
}
>>> 추가
@Override
public Map<String, Object> detail(Map<String, Object> map) {
return this.bookDao.selectDetail(map);
}
}
detail 쪽 마우스 놔두고 create() 하면 생성
쿼리 스트링
책 상세 화면의 URI는 /detail?bookId=1 형식이다.
주소창을 통해 파라미터가 서버로 전달되는 형태를 쿼리 스트링(Query String)이라고 부른다.
HTTP 규격에서 쿼리 스트링은 URL(Uniform Resource Locator) 끝에 ?로 시작한다. 각 항목은 &로 이어지며, 개별 항목의 키와 값은 =로 구분하게 된다.
ex) /sample/test?a=1&b=2 웹 주소가 있다고 해 보면 아래와 같다.
- URL : /sample/test
- 쿼리 스트링 : ?a=1&b=2
- 쿼리 스트링의 시작 : ?
- 쿼리 스트링의 항목 구분 : &
- 쿼리 스트링의 항목들 : a=1 ,b=2
- URI : /sample/test?a=1&b=2
책 상세 컨트롤러 메소드 추가
책 상세 URL이 입력되면 실행되는 메소드를 작성
// BookController.java
package sample.spring.codehows;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
... (생략) ...
@RequestMapping(value = "/detail", method = RequestMethod.GET)
public ModelAndView detail(@RequestParam Map<String, Object> map) {
Map<String, Object> detailMap = this.bookService.detail(map);
ModelAndView mav = new ModelAndView();
mav.addObject("data", detailMap);
String bookId = map.get("bookId").toString();
mav.addObject("bookId", bookId);
mav.setViewName("/book/detail");
return mav;
}
}
@RequestParam 어노테이션에 의해 쿼리 스트링 파라미터를 읽을 수 있다.
스프링은 http 메소드를 구분하지 않고 파라미터를 GET, POST 동일한 방법으로 읽을 수 있게 한다.
책 상세 뷰 작성
detail.jsp 뷰 파일을 생성한다.
src/main/webapp/WEB-INF/views/book/detail.jsp
// detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>책 상세</title>
</head>
<body>
<h1>책 상세</h1>
<p>제목 : ${ data.title } </p>
<p>카테고리 : ${ data.category } </p>
<p>가격 : <fmt:formatNumber type="number" maxFractionDigits="3" value="${ data.price }" /></p>
<p> 입력일 : <fmt:parseDate value="${data.insert_date}" var="dateFmt" pattern="yyyymmdd"/>
<fmt:formatDate value="${dateFmt}" pattern="yyyy-MM-dd"/></p>
<p>
<a href="/update?bookId=${bookID}">수정</a>
</p>
<form method="POST" action="/delete">
<input type="hidden" name="bookId" value="${bookId}" />
<input type="submit" value="삭제" />
</form>
<p>
<a href="/list">목록으로</a>
</p>
</body>
</html>
책 상세 화면 확인하기
서버를 클릭하고 ctrl + alt + d를 눌러 디버깅 모드로 시작하거나 ctrl + alt + s를 눌러 서버 모드로 시작한다.
브라우저에 http://localhost:8080/detail?bookId=1 주소로 접속해서 화면이 나오는지 확인
시간을 넣을려고 했으나 오류 문제로 시간을 지움.
(넣는 방법 알게 되면 시간 추가예정)
'Spring' 카테고리의 다른 글
스프링 웹 프로젝트 MVC - 책 삭제 기능 만들기 06 (0) | 2023.03.17 |
---|---|
스프링 웹 프로젝트 MVC - 책 수정 화면 만들기, 수정 기능 만들기 05 (0) | 2023.03.16 |
스프링 웹 프로젝트 MVC - 프로젝트 세팅 00 (0) | 2023.03.16 |
스프링 웹 프로젝트 MVC - 책 데이터베이스 준비하기 02 (0) | 2023.03.16 |
스프링 웹 프로젝트 MVC - 책 입력 기능 만들기 03 (0) | 2023.03.16 |