반응형
이번 시간엔 저번 포스팅에서 설정한 데이터베이스로 쿼리를 날려볼것이다.
그러기 위해서는 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 |
댓글