스프링 웹 프로젝트 MVC - 책 입력 기능 만들기 03
책 매퍼 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>
</mapper>
책 DAO 클래스 생성
매퍼 XML을 실행시키는 DAO(Data Access Object) 클래스를 생성한다. src/main/java 하위 항목 sample.spring.yse 패키지를 우클릭해서 BookDao 클래스를 만들면 된다.
클래스 생성 후 아래 코드를 입력한다.
책 데이터 입력 쿼리를 실행하는 DAO 메소드를 만든다.
서비스 클래스는 비즈니스 클래스가 위치하는 곳이다. 스프링MVC 구조에서 서비스 클래스는 컨트롤러와 DAO를 연결하는 역할을 한다.
// BookDao.java
package sample.spring.codhows;
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);
}
}
책 서비스 인터페이스 생성
책 서비스 클래스에서 선언한 BookService 인터페이스를 생성한다. 서비스 인터페이스는 직접 탐색기에서 생성하지 않고 클래스에서 생성하는 방법을 취한다.
서비스 클래스 BookServiceImpl.java 의 BookService 부분에 빨간 줄이 가 있을 것이다. 빨간 줄 위에 마우스를 올린다. 이후 팝업 메뉴가 나오면 create interface 'BookService' 항목을 클릭한다.
일단 생성후 나중에 입력
책 입력 기능 서비스 인터페이스 메소드 시그니쳐 생성
이클립스에서는 상위 인터페이스에 메소드 시그니쳐가 없을 경우 오류를 표시해 주면서 자동으로 인터페이스 시그니쳐를 만들어주는 기능이 있다. 이 기능을 이용하기 위해 @Override 어노테이션을 사용한다.
서비스 메소드 빨간 줄에 마우스를 올리고 create 'create' in super type 'BookService' 를 클릭한다.
// BookServiceImpl.java
package sample.spring.codhows;
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;
}
}
누르면
create() 생성 하기
String create(Map<String, Object> map); << 생성됨
책 입력 기능 컨트롤러 서비스 빈 추가
src/main/java/sample/spring/yse/BookController.java
@Autowired
BookService bookService;
책 입력 기능 컨트롤러 메소드 추가
서비스를 이용해 책을 입력하는 컨트롤러 메소드를 만든다.
src/main/java/sample/spring/yse/BookController.java
@RequestMapping(value = "/create", method = RequestMethod.POST)
public ModelAndView createPost(@RequestParam Map<String, Object> map) {
ModelAndView mav = new ModelAndView();
String bookId = this.bookService.create(map);
if (bookId == null) {
mav.setViewName("redirect:/create");
}else {
mav.setViewName("redirect:/detail?bookId=" + bookId);
}
return mav;
}
전부 입력후 >>
// BookController.java
package sample.spring.codhows;
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;
@Controller
public class BookController {
@RequestMapping(value="/create", method=RequestMethod.GET)
public ModelAndView create() {
return new ModelAndView("book/create");
}
@Autowired
BookService bookService;
@RequestMapping(value = "/create", method = RequestMethod.POST)
public ModelAndView createPost(@RequestParam Map<String, Object> map) {
ModelAndView mav = new ModelAndView();
String bookId = this.bookService.create(map);
if (bookId == null) {
mav.setViewName("redirect:/create");
}else {
mav.setViewName("redirect:/detail?bookId=" + bookId);
}
return mav;
}
}
아직 상세 페이지는 만들지 않았기 때문에 데이터가 입력되더라도 브라우저에서는 http 404 not found 오류가 난다.
정상이다.
데이터 입력이 성공했는지 DBMS에서 확인