๐ฆ RESULTMAP
- ์ฌ๋ ์ฌ๋ ๋ง๋ค ์ฌ์ง์ฒฉ์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ๋ค
- resultmap="id๊ฐ"
- ํ๊ฐ ๊ฐ์ ธ์ฌ ๋๋
association
- ์ฌ๋ฌ๊ฐ ๊ฐ์ ธ์ฌ ๋๋
collection
๐น type , id
ResultMap
์ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ค์ ์ค์ ์ ์ํํด์ผ ํ๋ค.
type
: ๋งคํ๋ ํด๋์ค๋ช
์ ์์ฑํ๋ค.
id
: ์ธ๋ถ์์ ์ง์ ํ ์ด๋ฆ์ ์์ฑํ๋ค.
๐น result , column , property
<result>
ํญ๋ชฉ์ ๋ฐฐ์นํ์ฌ ๋ฐ์ดํฐ์ ๋ํ ์ค์ ๋งคํ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ค.
column
: ๋ถ๋ฌ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํญ๋ชฉ๋ช
์ ์์ฑํ๋ค.
property
: ๋ถ๋ฌ์จ ํญ๋ชฉ์ ์ ์ฅํ ํด๋์ค ๋ด์ ๋ณ์๋ช
์ ์์ฑํ๋ค.
๐น <collection> , column , property , select
- ๋ง์ฝ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ์ปฌ๋ ์
์ ์ง์ ํ ์ ์๋๋ฐ, ์ด ๋๋
<collection>
ํญ๋ชฉ์ ๋ฐฐ์นํ์ฌ ๋งคํ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ค.
column
: ๋ถ๋ฌ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํญ๋ชฉ๋ช
์ ์์ฑํ๋ค. ์ฌ๊ธฐ์๋ ํ์ SQL
์ ์คํํ๊ธฐ ์ํ ํญ๋ชฉ์ ์์ฑํ๋ค.(์ผ๋ฐ์ ์ผ๋ก PK
๋ก ์์ฑ)
property
: ๋ถ๋ฌ์จ ํญ๋ชฉ์ ์ ์ฅํ ํด๋์ค ๋ด์ ๋ณ์๋ช
์ ์์ฑํ๋ค.
select
: ์กฐํํ๋ ๊ตฌ๋ฌธ์ด ๋ฐ๋ก ํ์ํ๋ฏ๋ก ํด๋นํ๋ ์กฐํ ๊ตฌ๋ฌธ์ id
๋ฅผ ์์ฑํ๋ค.
<resultMap id="FeedDomainMap" type="FeedDomain2">
<result property="ifeed" column="ifeed"></result>
<association property="cmt" column="ifeed" select="selFeedCmt"></association>
<collection property="imgList" column="ifeed" select="selFeedImgList"></collection>
</resultMap>
<select id="selFeedList2" resultMap="FeedDomainMap">
SELECT
A.ifeed, A.location, A.ctnt, A.iuser, A.regdt
, C.nm AS writer, C.mainProfile
, IFNULL(E.cnt, 0) AS favCnt
<if test="iuserForFav > 0">
, CASE WHEN D.ifeed IS NULL THEN 0 ELSE 1 END AS isFav
</if>
FROM t_feed A
INNER JOIN t_user C
ON A.iuser = C.iuser
<if test="iuserForMyFeed > 0">
AND C.iuser = ${iuserForMyFeed}
</if>
LEFT JOIN (
SELECT ifeed, COUNT(ifeed) AS cnt
FROM t_feed_fav
GROUP BY ifeed
) E
ON A.ifeed = E.ifeed
<if test="iuserForFav > 0">
LEFT JOIN t_feed_fav D
ON D.iuser = ${iuserForFav}
AND A.ifeed = D.ifeed
</if>
ORDER BY A.ifeed DESC
LIMIT
</select>
<select id="selFeedCmt" resultType="FeedCmtDomain">
SELECT A.*, COUNT(A.icmt) - 1 AS isMore
FROM (
SELECT
A.icmt, A.cmt, A.regdt, A.ifeed
, B.iuser, B.nm as writer, B.mainProfile as writerProfile
FROM t_feed_cmt A
INNER JOIN t_user B
ON A.iuser = B.iuser
WHERE A.ifeed = ${ifeed}
ORDER BY icmt ASC
LIMIT 2
) A
GROUP BY A.ifeed
</select>
<select id="selFeedImgList" resultType="FeedImgEntity">
SELECT ifeedimg, ifeed, img FROM t_feed_img
WHERE ifeed =
</select>
๐ฆ IFNULL()
โ
IFNULL(์ปฌ๋ผ๋ช
, '์ปฌ๋ผ์ด ๋์ผ๊ฒฝ์ฐ ๋์ฒดํ ๋ฐ์ดํฐ')
๐ฆ GROUP BY
- ์ปฌ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํ ํ ์ ์๋
GROUP BY
- ํน์ ์ปฌ๋ผ์ ๊ทธ๋ฃนํ ํ๋
GROUP BY
- ํน์ ์ปฌ๋ผ์ ๊ทธ๋ฃนํํ ๊ฒฐ๊ณผ์ ์กฐ๊ฑด์ ๊ฑฐ๋
HAVING
WHERE
๋ ๊ทธ๋ฃนํ ํ๊ธฐ ์ ์ด๊ณ , HAVING
์ ๊ทธ๋ฃนํ ํ์ ์กฐ๊ฑด
๐น ์ปฌ๋ผ ๊ทธ๋ฃนํ
SELECT ์ปฌ๋ผ FROM ํ
์ด๋ธ GROUP BY ๊ทธ๋ฃนํํ ์ปฌ๋ผ;
๐น ์กฐ๊ฑด ์ฒ๋ฆฌ ํ์ ์ปฌ๋ผ ๊ทธ๋ฃนํ
SELECT ์ปฌ๋ผ FROM ํ
์ด๋ธ WHERE ์กฐ๊ฑด์ GROUP BY ๊ทธ๋ฃนํํ ์ปฌ๋ผ;
๐น ์ปฌ๋ผ ๊ทธ๋ฃนํ ํ์ ์กฐ๊ฑด ์ฒ๋ฆฌ
SELECT ์ปฌ๋ผ FROM ํ
์ด๋ธ GROUP BY ๊ทธ๋ฃนํํ ์ปฌ๋ผ HAVING ์กฐ๊ฑด์;
๐น ์กฐ๊ฑด ์ฒ๋ฆฌ ํ์ ์ปฌ๋ผ ๊ทธ๋ฃนํ ํ์ ์กฐ๊ฑด ์ฒ๋ฆฌ
SELECT ์ปฌ๋ผ FROM ํ
์ด๋ธ WHERE ์กฐ๊ฑด์ GROUP BY ๊ทธ๋ฃนํํ ์ปฌ๋ผ HAVING ์กฐ๊ฑด์
๐น ORDER BY๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
SELECT ์ปฌ๋ผ FROM ํ
์ด๋ธ [WHERE ์กฐ๊ฑด์] GROUP BY ๊ทธ๋ฃนํํ ์ปฌ๋ผ [HAVING ์กฐ๊ฑด์] ORDER BY ์ปฌ๋ผ1 [, ์ปฌ๋ผ2, ์ปฌ๋ผ3 ...];
๐ฆ JOIN
โ
join
์ ๋จผ์ ํ ํ์ select
๋ฅผ ํ๋ค
<select id="selUserFollowList" resultType="UserDomain">
SELECT B.iuser, B.nm, B.mainProfile
, CASE WHEN C.iuserMe IS NULL THEN 0 ELSE 1 END AS isMeFollowYou
FROM t_user_follow A
INNER JOIN t_user B
ON A.iuserYou = B.iuser
LEFT JOIN t_user_follow C
ON C.iuserMe = ${iuserMe}
AND C.iuserYou = A.iuserYou
WHERE A.iuserMe = ${iuserYou}
</select>
FROM follow
๋ INNER JOIN user
์ ๊ฒฐ๊ณผ๋ฅผ LEFT JOIN follow
ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ SELECT
ํ๋ ๊ฒ์ด๋ค.