Spring

스프링 웹 프로젝트 MVC - 책 입력 기능 만들기 03

록's 2023. 3. 16. 09:46
728x90
반응형

책 매퍼 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에서 확인

 

 

728x90
반응형