<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 문을 사용하고 있습니다.

  1. <update id="createOrUpdateCommunityView">: 이 쿼리를 식별할 수 있는 유일한 ID를 나타냅니다.
  2. MERGE INTO COMMUNITY_VIEW cv: MERGE INTO 문을 사용하여 COMMUNITY_VIEW 테이블에 대한 병합 작업을 수행합니다. **cv**는 COMMUNITY_VIEW 테이블의 별칭(alias)입니다.
  3. USING (SELECT 1 FROM DUAL) dummy: 병합 조건에 필요한 더미 쿼리를 사용하여 DUAL 테이블에서 1을 선택합니다.
  4. ON (cv.COMMUNITY_ID = #{communityId} AND cv.USER_ID = #{userId}): 병합 조건을 설정합니다. #{communityId} 및 **#{userId}**는 MyBatis의 파라미터로부터 전달된 값을 나타냅니다.
  5. WHEN MATCHED THEN UPDATE SET MODIFIED_DATE = SYSTIMESTAMP: 조건이 맞으면 (MATCHED), MODIFIED_DATE를 현재 시각(SYSTIMESTAMP)으로 업데이트합니다.
  6. WHEN NOT MATCHED THEN INSERT (COMMUNITY_ID, USER_ID) VALUES (#{communityId}, #{userId}): 조건이 맞지 않으면 (NOT MATCHED), **COMMUNITY_ID**와 **USER_ID**를 사용하여 새로운 행을 삽입합니다.
  7. COMMIT;: 트랜잭션을 확정하여 데이터베이스에 변경 사항을 반영합니다.

이 쿼리는 주로 커뮤니티 조회수를 관리하며, 조회수를 증가시키거나 새로운 사용자의 조회를 기록하는 데 사용될 것입니다.