<update id="createOrUpdateCommunityView">
<![CDATA[
BEGIN
MERGE INTO COMMUNITY_VIEW cv
USING (SELECT 1 FROM DUAL) dummy
ON (cv.COMMUNITY_ID = #{communityId} AND cv.USER_ID = #{userId})
WHEN MATCHED THEN
UPDATE SET
MODIFIED_DATE = SYSTIMESTAMP
WHEN NOT MATCHED THEN
INSERT (COMMUNITY_ID,USER_ID)
VALUES (#{communityId},#{userId});
COMMIT;
END;
]]>
</update>
이 쿼리는 커뮤니티 조회수을 증가시키는데 사용됩니다. MyBatis에서 직접 선언을 했고, MERGE
문을 사용하고 있습니다.
<update id="createOrUpdateCommunityView">
: 이 쿼리를 식별할 수 있는 유일한 ID를 나타냅니다.MERGE INTO COMMUNITY_VIEW cv
: MERGE INTO
문을 사용하여 COMMUNITY_VIEW
테이블에 대한 병합 작업을 수행합니다. **cv
**는 COMMUNITY_VIEW
테이블의 별칭(alias)입니다.USING (SELECT 1 FROM DUAL) dummy
: 병합 조건에 필요한 더미 쿼리를 사용하여 DUAL
테이블에서 1을 선택합니다.ON (cv.COMMUNITY_ID = #{communityId} AND cv.USER_ID = #{userId})
: 병합 조건을 설정합니다. #{communityId}
및 **#{userId}
**는 MyBatis의 파라미터로부터 전달된 값을 나타냅니다.WHEN MATCHED THEN UPDATE SET MODIFIED_DATE = SYSTIMESTAMP
: 조건이 맞으면 (MATCHED
), MODIFIED_DATE
를 현재 시각(SYSTIMESTAMP
)으로 업데이트합니다.WHEN NOT MATCHED THEN INSERT (COMMUNITY_ID, USER_ID) VALUES (#{communityId}, #{userId})
: 조건이 맞지 않으면 (NOT MATCHED
), **COMMUNITY_ID
**와 **USER_ID
**를 사용하여 새로운 행을 삽입합니다.COMMIT;
: 트랜잭션을 확정하여 데이터베이스에 변경 사항을 반영합니다.이 쿼리는 주로 커뮤니티 조회수를 관리하며, 조회수를 증가시키거나 새로운 사용자의 조회를 기록하는 데 사용될 것입니다.