본문 바로가기

BackEnd/Spring

[코드로 배우는 스프링 웹 프로젝트] java spring 책 입력 기능 만들기

728x90
반응형

1. 책 입력 기능 : 책 정보를 입력하기 위해 기능을 만듭니다.

 

2. 책 매퍼 XML 생성 : 쿼리를 작성하는 XML 파일 생성

   ▷ src/main/resources/ 우클릭 → new → folder → sqlmap 디렉터리 생성


폴더와 XML파일을 아래와 같이 생성합니다.


◎ sqlmap 디렉터리 → new → other → XML 파일 → 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> ​​​​</mapper>

 

 

3. 책 DAO 클래스 생성

   ▷ 매퍼 XML을 실행시키는 DAO(Data Access Object) 클래스를 생성

 

◎ src/main/java → sample.spring.codehows 패키지 우클릭 후 BookDao 클래스 생성

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; ​​​​ ​​​​// 책 데이터 입력 쿼리를 실행하는 DAO 메소드 ​​​​public int insert(Map<String, Object> map) { ​​​​​​​​return this.sqlSessionTemplate.insert("book.insert", map); ​​​​} ​​​​}

 

 

4. 책 서비스 클래스 생성

   ▷ 서비스 클래스는 비즈니스 클래스가 위치하는 곳. 스프링MVC 구조에서 서비스 클래스는 컨트롤러와 DAO를 연결하는 역할

 

◎ src/main/java → sample.spring.codehows 패키지 우클릭 후 BookServiceImpl 클래스 생성

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; ​​​​} ​​​​}

 


위와 같이 오류난 부분에 마우스를 올린 후 BookService 인터페이스를 만들어줍니다.

 

 

5. 책 서비스 인터페이스 생성(BookService)

인터페이스의 경로는 src/main/java/sample/spring/codehows 입니다.

package sample.spring.codehows; import java.util.Map; public interface BookService { ​​​​// 서비스 인터페이스에 메소드 시그니쳐 추가 ​​​​String create(Map<String, Object> map); ​​​​​​​​}

 

 

6. 책 입력 기능 컨트롤러 서비스 빈 추가(BookController 클래스 생성)

   ▷ 경로 : src/main/java → sample.spring.codehows  BookController 클래스 생성

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; @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; ​​​​} ​​​​}

 

 

 

7. 브라우저 접속 : http://localhost:8080/create


값을 입력하고 저장을 누르면 아래와 같이 404에러가 나타나지만 SQL에는 데이터가 입력된 것을 확인할 수 있습니다.


◎ 데이터가 입력된 테이블 확인

 

create jsp파일을 생성한 것을 xml 파일을 통해 데이터베이스 작성하고 연결하면 됩니다.

 

404에러가 나타나지만 MySQL에 데이터는 전달됩니다.

 

데이터 연결해서 페이지 변경되는 예제도 한 번 해볼게요!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형