일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스프링부트
- 게시판프로젝트
- java
- 정처기예상문제
- function
- 게시판
- 자바의정석요약
- 정보처리기사
- spring
- 소프트웨어개발
- PYTHON
- springboot
- 코딩테스트
- 스프링
- 정처기
- 어노테이션
- 자바의정석
- 프로그래머스
- 정처기설명
- CRUD구현
- 파이선
- 정처기필기
- 자바
- 소프트웨어설계
- 파이썬
- CRUD
- 정보처리기사필기
- 게시판만들기
- 이것이자바다
- 정처기공부
- Today
- Total
Helmi
게시판 프로젝트 - CRUD 구현 ② 영속 영역 CRUD 구현, INSERT 본문
웹 프로젝트 구조에서 마지막 영역이 영속 영역이지만 실제 구현 가장 먼저 할 수 있는 영역도 영속 영역
기본적으로 CRUD 작업 하므로 테이블과 VO(DTO)등 약간의 준비만으로도 비즈니스 로직과 무관히 CRUD 작업 작성 가능
MyBatis는 내부적으로 JDBC의 PreparedStatement 활용하고 필요한 파라미터 처리하는 '?'에 대한 치환은 '#{속성}' 이용해 처리
1. create(insert) 처리
자동으로 PK값 정해지는 경우 다음과 같은 2가지 방식으로 처리 가능
1) insert만 처리되고 생성된 PK값 알 필요 없는 경우
2) insert문 실행되고 생성된 PK값 알아야 하는 경우
com.board.mapper.BoardMapper.java 인터페이스 일부
package com.board.mapper;
import java.util.List;
import com.board.domain.BoardVO;
public interface BoardMapper {
//@Select("select * from tbl_board where bno > 0")
public List<BoardVO> getList();
public void insert(BoardVO board);
public void insertSelectKey(BoardVO board);
}
BoardMapper.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 ="com.board.mapper.BoardMapper">
<select id ="getList" resultType="com.board.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno > 0
]]>
</select>
<insert id="insert">
insert into tbl_board (bno, title, content, writer)
values (seq_board.nextval, #{title}, #{content}, #{writer})
</insert>
<insert id = "insertSelectKey">
<selectKey keyProperty = "bno" order="BEFORE"
resultType="long">
select seq_board.nextval from dual
</selectKey>
insert into tbl_board (bno, title, content, writer )
values (#{bno}, #{title}, #{content}, #{writer})
</insert>
</mapper>
BoardMapper의 insert()는 단순히 시퀀스의 다음 값 구해서 insert 할 때 사용
insert문은 몇 건의 데이터가 변경되었는지만 알려줌 - 추가된 데이터의 PK값 알 수 없으나 1번의 SQL 처리만으로 작업 완료되는 장점이 있음.
insertSelectKey()는 @SelectKey라는 MyBatis의 어노테이션 이용
@SelectKey는 주로 PK값 미리(before) SQL 통해 처리해두고 특정 이름으로 결과 보관하는 방식
@Insert 할 때 SQL문 보면 #{bno} 같이 이미 처리된 결과 이용하는 것 볼 수 있음
BoardMapperTests.class 일부
@Test
public void testInsert() {
BoardVO board = new BoardVO();
board.setTitle("새로 작성하는 글");
board.setContent("새로 작성하는 내용");
board.setWriter("newbie");
mapper.insert(board);
log.info(board);
}
테스트 코드의 마지막에 log.info(board) 작성한 이유는 Lombok이 만들어주는 toString() 이용해 bno 멤버 변수(인스턴스 변수) 값 알아보기 위함.
@SelectKey 테스트 코드
@Test
public void testInsertSelectKey() {
BoardVO board = new BoardVO();
board.setTitle("새로 작성하는 글 select key");
board.setContent("새로 작성하는 내용 select key");
board.setWriter("newbie");
mapper.insertSelectKey(board);
log.info(board);
}
@SelectKey 이용하는 방식은 SQL을 한 번 더 실행하는 부담이 있으나 자동으로 추가되는 PK 값을 확인해야 하는 상황에서는 유용하게 사용 가능
'SpringBoot' 카테고리의 다른 글
게시판 프로젝트 - CRUD 구현 ④ 영속 영역 CRUD 구현, DELETE (0) | 2023.04.30 |
---|---|
게시판 프로젝트 - CRUD 구현 ③ 영속 영역 CRUD 구현, READ(SELET)처리 (0) | 2023.04.29 |
게시판 프로젝트 - CRUD 구현 ①영속 계층 구현 준비 (0) | 2023.04.27 |
게시판 프로젝트 - database(oracle) (0) | 2023.04.26 |
게시판 프로젝트 - pom.xml 설정 (0) | 2023.04.26 |