2022_02_13 - oneso123456789/2022 GitHub Wiki
๊นจ๋ํ ์ฝ๋๋ฅผ ์ํ 5๊ฐ์ง ํ
https://www.youtube.com/watch?v=Jz8Sx1XYb04
๋ณ์๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ํ๋ฒ์ ์์์๋ ์ด๋ฆ
EX:์ ์ ๋ฐ์ดํฐ X ์ ์ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ O
ํจ์๋ ๋ฌด์กฐ๊ฑด ํ๊ฐ์ง ์ก์
๋ง์ ์ํํด์ผํจ
๋ง์ฝ ์ด์ฉ์์์ด ๋ง์ ์ธ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด configuration object๋ก ์ ๋ฆฌํด์ parm์ฌ์ฉํ๊ธฐ
์ถ์ฒํ๋๊ฒ์ ๊ฐ๊ฐ์ if-else ๊ฐ์ ๋ค๋ฅธ ํจ์๋ก ๋ถ๋ฆฌํ๋๊ฒ์
ex:e X email O
๋ฒ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํ๋ ์ฝ๋ฉ ์ด๋ฐ๋ถ์๋ ์ฐ์ ๋์๊ณผ ์๋์ ์ด์ ์ ๋ง์ถฐ์ ์์
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ ๊น๋ํ๊ฒ ์ฝ๋ฉ์ ๋ฆฌํ๋๊ฒ์ด ์ข์
์น ํ๋ก์ ํธ ๊ตฌ์กฐ์์ ๋ง์ง๋ง ์์ญ์ด ์์์์ญ์ด์ง๋ง,
์ค์ ๋ก ๊ตฌํ์ ๊ฐ์ฅ ๋จผ์ ํ ์ ์๋ ์์ญ๋ ์์ ์์ญ์.
์์ ์์ญ์ ๊ธฐ๋ณธ์ ์ผ๋ก CRUD ์์
์ ํ๊ธฐ ๋๋ฌธ์ ํ
์ด๋ธ๊ณผ VO(DTO) ๋ฑ ์ฝ๊ฐ์
์ค๋น๋ง์ผ๋ก๋ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฌด๊ดํ๊ฒ CRUD ์์
์ ์์ฑํ ์ ์์
MyBatis๋ ๋ด๋ถ์ ์ผ๋ก JDBC์ PreparedStatement๋ฅผ ํ์ฉํ๊ณ ํ์ํ
ํ๋ผ๋ฏธํฐ๋ฅผ ์ฒ๋ฆฌํ๋ '?'์ ๋ํ ์นํ์ #{์์ฑ}
์ ์ด์ฉํด์ ์ฒ๋ฆฌํจ
tbl_board ํ
์ด๋ธ์ PK ์นผ๋ผ์ผ๋ก bno๋ฅผ ์ด์ฉํ๊ณ ,
์ํ์ค๋ฅผ ์ด์ฉํด์ ์๋์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๋ ๋ฒํธ๊ฐ ๋ง๋ค์ด์ง๋ ๋ฐฉ์ ์ฌ์ฉ
์ด์ฒ๋ผ ์๋์ผ๋ก PK๊ฐ์ด ์ ํด์ง๋ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๊ฐ๋ฅ
- insert๋ง ์ฒ๋ฆฌ๋๊ณ ์์ฑ๋ PK ๊ฐ์ ์ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ
- insert๋ฌธ์ด ์คํ๋๊ณ ์์ฑ๋ pk ๊ฐ์ ์์์ผ ํ๋ ๊ฒฝ์ฐ
BoardMapper ์ธํฐํ์ด์ค์๋ ์์ ์ํฉ์ ๊ณ ๋ คํด์ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์๋๋ฅผ ์ถ๊ฐํจ
public interface BoardMapper {
// mapper.xml์ฌ์ฉ์ผ๋ก ์ธํด ์ฃผ์์ฒ๋ฆฌ @Select("select * from tbl_board where bno > 0")
public List<BoardVO> getList();
public void insert(BoardVO board);
public void insertSelectKey(BoardVO board);
}
<?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.crow.mapper.BoardMapper">
<select id="getList" resultType="com.crow.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}์ ๊ฐ์ด ์ด๋ฏธ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์์
์ฐ์ insert()์ ๋ํ ํ
์คํธ ์ฝ๋๋ฅผ src/test/java ๋ด์ BoardMapperTests ํด๋์ค์
์๋ก์ด ๋ฉ์๋๋ก ์์ฑํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์
@Test
public void testInsert() {
BoardVO board = new BoardVO();
board.setTitle("testInsert๋ฌธ ์ ๋ชฉ์ด๋ผ๊ตฌ");
board.setContent("testInsert๋ฌธ ๋ด์ฉ์ด๋ผ๊ตฌ");
board.setWriter("testInsert๋ฌธ ์์ฑ์๋ผ๊ตฌ");
mapper.insert(board);
log.info(board);
}
ํ
์คํธ ์ฝ๋์ ๋ง์ง๋ง log.info(board)๋ฅผ ์์ฑํ ์ด์ ๋ Lombok์ด ๋ง๋ค์ด์ฃผ๋ toString()์ ์ด์ฉํด์
bno ๋ฉค๋ฒ ๋ณ์(์ธ์คํด์ค ๋ณ์)์ ๊ฐ์ ์์๋ณด๊ธฐ ์ํจ์
ํ
์คํธ ๊ฒฐ๊ณผ์ ๋ง์ง๋ง์ ์ดํด๋ณด๋ฉด BoardVO ํด๋์ค์ toString()์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์์,
bno์ ๊ฐ์ด null๋ก ๋น์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์
@SelectKey๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ ํ ์คํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์
@Test
public void testInsertSelectKey() {
BoardVO board = new BoardVO();
board.setTitle("์๋ก ์์ฑํ๋ ๊ธ select key");
board.setContent("์๋ก ์์ฑํ๋ ๋ด์ฉ select key");
board.setWriter("์๋ก์์ฑํ๋ ์ด์ฉ์");
mapper.insertSelectKey(board);
log.info(board);
}
์คํ๋๋ ๊ฒฐ๊ณผ๋ฅผ ์ดํด๋ณด๋ฉด'select seq_board.nextval from dual`๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ๋จผ์ ์คํ๋๊ณ
์ฌ๊ธฐ์ ์์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํด์ bno ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ ๋ณผ ์ ์์
BoardMapper์ insertSelectKey() @Insert ๋ฌธ์ SQL์ ๋ณด๋ฉด
'insert into tbl_board(bno,title,content,writer) values(#{bno},$#{title},#{content},#{writer})'์ ๊ฐ์ด
ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋๋ BoardVO์ bno ๊ฐ์ ์ฌ์ฉํ๊ฒ ๋์ด ์์
ํ
์คํธ ์ฝ๋์ ๋ง์ง๋ง ๋ถ๋ถ์ ๋ณด๋ฉด BoardVO ๊ฐ์ฒด์ bno ๊ฐ์ด ์ด์ ๊ณผ ๋ฌ๋ฆฌ ์ง์ ๋ ๊ฒ์ ๋ณผ ์ ์์
(์ํ์ค์ ๊ฐ์ด ํ์ฌ ํ
์คํธ ํ๋ ํ๊ฒฝ๋ง๋ค ๋ค๋ฅธ ๊ฐ์ด ๋์ด, ์ํ์ค ๊ฐ์ ์ค๋ณต ์๋ ๊ฐ์ ์ํ ๊ฒ์ผ ๋ฟ ๋ค๋ฅธ ์๋ฏธ๊ฐ ์์)
@SelectKey๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ SQL์ ํ ๋ฒ ๋ ์คํํ๋ ๋ถ๋ด์ด ์๊ธฐ๋ ํ์ง๋ง ์๋์ผ๋ก ์ถ๊ฐ๋๋
PK๊ฐ์ ํ์ธํด์ผ ํ๋ ์ํฉ์์๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์