https://blog.naver.com/drv982/222914637144
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>
- namespace 항목은 쿼리가 여러 개일 때 이름 공간을 분리하는 역할을 한다
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">
<!-- 자동 증가 옵션이 있는 book_id를 만듬 -->
<insert id="insert" parameterType="hashMap"
useGeneratedKeys="true" keyProperty="book_id">
<![CDATA[
insert into book
(title, category, price)
values
(#{title}, #{category}, #{price})
]]>
</insert>
</mapper>
사용하는 데이터베이스가 Mysql과 같이 자동생성 키를 지원한다면 useGeneratedKeys, keyProperty 옵션을 통해 insert 된 데이터의 key 값을 리턴 받을 수 있습니다.
- useGeneratedKeys : (insert, update에만 적용) 자동생성 키를 받을때 true로 설정한다. (default: false)
- keyProperty : 리턴 될 key property 설정. 여러개를 사용한다면 ,(콤마)를 구분자로 나열한다.
<![CDATA[...]]>
쿼리를 작성할 때, '<', '>', '&'를 사용해야하는 경우가 생기는데 xml에서 그냥 사용할 경우 태그로 인식되어 에러가 나게 된다. 실제 쿼리에 필요한 코드'라고 알려줘야 한다. 그때 사용하는 것이
<![CDATA[...]]> 이다.
title , category ,price는 어떻게 값을 받아오나??
Map Type = key ,value 로 구성되어있음
예)
- key= title
- value = "제목입니다."
insert시
hashMap으로 담아서 넘겨주면 title,category ,price 키에 해당되는 값이 들어옴
hashMap의 장점
원하는 만큼 값을 넣을 수 있음.
BookDAO 생성
DB연결 객체도 컨트롤러와 같이 어노테이션으로 함
package com.demo.sample;
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 sqlSessionTemplate.insert("book.insert",map);
}
}
- sqlSessionTemplate.insert 메소드의 첫번째 파라미터는 SQL Mapper의 id다.
- book_SQL.xml 파일에서 namespace="book", id="insert"였다
- MyBatis는 네임스페이스+id 조합으로 쿼리를 찾아서 실행한다
- 따라서 book.insert가 매퍼 쿼리 이름이 된다
리턴되는 int의 값은 입력/삭제/업데이트를 할때 숫자로 몇개의 행이 입력/삭제/업데이트 되었는지 리턴
root-context.xml 에서 등록됨. sqlSessionTemplate
sql을 실행하는 객체임.
여기서 말하는 insert는 book_sql.xml의 id insert임
parameterType="hashMap" 입력값은 hashMap
service layer 를 거쳐서 controller로 보낸다.
그래서
service layer를 만들어 줘야함
바로 @(어노테이션)service 해주면 service로 등록이 됨.
인터페이스로 선언하고 BookService 인터페이스 생성
생성된 BookSerevice 인터페이스
package com.demo.sample;
import java.util.Map;
public interface BookService {
String create(Map<String, Object> map);
}
BookServiceImple
package com.demo.sample;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImple 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;
}
}
BookControll
getmapping 하단에
postMapping 생성함
@PostMapping("/create")
public String createPost(@RequestParam Map<String, Object> map) {
String bookId = bookService.create(map);
if (bookId == null) {
return "redirect:/create";
}else {
return "redirect:/detail?bookId=" + bookId;
}
}
정리하기
흐름 파악하기
CONTROLLER -> SERVICE -> DAO -> DB
DB-> DAO -> SERVICE -> CONTROLLER
create.jsp
폼 태그의 이름으로 파라미터가 넘어감
action 주소가 없음.
주소가 없을 경우 현재 주소 ,
에서 바로 Post로 감
bookcontroll post로 감
requsetparam title = "____" , category ="____" ,price ="____" 으로 Map타입으로 들어옴 키:값
BookController 에서 맵 타입으로 자료들을 받아서 Bookservice.create로 간다
BookService이동
BookServiceImple에서 bookDao를 통해 DB에 접근한다.
bookDao는 book_SQL.xml에 접근한다.
book.SQL.xml
(#{title}, #{category}, #{price})
Map에 있는 key값이 자동으로 들어간다
book.SQL.xml 에서 입력된 쿼리문으로 작업을 진행
BookServiceImple으로 넘어가서
만약 정상적으로 테이블에 1개가 입력이 되면 map타입으로 book_id를 문자열로 리턴한다.
(object타입이라서 )
그리고 잘 들어가면 bookId 파라미터 값을 가지고
redirect = 새롭게 다시 요청
redirect와 foward 차이
https://dev-handbook.tistory.com/35
controller 로 즉 detail.jsp 페이지로 넘어간다.
저장을 누르면
http://localhost:8080/detail?bookId=4 으로 이동함
detail 페이지는 아직 구현 안해서 404 에러 뜨는거 맞는거임
한 권 더 추가해보기
bookid=5
'BACKEND > Spring' 카테고리의 다른 글
DB연결 - 책 수정 화면 (UPDATE) (0) | 2023.10.20 |
---|---|
DB연결 - 책 상세 보기 (SELECT) (0) | 2023.10.19 |
LegacyProject 시작하기 , DB 연결을 위한 라이브러리 추가 (1) | 2023.10.19 |
레거시 프로그램 설치 및 기본 설정 (0) | 2023.10.19 |
DI - 자동 주입 (1) | 2023.10.19 |