본문 바로가기
IT/Java

spring 예제 part.7

by 성준하이 2021. 12. 21.
반응형

이번 시간엔 저번 포스팅에서 설정한 데이터베이스로 쿼리를 날려볼것이다.

그러기 위해서는 mybatis를 사용하고 xml파일을 통해서 쿼리를 저장해야한다.

  • sql 을 적을 xml파일생성 > book.xml
    (그 안에 mapper 태그를 생성하여 쿼리를 입력해준다.)
    위치는 src/main/resources 안에 sqlmap이라는 폴더를 생성후에 그 폴더 안에 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">
</mapper>

쿼리 하나하나가 이 mapper 사이로 들어갈것이다.

 

  • insert sql 구문 작성
<insert id="insert" parameterType="hashMap"useGeneratedKeys="true" keyProperty="book_id">
<![CDATA[    
insert into book    (title, category, price)     values    (#{title}, #{category}, #{price})    
]]>
</insert>

( <![CDATA[  -> 쿼리 안에 쉼표나 샾 등 기호를 구분하기 위해서 사용되는 표현식)

 

  • 쿼리 실행 할 BookDao.java 파일 생성(src/main/java/com/example/spring/BookDao.java)
  • insert 메서드 기입
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);
  }
}

어노테이션 간단하게 설명을 하면

@Repository 는 bean객체를 생성하기 위한 어노테이션이라고 생각하면 되고

@Autowired 는 의존성 주입을 위한 어노테이션이다.

 

  • 서비스 클래스 생성 (src/main/java/com/example/spring/BookService.java 와 BookServiceImpl.java)

근데 여기서 impl파일은 bookservice를 implements 받을것이기에 bookservice를 class단이 아닌 interface로 만들어줘야한다.

그리고 impl파일을 다음처럼 정의를 내려보자

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl implements BookService { 
   @Autowired 
   BookDao bookDao;

서비스라는 클래스와 bean을 위한 어노테이션인 @Service와

의존성 주입을 위한 @Autowired 어노테이션이 들어가있다.

 

  • serviceImpl.java 파일에 bookdao.insert 메서드 실행시킬 서비스 메서드 작성
@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;
}

 

  • Service interface 에 슈퍼타입 지정
    (바로 윗단계 까지 하면 create 메서드에 빨간줄이 날것이다.
    해결하기 위해서는 상위 service interface파일에서 슈퍼타입을 지정해줘야한다.)
String create(Map<String, Object> map);

빨간줄 처음에 있는 create ' create()'.... 을 눌러줘도 자동으로 생기긴 한다. :)

 

  • Controller에서 서비스를 호출받을 service 빈 추가
  • 책 입력을 위한 컨트롤러 메서드 추가
@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;
}
  • localhost:8080/create에서 데이터 입력시 이동할 화면이 없어서 404 error가 나지만 데이터베이스에는 입력이 되어있는것 확인
반응형

'IT > Java' 카테고리의 다른 글

spring 예제 part.9  (0) 2021.12.23
spring 예제 part.8  (1) 2021.12.22
spring 예제 part.6  (1) 2021.12.20
spring 예제 part.5  (1) 2021.12.19
spring 예제 part.4  (1) 2021.12.17

댓글