2022_02_12 - oneso123456789/2022 GitHub Wiki
๋ก์ปฌ ๊น๋ฆฌํฌ์งํ ๋ฆฌ ์
๋ฐ์ดํธ๋ remote -> fetch๋ก Add Create/update specification
ํญ๋ชฉ์ ๊นํ๋ธ์์ ๊ฐ์ ธ์ค๊ณ ์ถ์ ๋ธ๋์น๋ฅผ Source ref๋ก ์ฐธ์กฐํด์ ๊ฐ์ ธ์ค๋ฉด๋จ.
PART 3์ ์์ ๋ ๋จ์ํ ํ๋์ ํ
์ด๋ธ๋ง์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์
ํ
์ด๋ธ, ์คํ์ค, ์ฝ๊ฐ์ ๋ฐ์ดํฐ๋ค์ด ์์ฑ๋์๋ค๋ฉด ์ด์ ๋ ์ฝ๋๋ฅผ ์ด์ฉํด์
๋ฐ์ดํฐ์ ๋ํ CRUD(Create, Read, Update, Delete)์์
์ ์งํํจ
์์ ๊ณ์ธต์ ์์ ์ ํญ์ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์งํํจ
- ํ ์ด๋ธ์ ์นผ๋ผ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ๋ VO(Value Object) ํด๋์ค์ ์์ฑ
- MyBatis์ Mapper ์ธํฐํ์ด์ค์ ์์ฑ/XML ์ฒ๋ฆฌ
- ์์ฑํ Mapper ์ธํฐํ์ด์ค์ ํ ์คํธ
์์ ๊ณผ์ ์ ์ ๋จผ์ JDBC ์ฐ๊ฒฐ์ ํ
์คํธ ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฒ์ด ์ข์ง๋ง,
SQL Developer์ ์ฐ๊ฒฐ ์์ฒด๊ฐ ์ด๋ฏธ JDBC ์ฐ๊ฒฐ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋ณ๋ก๋ ์ธ๊ธํ์ง ์์.
๊ฑฐ์ ๋ชจ๋ ์น ์ดํ๋ฆฌ์ผ์ด์
์ ์ต์ข
๋ชฉ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ๊ฑฐ๋,
์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๋ชฉ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐํ ๋ ์ด๋ ์ ๋์ ์ค๊ณ๊ฐ
์งํ๋๋ฉด ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ จ ์์
์ ํ๊ฒ ๋จ
VO ํด๋์ค๋ฅผ ์์ฑํ๋ ์์
์ ํ
์ด๋ธ ์ค๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑํ๋ฉด๋จ
ํ์ฌ oracle ์์ tbl_board ํ
์ด๋ธ์ ๊ตฌ์ฑ๊ณผ ๊ฐ๊ฒ ์์ฑํจ
๊ฒฝ๋ก๋ com.crow.domainํจํค์ง ์์ BoardVO ํด๋์ค๋ก ์ ์ํจ
๋ค๋ฅธ ํน๋ณํ๊ฑด ์์ง๋ง @Data ์ด๋
ธํ
์ด์
์ ์ ์ธํด์ค์ Lombok์ ์ด์ฉํด์
์์ฑ์์ getter/setter, toString() ๋ฑ์ ๋ง๋ค์ด ๋ด๋ ๋ฐฉ์์ ์ฌ์ฉํจ
ํํธ1์์ ๋ดค์ง๋ง MyBatis๋ SQL์ ์ฒ๋ฆฌํ๋๋ฐ ์ด๋
ธํ
์ด์
์ด๋ XML์ ์ด์ฉํ ์ ์์
๊ฐ๋จํ SQL ์ด๋ผ๋ฉด ์ด๋
ธํ
์ด์
์ ์ด์ฉํด์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ฌด๋ํ์ง๋ง,
SQL์ด ์ ์ ๋ณต์กํด์ง๊ณ ๊ฒ์๊ณผ ๊ฐ์ด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ SQL๋ฌธ์ด ์ฒ๋ฆฌ๋๋ ๊ฒฝ์ฐ์๋
์ด๋
ธํ
์ด์
์ ๊ทธ๋ค์ง ์ ์ฉํ์ง ๋ชปํ๋ค๋ ๋จ์ ์ด ์์
XML์ ๊ฒฝ์ฐ ๋จ์ ํ ์คํธ๋ฅผ ์์ ํ๋ ๊ณผ์ ๋ง์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋์ง๋ง,
์ด๋
ธํ
์ด์
์ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ค์ ๋น๋ ํ๋ ๋ฑ์ ์ ์ง ๋ณด์์ฑ์ด
๋จ์ด์ง๋ ์ด์ ๋ก ๊ธฐํผํ๋ ๊ฒฝ์ฐ๋ ์ข
์ข
์์.
root-context.xml์ PART 1์์ 'com.crow.mapper`ํจํค์ง๋ฅผ ์ค์บ(์กฐ์ฌ)ํ๋๋ก
์ด๋ฏธ ์ค์ ํด ๋ณธ ์ ์ด ์์ผ๋ฏ๋ก ์ด๋ฅผ ํ์ฉํด์ ํ๋ก์ ํธ๋ฅผ ์ ์ํจ
<mybatis-spring:scan base-package="com.crow.mapper" />
Mapper ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ ๋๋ ๋ฆฌ์คํธ (select)์ insert(๋ฑ๋ก) ์์
์ ์ฐ์ ํด์ ์์ฑํจ.
com.crow.mapperํจํค์ง๋ฅผ ์์ฑํ๊ณ BoardMapper ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํจ
@Select("select * from tbl_board where bno > 0)"
public List<BoardVO> getList();
BoardMapper ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ ๋๋ ์ด๋ฏธ ์์ฑ๋ BoardVO ํด๋์ค๋ฅผ ์ ๊ทน์ ์ผ๋ก
ํ์ฉํด์ ํ์ํ SQL์ ์ด๋
ธํ
์ด์
์ ์์ฑ๊ฐ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค
SQL๋ฌธ์ ์์ฑํ ๋๋ ๋ฐ๋์ ;(์ธ๋ฏธ์ฝ๋ก )์ด ์๋๋ก ์์ฑํด์ผํจ
SQL ๋ค์ 'where bno > 0'๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ํ
์ด๋ธ์ ๊ฒ์ํ๋๋ฐ bno๋ผ๋
์นผ๋ผ ์กฐ๊ฑด์ ์ฃผ์ด์ Primary key(์ดํ PK)๋ฅผ ์ด์ฉํ๋๋ก ์ ๋ํ๋ ์กฐ๊ฑด์
์ด์ ๋ํ ์์ธํ ์ค๋ช
์ ํ์ด์ง์์ ์ฒ๋ฆฌํ๊ฒ ์
SQL Developer์์ ๋จผ์ ์คํ๊ฒฐ๊ณผ๋ฅผ ํ์ธ๋ณผ๊ฒ
๊ทธ ์ด์ ๋
- SQL์ด ๋ฌธ์ ๊ฐ ์์ด ์คํ ๊ฐ๋ฅํ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํ ์ฉ๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ commit์ ํ์ง ์์๋ค๋ฉด ๋์ค์ ํ ์คํธ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋จผ์ ๋น๊ตํ๊ธฐ ์ํจ
์์ฑ๋ BoardMapper ์ธํฐํ์ด์ค๋ฅผ ํ
์คํธ ํ ์ ์๊ฒ ํ
์คํธ ํ๊ฒฝ์ธ
'src/test/java'์ com.crow.mapperํจํค์ง๋ฅผ ์์ฑํ๊ณ BoardMapperTests ํด๋์ค๋ฅผ ์ถ๊ฐํจ
๊ณ์ํ๋๊ฑฐ์ฒ๋ผ ํ
์คํธ ์ด๋
ธํ
์ด์
๋ช
์ํด์ฃผ๊ณ
BoardMapper์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ์ฃผ์
๋ฐ์์ ๋์ํจ
ํด๋์ค ์ ์ธ๋ถ์๋ PersistenceConfig ํด๋์ค๋ฅผ ์ด์ฉํด์ ์คํ๋ง ์ค์ ์ ์ด์ฉํ๊ณ
์์์ ๋ช
์ํจ
testGetList()์ ๊ฒฐ๊ณผ๋ SQL Developer์์ ์คํ๋ ๊ฒ๊ณผ ๋์ผํด์ผ๋ง ์ ์์ ์ผ๋ก ๋์ํ ๊ฒ์
BoardMapperTests๋ฅผ ์ด์ฉํด์ ํ
์คํธ๊ฐ ์๋ฃ๋๋ฉด
src/main/resource ๋ด์ ํจํค์ง์ ๋์ผํ com.crow.mapper๋จ๊ณ์ ํด๋๋ฅผ
์์ฑํ๊ณ 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.crow.mapper.BoardMapper">
<select id="getList" resultType="com.crow.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno > 0
]]>
</select>
</mapper>
XML์ ์์ฑํ ๋๋ ๋ฐ๋์ ์ namespace ์์ฑ๊ฐ์ Mapper ์ธํฐํ์ด์ค์
๋์ผํ ์ด๋ฆ์ ์ฃผ๋ ๊ฒ์ ์ฃผ์ํ๊ณ ,
ํ๊ทธ์ id ์์ฑ๊ฐ์ ๋ฉ์๋์ ์ด๋ฆ๊ณผ ์ผ์นํ๊ฒ ์์ฑํจ
resultType ์์ฑ์ ๊ฐ์ select ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ํน์ ํด๋์ค์ ๊ฐ์ฒด๋ก
๋ง๋ค๊ธฐ ์ํด์ ์ค์ ํจ
XML์ ์ฌ์ฉํ CDATA ๋ถ๋ถ์ XML์์ ๋ถ๋ฑํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฌ์ฉํจ
XML์ SQL๋ฌธ์ด ์ฒ๋ฆฌ๋์์ผ๋ BoardMapper ์ธํฐํ์ด์ค์ SQL์ ์ ๊ฑฐํจ
(์ด๋
ธํ
์ด์
์ผ๋ก ์์ฑํ๋ถ๋ถ)