๐ฆ Mybatis FrameWork
DB์ฐ๊ฒฐ ๋ฐฉ๋ฒ์ค Mybatis์ ๋ํด ๋ฐฐ์๋ดค๋ค.
์ง๊ธ๊น์ง 3๊ฐ์ง์ DB์ฐ๊ฒฐ ๋ฐฉ๋ฒ(์์์ , dbcp, mybatis)์ ๋ฐฐ์ ๋๋ฐ, ์์ง mybatis framework๊ฐ ๊ฐ์ฅ ์ต์ํ์ง ์๋ค.
ํ์ง๋งDB์ฐ๊ฒฐ์์ ๋นผ๋์ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ๋ ์์ ํ ์ฒด๋๋ ๋ ๊น์ง ๋ฐ๋ณต ํ์ตํด๋ณด์.
๊ทธ๋ผ Mybatis FrameWork์ ๋ํด ์์๋ณด๋๋ก ํ์!
Mybatis ์ค์น ๋ฐ jar ์ค์
Mybatis-3.5.11 ์ค์น url
Mybatis FrameWork๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ mybatis๋ฅผ ์ค์นํ๊ณ ๋ด๋ถ์ jarํ์ผ์ WEB-INF์ lib ํด๋ ๋ฐ ํด๋์คํจ์ค์ ๋ฑ๋กํด์ค์ผ ํ๋ค.
์ค์นํ ์์ถ์ ํ๊ณ ํด๋์ ๋ค์ด๊ฐ๋ณด์.
mybatis-3.5.11.jar๋ฅผ ํด๋์คํจ์ค , lib์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๋ํ pdf ํ์ผ์ด ์๋๋ฐ, mybatis ์ฌ์ฉ๋ฒ์ด ์์ฃผ ์น์ ํ๊ฒ ๋์ ์๋ ์ค๋ช
์์ด๋ค. ์ฐธ๊ณ ํ๋๋ก ํ์!
Mybatis FrameWork
์ค์น์ ์ธํ
์ด ๋์๋ค๋ฉด ์ด์ Mybatis๋ฅผ ์ด์ฉํด DB์ฐ๊ฒฐ์ ํด๋ณด๋๋ก ํ์!
Mybatis๋ ์ฌ์ฉ๋ฒ์ด ์ ํด์ ธ ์๋ค. ์ฆ FrameWork๊ฐ ์๋ค!
1. config.xml (ํ๊ฒฝ์ค์ ํ์ผ) ์์ฑ , ์ค์
Mybatis ํ๊ฒฝ์ค์ ํ์ผ(xml)์ ๋ง๋ค์ด์ ํ๊ฒฝ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
- mybatis ์ค์นํด๋์ ์๋ pdf ํ์ผ (์ค๋ช
์) 7ํ์ด์ง์ ์๋ ๋ด์ฉ ๋ถ์ฌ๋ฃ๊ธฐ ํ ${?} ๋ด์ฉ ๋ด๊ฐ ์ํ๋ ๊ฐ์ผ๋ก ์ค์ (driver, url, username, password ๋ฑ db์ฐ๊ฒฐ์ ํ์ํ ๊ฐ๋ค) ํด์ฃผ๋ฉด ๋๋ค.
์ค์ pdf 7ํ์ด์ง์ ์๋ ๋ด์ฉ์ด๋ค. ๊ทธ๋ฅ ๊ธ์ด์ ๋ถ์ฌ์ฃผ๊ณ property๋ค๋ง ๋ด ํ๊ฒฝ์ ๋ง๊ฒ ์์ ํด์ฃผ์.
10๋ฒ ~ 13๋ฒ ๋ผ์ธ์ ๋ณด๋ฉด property ์ value๋ฅผ ์์ ๊ฐ์ด ์ค์ ํ ๊ฑธ ๋ณผ ์ ์๋ค.
์์์ db์ฐ๊ฒฐ๋๋ ์์ ๊ฐ์ด driver, url, username, password๋ฅผ ์ค์ ํด์คฌ์๋๋ฐ ๋๊ฐ๋ค๊ณ ๋ณด๋ฉด ๋๋ค!
19๋ฒ ๋ผ์ธ์ mappers ํ๊ทธ์์ mapper ํ๊ทธ๋ ์ฟผ๋ฆฌ๋ฌธ ์์ฑํ๋ xmlํ์ผ ๊ฒฝ๋ก์ด๋ค. (4๋ฒ์์ ์์ธํ)
2. SqlSessionFactory
์ ์ด์ Mybatis๋ฅผ ์ฌ์ฉํด์ DB์ฐ๊ฒฐ์ ํ ๊ฑด๋ฐ, mybatis jar์ ๋ค์ด์๋ ๋ช๊ฐ์ง ๊ฐ์ฒด์ ๊ทธ ๊ฐ์ฒด์ ๋ฉ์๋๋ค์ ์ฌ์ฉํด์ผ ํ๋ค.
- ๊ฐ์ฅ ๋จผ์ SqlSessionFactory๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์์ฌ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ค์ผ ํ๋๋ฐ, ์๋์ ๊ฐ์ด ๋ง๋ค์ด ์ค๋ค.
SqlSessionFactory ์ openSession() ๋ฉ์๋๋ SqlSession ์ ๋ฆฌํดํด์ฃผ๊ณ ,
SqlSession ๋ ๊ฐ ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ฆด ์ ์๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
sqlsession.selsect() , sqlsession.insert() ๋ฑ
SqlSessionFactory ์ SqlSession ์ด ์์์ db์ฐ๊ฒฐ๋ ์ฌ์ฉํ๋ Connection , PreparedStatement ์ ๋น์ทํ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ํธํ๋ค.
3. DAO์์ factory, sqlsession ์ฌ์ฉ
-
factory ์ sqlsession์ ์ ์ญ๋ณ์๋ก ์ ์ธํด์ค๋ค.
-
factory๋ ์ ์ญ์์ ๊ฐ์ ๋ฐ๋ก ํ ๋นํด์ค๋ค.
-
sqlsession์ ์์ฑ์์ ํ ๋นํด์ค๋ค ( DAO์์ฑ์ ๋ก๋๋๋๋ก )
์ factory์ sqlsession์ด ์ค๋น๋์์ผ๋ sqlsession์ ๋ฉ์๋๋ก ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ ค๋ณด๋๋ก ํ์.
4. ์ฟผ๋ฆฌ๋ฌธ์์ฑ ํ xml ํ์ผ ์์ฑ
์ด์ SqlSession์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์ง๋ง DAO์์ ์ฌ์ฉํ๊ธฐ ์ด์ ์ ํด์ผํ ๊ฒ ํ๋ ๋จ์๋ค.
์์์ DB์ฐ๊ฒฐ ๋๋ ์ฟผ๋ฆฌ๋ฌธ์ String ๋ณ์์ ๋ด์ ์ฌ์ฉํ์๋๋ฐ, Mybatis๋ xmlํ์ผ์ ํ๊ทธ์์ ์์ฑํด์ ๋ ๋ ค์ค์ผ ํ๋ค.
- ๊ฐ DTO๋ง๋ค ๋ ๋ฆด ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ xmlํ์ผ์ ํ๋์ฉ ์์ฑํด์ฃผ์ด์ผ ํ๋ค.
์ ์ฌ์ง์์ ์ค๋ช
ํ ๊ฒ ์์ฃผ ๋ง์๋ฐ 5๋ฒ๋ผ์ธ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ณด๋๋ก ํ์.
๋จผ์ ์ฟผ๋ฆฌ๋ฌธ๋ค์ด mapper๋ผ๋ ํ๊ทธ ์์ ์์ฑ๋์ด ์๋๋ฐ, ์๊น 1๋ฒ ์ค๋ช
์ ํ๊ฒฝ์ค์ xml์์ mappers ์์ mapper ํ๊ทธ๋ก ์ xml ํ์ผ ๊ฒฝ๋ก๊ฐ ๋ค์ด๊ฐ ์์๋ค.
์ฆ , ํ๊ฒฝ ์ค์ ๋ ์ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ ํ์ผ์ ๋งคํํด์ฃผ์ด์ผ mabtis๊ฐ ์ฐพ์์ ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ ค์ฃผ๋ ๊ฒ์ด๋ค. ( config.xml์ด user.xml์ ๋ณผ ์ ์๊ฒ ๋งคํ ํด์ฃผ์๋ค๋ ๋ป )
๋ํ namespace="User" ๋ผ๋ ์์ฑ์ด ์๋๋ฐ, ์ด๊ฑด DAO์์ SqlSession ์ ๋ฉ์๋๋ก ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ ค์ค ๋ ์ด๋ค ์ฟผ๋ฆฌxml์ ์ด๋ค ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ฆด์ง ํ๋ผ๋ฏธํฐ๋ก ๋ช
์ํด ์ฃผ์ด์ผ ํ๋๋ฐ, ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๊ฐ namespace์ ๊ฐ์ด๊ณ , ๋๋ฒ์งธ ํ๋ง๋ฏธํฐ๊ฐ ์์ ์ฟผ๋ฆฌ๋ฌธ ํ๊ทธ์ id ๊ฐ์ด๋ค.
์ดํด๊ฐ ์ฝ๋๋ก DAO์ ๋ฉ์๋์ ํจ๊ป ๋ณด๋๋ก ํ์.
์ ๋ฉ์๋ ๋ค์ ๋ณด๋ฉด sqlsession.selectOne("User.checkID", userid);์ sqlsession.insert("User.join", user);๋ฅผ ๋ณผ ์ ์๋ค. ์ด๊ฒ ๋ฐ๋ก ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ฆฌ๋ sqlsession์ ๋ฉ์๋์ธ๋ฐ, ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ฌํ ๋ณด๋๋ก ํ์.
๊ฐ ๋ฉ์๋์ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ User.checkID, User.join์ด ์๋๊ฑธ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์ User๋ ์์ ์ฟผ๋ฆฌ๋ฌธxml ํ์ผ์ namespace ์์ฑ๊ฐ์ธ User์ ๋งคํํ ๊ฒ์ด๊ณ , checkID , join์ ๊ฐ๊ฐ ์ฟผ๋ฆฌ๋ฌธ ํ๊ทธ์ id์ ๋งคํํ ๊ฒ์ด๋ค.
๋ค์ ์๋ก ๋์๊ฐ์ ์ฟผ๋ฆฌ๋ฌธ ํ๊ทธ์ ์์ฑ์ ๋ณด๋ฉด parameterType , resultType์ด ์๋๋ฐ ์ฌ๊ธฐ์ parameterType์ sqlsession ๋ฉ์๋์ ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ์๋ฃํ์ ์์ฑํด ์ฃผ์ด์ผ ํ๋ฉฐ, resultType์ select๋ฌธ์ ์ฌ์ฉํ ๋ ๊ทธ์ ๋ง๋ ์ํฉ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ์ ์๋ฃํ์ ๋ง๊ฒ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
์์์ ์ฒซ๋ฒ์งธ select ํ๊ทธ์์ select count(*)๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ ๊ฐ์ด number ์ฆ int ํ์
์ผ๋ก ๋์ค๊ฒ ๋ ๊ฒ์ด๋ฏ๋ก resultType="_int" ์ด๋ฉฐ DAO์์๋ cnt ๋ผ๋ int ํ์
์ ๋ณ์๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๊ฒ์ ๋ณผ ์ ์๋ค.
๋๋ฒ์งธ ์ฟผ๋ฆฌ๋ฌธ ํ๊ทธ๋ insert์ด๋ฏ๋ก resultType์ด ์๊ธฐ๋๋ฌธ์ ๋ช
์ํด์ฃผ์ง ์์๋ค. (Mybatis์์ insert๋ฑ์ ์
๋ฐ์ดํธ๋ฌธ์ java DAO์ ์
๋ฐ์ดํธ๋ ์ ๋งํผ int๊ฐ์ผ๋ก ๋ฐํ๋๋ฉฐ ์
๋ฐ์ดํธ ๋์ง ์์ผ๋ฉด 0์ ๋ฐํํ๋ค.)
์ธ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฌธ ํ๊ทธ๋ selectํ๊ทธ์ด๋ฉฐ select * ๋ก, Beanํ๋๋ฅผ ๋ฐ์ผ๋ฉฐ resultType์ ๋ณด๋ฉด UserBean ์ฆ, DTO์ ๊ฒฝ๋ก (ํจํค์ง์ ์ฒด) ๋ฅผ ๋ช
์ํ ๊ฑธ ๋ณผ ์ ์๋ค.
์ ์ด์ parameterType , resultType ์ Mapped Type๊ณผ Alias๋ฅผ ๋ณด๋๋ก ํ์.
Mapped Type : ์๋ฐ์์์ ์๋ฃํ
Alias : ์๋ฐ์์์ ์๋ฃํ๊ณผ ๋งคํ๋ ์ฟผ๋ฆฌ๋ฌธ ํ๊ทธ ์์ฑ๊ฐ
(์๋ ์ฌ์ง์ mybatis ์ค๋ช
์ ์ฆ, pdfํ์ผ 20ํ์ด์ง์ ๋ช
์๋์ด ์๋ค.)
Mybatis FrameWork๋ ์ฌ๊ธฐ๊น์ง ์ด๋ฉฐ ๋๋จธ์ง ์์
์ ์ด์ ๊ณผ ๋์ผํ๋ค.