์์ ๊ณ์ธต(Persistence Layer)
์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ณ์ธต์ ์๋ฏธ
โ vo ํด๋์ค ์์ฑ
ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก vo ํด๋์ค๋ฅผ ์์ฑํด์ค๋ค.
โ mapper ์์ (interface , xml or @ ์์ฑ)
1) root-context.xml ์์ ํจํค์ง ์ค์บ์ ์ค์ ํด์ค์ผํ๋ค.
2) xml ๋ก ๊ตฌํํ ๊ฑด์ง @ ๋ก ๊ตฌํํ ๊ฑด์ง ์ ํํ๋ค
๊ฐ๋จํ sql ์ @ ์ถ์ฒ
โ test ํด๋์ค๋ก DB ์๋ ํ ์คํธ
1) @Autowired ๋ฅผ ํตํด์ Mapper ์ธํฐํ์ด์ ์ ๊ตฌํ์ฒด๋ฅผ ์ฃผ์ ์ํจ๋ค.
2) SQL develop ๋ฌธ์ ๊ฐ ์๋์ง or ๊ฒฐ๊ณผ ๊ฐ ์ฒดํน
โ xml or @ ์ด๋ ธํ ์ด์ ์์ฑ
1) xml
<mapper namespace="com.example.UserMapper">
<!-- SQL ์ฟผ๋ฆฌ ์ ์ -->
<select id="findUserById" parameterType="int" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="com.example.User">
INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
<update id="updateUser" parameterType="com.example.User">
UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
๐ CDATA ์น์ :: ํน์ ๋ฌธ์์ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ๋ฌธ์ ์ฒ๋ฆฌํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉ
CDATA ์น์ ์ XML์ ์์๋ ์์ฑ ๊ฐ ์์์ ํน์ ๋ฌธ์๋ฅผ ํฌํจํ ๋ ์ ์ฉํฉ๋๋ค. (xml ์ ๋ถ๋ฑํธ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ)
CDATA ์น์ ๋ด๋ถ์ ๋ด์ฉ์ XML ํ์์ ์ํด ํ์ฑ๋์ง ์์ผ๋ฉฐ, ์๋ ๊ทธ๋๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
<![CDATA[ CDATA ์น์
์ ๋ด์ฉ ]]>
<mapper namespace="com.example.UserMapper">
<!-- ๋ณต์กํ ์ฟผ๋ฆฌ -->
<select id="findUsers" parameterType="map" resultType="com.example.User">
<![CDATA[
SELECT * FROM users
WHERE name = #{name}
AND age >= #{minAge}
AND age <= #{maxAge}
]]>
</select>
</mapper>
๐ <selectKey> ??
<selectKey> ์๋ฆฌ๋จผํธ๋ INSERT ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ์ฃผ๋ก ๊ธฐ๋ณธ ํค ๊ฐ์ ๊ฐ์ ธ์ค๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค.
์ด ์ฟผ๋ฆฌ๋ INSERT ๋ฌธ ์คํ ์ ์ ๋๋ ํ์ ์คํ๋ ์ ์๋ค !!
์ฝ์ ์ ์ ๊ธฐ๋ณธ ํค(PK) ๊ฐ์ ๋ฏธ๋ฆฌ ์์ฑํ๋ ๊ฒฝ์ฐ (BEFORE) !!c
- keyProperty: ๊ธฐ๋ณธ ํค ๊ฐ์ ์ ์ฅํ ๋๋ฉ์ธ ๊ฐ์ฒด์ ์์ฑ์ ๋๋ค.
- resultType: ๊ธฐ๋ณธ ํค์ ํ์ ์ ๋๋ค.
- before: true์ด๋ฉด INSERT ๋ฌธ ์ ์ selectKey ์ฟผ๋ฆฌ๊ฐ ์คํ๋๊ณ , false์ด๋ฉด INSERT ๋ฌธ ํ์ ์คํ๋ฉ๋๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="com.example.UserMapper">
<!-- ๊ธฐ๋ณธ ํค๋ฅผ ์๋ ์์ฑํ ํ ์กฐํ -->
<insert id="insertUser" parameterType="com.example.User" useGeneratedKeys="true" keyProperty="id">
<!-- ๊ธฐ๋ณธ ํค ์กฐํ ์ฟผ๋ฆฌ -->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
<!-- INSERT ๋ฌธ -->
INSERT INTO users (name, email)
VALUES (#{name}, #{email})
</insert>
</mapper>
2) @ ์ด๋ ธํ ์ด์
; ์ธ๋ฏธ์ฝ๋ก ์ ์ฐ์ง ์๋๋ค !
XML ํ์ผ ์์ด ์๋ฐ ์ฝ๋๋ง์ผ๋ก ๋งคํผ๋ฅผ ์ ์ ๊ฐ๋ฅ
@Select("SELECT * FROM users WHERE id = #{id}") |
User findUserById(int id); |
@Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})") | void insertUser(User user); |
@Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}") | void updateUser(User user); |
@Delete("DELETE FROM users WHERE id = #{id}") | void deleteUser(int id); |