<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sist.web.dao.BoardDao">
<resultMap id="InsBoardResultMap" type="com.sist.web.model.InsBoard">
<id column="BOARD_NUM" property="boardNum" />
<result column="USER_ID" property="userId" />
<result column="BOARD_CONTENT" property="boardContent" />
<result column="LIKE_CNT" property="likeCnt" />
<result column="REG_DATE" property="regDate" />
</resultMap>
<resultMap id="InsBoardFileResultMap" type="com.sist.web.model.InsBoardFile">
<id column="BOARD_NUM" property="boardNum" />
<result column="FILE_NUM" property="fileNum" />
<result column="FILE_ORG_NAME" property="fileOrgName" />
<result column="FILE_NAME" property="fileName" />
<result column="FILE_EXT" property="fileExt" />
<result column="FILE_SIZE" property="fileSize" />
<result column="REG_DATE" property="regDate" />
</resultMap>
<resultMap id="boardAndFile" type="com.sist.web.model.BFC_Profile">
<id column="BOARD_NUM" property="boardNum" />
<result column="FILE_NUM" property="fileNum" />
<result column="BOARD_CONTENT" property="boardContent" />
<result column="COMMENT_CNT" property="commentCnt" />
<result column="LIKE_CNT" property="likeCnt" />
<result column="FILE_ORG_NAME" property="fileOrgName" />
<result column="FILE_NAME" property="fileName" />
<result column="FILE_EXT" property="fileExt" />
<result column="FILE_SIZE" property="fileSize" />
<result column="REG_DATE" property="fileRegDate" />
</resultMap>
<resultMap id="selectViewResultMap" type="com.sist.web.model.SelectView">
<id column="BOARD_NUM" property="boardNum" />
<result column="BOARD_USER_ID" property="boardUserId" />
<result column="LIKE_CNT" property="likeCnt" />
<result column="BOARD_REG_DATE" property="boardRegDate" />
<result column="BOARD_CONTENT" property="boardContent" />
<result column="FILE_NUM" property="fileNum" />
<result column="FILE_NAME" property="fileName" />
<result column="FILE_EXT" property="fileExt" />
<result column="COMMENT_NUM" property="commentNum" />
<result column="COMMENT_USER_ID" property="commentUserId" />
<result column="COMMENT_USER_FILE_NAME" property="commentUserFileName" />
<result column="COMMENT_GROUP" property="commentGroup" />
<result column="COMMENT_CONTENT" property="commentContent" />
<result column="COMMENT_PARENT" property="commentParent" />
<result column="COMMENT_STATUS" property="commentStaus" />
<result column="COMMENT_REG_DATE" property="commentRegDate" />
</resultMap>
<resultMap id="forMainPage" type="com.sist.web.model.ForMainPage">
<id column="BOARD_NUM" property="boardNum" />
<result column="BOARD_CONTENT" property="boardContent" />
<result column="LIKE_CNT" property="likeCnt" />
<result column="COMMENT_CNT" property="commentCnt" />
<result column="BOARD_FILE_NAME" property="boardFileName" />
<result column="FILE_EXT" property="boardFileExt" />
<result column="REG_DATE" property="regDate" />
<result column="USER_ID" property="userId" />
<result column="USER_FILE_NAME" property="userFileName" />
<result column="ISLIKE" property="isLike" />
</resultMap>
<resultMap id="followRelation" type="com.sist.web.model.InsFollow">
<id column="FOLLOW_NUM" property="followNum" />
<result column="FOLLOWING_COUNT" property="followingCnt" />
<result column="FOLLOWER_COUNT" property="followedCnt" />
<result column="USER_TO" property="userTo" />
<result column="USER_FROM" property="userFrom" />
<result column="IS_FOLLOWED" property="isFollow" />
</resultMap>
<!-- 파일 인서트 -->
<insert id="boardFileInsert" parameterType="com.sist.web.model.InsBoardFile">
insert into INS_BOARD_FILE (
BOARD_NUM,
FILE_NUM,
FILE_ORG_NAME,
FILE_NAME,
FILE_EXT,
FILE_SIZE,
REG_DATE
) values (
#{boardNum},
(SELECT MAX(FILE_NUM)+1 FROM INS_BOARD_FILE),
#{fileOrgName},
#{fileName},
#{fileExt},
#{fileSize},
SYSDATE
)
</insert>
<!-- 게시물 인서트 -->
<insert id="boardInsert" parameterType="com.sist.web.model.InsBoard">
<selectKey resultType="long" keyProperty="boardNum" order="BEFORE">
SELECT INS_BOARD_SEQ.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO INS_BOARD
(BOARD_NUM,
USER_ID,
BOARD_CONTENT,
LIKE_CNT,
REG_DATE)
VALUES
(#{boardNum},#{userId},#{boardContent},0,SYSDATE)
</insert>
<!-- 댓글 인서트 -->
<insert id="commentInsert" parameterType="com.sist.web.model.BoardComment">
<selectKey resultType="long" keyProperty="commentNum" order="BEFORE">
SELECT INS_COMMENT_SEQ.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO INS_COMMENT (
COMMENT_NUM,
BOARD_NUM,
USER_ID,
COMMENT_CONTENT,
COMMENT_GROUP,
COMMENT_PARENT,
STATUS,
REG_DATE
) VALUES (
#{commentNum},
#{boardNum},
#{userId},
#{commentContent},
#{commentNum},
#{commentParent},
'Y',
SYSDATE
)
</insert>
<!-- 답글 인서트 -->
<insert id="commentreplyInsert" parameterType="com.sist.web.model.BoardComment">
<selectKey resultType="long" keyProperty="commentNum" order="BEFORE">
SELECT INS_COMMENT_SEQ.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO INS_COMMENT (
COMMENT_NUM,
BOARD_NUM,
USER_ID,
COMMENT_CONTENT,
COMMENT_GROUP,
COMMENT_PARENT,
STATUS,
REG_DATE
) VALUES (
#{commentNum},
#{boardNum},
#{userId},
#{commentContent},
#{commentGroup},
#{commentParent},
'Y',
SYSDATE
)
</insert>
<!-- 좋아요 -->
<insert id="insBoardLikeInsert" parameterType="com.sist.web.model.InsLike">
<selectKey resultType="long" keyProperty="likeNum" order="BEFORE">
SELECT INS_LIKE_SEQ.NEXTVAL FROM DUAL
</selectKey>
insert into INS_LIKE (
LIKE_NUM,
<choose>
<when test='boardNum!=0'>
BOARD_NUM,
</when>
<otherwise>
COMMENT_NUM,
</otherwise>
</choose>
USER_ID,
REG_DATE
) values (
#{likeNum},
<choose>
<when test='boardNum!=0'>
#{boardNum},
</when>
<otherwise>
#{commentNum},
</otherwise>
</choose>
#{userId},
SYSDATE
)
</insert>
<!-- 팔로우 인서트 -->
<insert id="insertFollow" parameterType="com.sist.web.model.InsFollow">
INSERT INTO INS_FOLLOW
(FOLLOW_NUM, USER_TO, USER_FROM)
VALUES
((SELECT MAX(FOLLOW_NUM)+1 FROM INS_FOLLOW), #{userFrom}, #{userTo})
</insert>
<!-- 보드 카운트 업데이트 -->
<update id="updateBoardComment" parameterType="long">
UPDATE INS_BOARD
SET
COMMENT_CNT = NVL(COMMENT_CNT,0) + 1
WHERE
BOARD_NUM = #{value}
</update>
<!-- 좋아요 수 변동 -->
<update id="updateLikeCnt" parameterType="long">
UPDATE INS_BOARD
SET
<if test='disLike == 0'>
LIKE_CNT = NVL(LIKE_CNT, 0) + 1
</if>
<if test='disLike !=0'>
LIKE_CNT = NVL(LIKE_CNT,0) - 1
</if>
WHERE
BOARD_NUM = #{boardNum}
</update>
<!-- 좋아요 수 변동 (테이블에서 del) -->
<delete id="delLike" parameterType="com.sist.web.model.InsLike">
DELETE FROM ins_like
WHERE 1=1
<choose>
<when test='boardNum != 0'>
AND board_num = #{boardNum}
</when>
<when test='commentNum != 0'>
AND comment_num = #{commentNum}
</when>
</choose>
AND user_id = #{userId}
</delete>
<delete id="boardDelProc" parameterType="long" statementType="CALLABLE">
BEGIN
DELETE FROM INS_COMMENT WHERE BOARD_NUM = #{value};
DELETE FROM INS_BOARD_FILE WHERE BOARD_NUM = #{value};
DELETE FROM INS_LIKE WHERE BOARD_NUM = #{value};
DELETE FROM INS_BOARD WHERE BOARD_NUM = #{value};
END;
</delete>
<!-- 1 유저 게시글 수 -->
<select id="oneUserBoardCnt" parameterType="String" resultType="int">
SELECT COUNT (BOARD_NUM)
FROM INS_BOARD
WHERE USER_ID = #{value}
</select>
<!-- 프로필 페이지용 셀렉 -->
<select id="profilePage" parameterType="String" resultMap="boardAndFile">
SELECT A.BOARD_NUM AS BOARD_NUM,
NVL(B.BOARD_CONTENT,'') BOARD_CONTENT,
NVL(B.LIKE_CNT,0) LIKE_CNT,
NVL(B.COMMENT_CNT,0) COMMENT_CNT,
NVL(A.FILE_NUM,'')FILE_NUM,
NVL(A.FILE_ORG_NAME,'') FILE_ORG_NAME,
NVL(A.FILE_NAME,'') FILE_NAME,
NVL(A.FILE_EXT,'') FILE_EXT,
NVL(A.FILE_SIZE,0) FILE_SIZE,
NVL(TO_CHAR(B.REG_DATE,'YYYY.MM.DD'),'') REG_DATE
FROM INS_BOARD_FILE A, INS_BOARD B
WHERE 1=1
AND A.BOARD_NUM = B.BOARD_NUM
AND B.USER_ID = #{userId}
ORDER BY A.REG_DATE DESC
</select>
<select id="followCnt" parameterType="String" resultMap="followRelation">
SELECT
(SELECT NVL(COUNT(*),0) FROM INS_FOLLOW WHERE USER_FROM = #{value}) AS FOLLOWING_COUNT,
(SELECT NVL(COUNT(*),0) FROM INS_FOLLOW WHERE USER_TO = #{value}) AS FOLLOWER_COUNT
FROM DUAL
</select>
<!-- 게시물 상세보기 페이지 (게시글+답글) -->
<select id="selectView" parameterType="long" resultMap="selectViewResultMap">
SELECT B.BOARD_NUM BOARD_NUM,
B.USER_ID BOARD_USER_ID,
NVL(B.LIKE_CNT,0) LIKE_CNT,
NVL(B.BOARD_CONTENT,'') BOARD_CONTENT,
NVL(TO_CHAR(B.REG_DATE,'YYYY.MM.DD HH24.MI.SS'),'') BOARD_REG_DATE,
F.FILE_NUM,
F.FILE_NAME,
NVL(F.FILE_EXT,'') FILE_EXT,
NVL(C.COMMENT_NUM,0) COMMENT_NUM,
NVL(C.USER_ID,'') COMMENT_USER_ID,
NVL(U.FILE_NAME,'') COMMENT_USER_FILE_NAME,
NVL(C.COMMENT_GROUP,0) COMMENT_GROUP,
NVL(C.COMMENT_CONTENT,'') COMMENT_CONTENT,
NVL(C.COMMENT_PARENT,0) COMMENT_PARENT,
NVL(C.STATUS,'') COMMENT_STATUS,
NVL(TO_CHAR(C.REG_DATE,'YYYY.MM.DD.HH24.MI.SS'),'') COMMENT_REG_DATE
FROM INS_BOARD B, INS_BOARD_FILE F, INS_COMMENT C, INS_USER_FILE U
WHERE 1=1
AND B.BOARD_NUM = F.BOARD_NUM(+)
AND B.BOARD_NUM = C.BOARD_NUM(+)
AND C.USER_ID = U.USER_ID(+)
AND B.BOARD_NUM = #{value}
ORDER BY C.COMMENT_GROUP DESC, C.REG_DATE ASC
</select>
<select id="isFollow" parameterType="com.sist.web.model.InsFollow" resultType="int">
SELECT COUNT(FOLLOW_NUM) AS IS_FOLLOWED
FROM INS_FOLLOW
WHERE 1=1
AND USER_FROM = #{userTo}
AND USER_TO= #{userFrom}
</select>
<select id="likeOrNot" parameterType="com.sist.web.model.InsLike" resultType="int">
SELECT COUNT(LIKE_NUM)
FROM INS_LIKE
WHERE 1=1
<choose>
<when test="boardNum != 0">
AND BOARD_NUM = #{boardNum}
</when>
<when test="commentNum != 0">
AND COMMENT_NUM = #{commentNum}
</when>
</choose>
AND USER_ID = #{userId}
</select>
<!-- 메인보드 불러오기! -->
<select id="loadMainBoard" parameterType="String" resultMap="forMainPage">
SELECT F.BOARD_NUM,
MAX(DBMS_LOB.SUBSTR(F.BOARD_CONTENT, 1000, 1)) AS BOARD_CONTENT,
MAX(F.LIKE_CNT) AS LIKE_CNT,
MAX(F.FILE_NAME) AS BOARD_FILE_NAME,
MAX(F.FILE_EXT) AS FILE_EXT,
MAX(F.REG_DATE) AS REG_DATE,
MAX(F.USER_ID) AS USER_ID,
MAX(F.USER_FILE_NAME) AS USER_FILE_NAME,
NVL(COUNT(CASE WHEN L.USER_ID = #{value} THEN L.LIKE_NUM END),0) AS ISLIKE
FROM (SELECT NVL(B.BOARD_NUM, 0) AS BOARD_NUM,
B.BOARD_CONTENT,
NVL(B.LIKE_CNT, 0) AS LIKE_CNT,
B.USER_ID,
NVL(U.FILE_NAME, '') AS USER_FILE_NAME,
NVL(B.COMMENT_CNT, 0) AS COMMENT_CNT,
NVL(A.FILE_NAME, '') AS FILE_NAME,
NVL(A.FILE_EXT, '') AS FILE_EXT,
NVL(TO_CHAR(TRUNC(SYSDATE) - TRUNC(B.REG_DATE)), '') AS REG_DATE
FROM INS_BOARD B, INS_BOARD_FILE A, INS_USER_FILE U
WHERE 1=1
AND (B.USER_ID IN (SELECT USER_TO FROM INS_FOLLOW WHERE USER_FROM = #{value}) OR B.USER_ID = #{value})
AND B.BOARD_NUM = A.BOARD_NUM(+)
AND B.USER_ID = U.USER_ID(+))F, INS_LIKE L
WHERE L.BOARD_NUM(+) = F.BOARD_NUM
GROUP BY F.BOARD_NUM
ORDER BY F.BOARD_NUM DESC
</select>
<!-- 메인보드 (친구없는버전...) -->
<select id="loadMainBoardNoFriends" parameterType="String" resultMap="forMainPage">
SELECT F.BOARD_NUM,
MAX(DBMS_LOB.SUBSTR(F.BOARD_CONTENT, 1000, 1)) AS BOARD_CONTENT,
MAX(F.LIKE_CNT) AS LIKE_CNT,
MAX(F.FILE_NAME) AS BOARD_FILE_NAME,
MAX(F.FILE_EXT) AS FILE_EXT,
MAX(F.REG_DATE) AS REG_DATE,
MAX(F.USER_ID) AS USER_ID,
MAX(F.USER_FILE_NAME) AS USER_FILE_NAME,
NVL(COUNT(CASE WHEN L.USER_ID = #{value} THEN L.LIKE_NUM END),0) AS ISLIKE
FROM (SELECT NVL(B.BOARD_NUM, 0) AS BOARD_NUM,
B.BOARD_CONTENT,
NVL(B.LIKE_CNT, 0) AS LIKE_CNT,
B.USER_ID,
NVL(U.FILE_NAME, '') AS USER_FILE_NAME,
NVL(B.COMMENT_CNT, 0) AS COMMENT_CNT,
NVL(A.FILE_NAME, '') AS FILE_NAME,
NVL(A.FILE_EXT, '') AS FILE_EXT,
NVL(TO_CHAR(TRUNC(SYSDATE) - TRUNC(B.REG_DATE)), '') AS REG_DATE
FROM INS_BOARD B, INS_BOARD_FILE A, INS_USER_FILE U
WHERE 1=1
AND B.BOARD_NUM = A.BOARD_NUM(+)
AND B.USER_ID = U.USER_ID(+))F, INS_LIKE L
WHERE L.BOARD_NUM(+) = F.BOARD_NUM
GROUP BY F.BOARD_NUM
ORDER BY F.BOARD_NUM DESC
</select>
</mapper>
ERD 테이블이다.
쿼리문의 경우
UserDao.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sist.web.dao.UserDao">
<resultMap id="userResultMap" type="com.sist.web.model.User">
<id column="USER_ID" property="userId"/>
<result column="USER_PWD" property="userPwd"/>
<result column="USER_NAME" property="userName"/>
<result column="USER_EMAIL" property="userEmail"/>
<result column="USER_TEL" property="userTel"/>
<result column="EMAIL_AUTH" property="emailAuth"/>
<result column="USER_INTRO" property="userIntro"/>
<result column="REG_DATE" property="regDate"/>
<result column="STATUS" property="status"/>
<result column="BLUE_ID" property="blueId"/>
<result column="FILE_NAME" property="userFileName"/>
</resultMap>
<resultMap id="userFileResultMap" type="com.sist.web.model.UserFile">
<id column="FILE_NUM" property="fileNum"/>
<result column="USER_ID" property="userId"/>
<result column="FILE_ORG_NAME" property="fileOrgName"/>
<result column="FILE_NAME" property="fileName"/>
<result column="FILE_EXT" property="fileExt"/>
<result column="FILE_SIZE" property="fileSize"/>
<result column="REG_DATE" property="regDate"/>
</resultMap>
<select id="selectRandomUser" parameterType="String" resultMap="userResultMap">
SELECT USER_ID, USER_NAME, FILE_NAME, BLUE_ID
FROM (SELECT NVL(U.USER_ID,'') USER_ID, NVL(U.USER_NAME,'') USER_NAME, NVL(F.FILE_NAME,'') AS FILE_NAME, NVL(U.BLUE_ID,'') BLUE_ID
FROM INS_USER U, INS_USER_FILE F
WHERE 1=1
AND U.USER_ID NOT IN (SELECT USER_TO FROM INS_FOLLOW WHERE USER_FROM = #{userId} OR USER_TO=#{userId})
AND U.USER_ID = F.USER_ID(+)
ORDER BY dbms_random.value)
WHERE ROWNUM <![CDATA[<=]]> 4
</select>
<select id="selectUser" parameterType="com.sist.web.model.User" resultMap="userResultMap">
SELECT
NVL(U.USER_ID, '') USER_ID,
NVL(U.USER_PWD,'') USER_PWD,
NVL(U.USER_NAME,'') USER_NAME,
NVL(U.USER_EMAIL,'') USER_EMAIL,
NVL(U.EMAIL_AUTH,'') EMAIL_AUTH,
NVL(U.USER_INTRO,'') USER_INTRO,
NVL(U.USER_TEL,'') USER_TEL,
NVL(TO_CHAR(U.REG_DATE,'YYYY.MM.DD HH24:MI:SS'),'') REG_DATE,
NVL(U.STATUS,'') STATUS,
NVL(U.BLUE_ID,'') BLUE_ID,
NVL(F.FILE_NAME,'') FILE_NAME
FROM
INS_USER U, INS_USER_FILE F
WHERE 1=1
AND U.USER_ID = F.USER_ID(+)
<choose>
<when test='gubun == 1'>
AND U.USER_ID = #{userId}
</when>
<when test='gubun == 2'>
and U.USER_EMAIL = #{userEmail}
</when>
<otherwise>
AND U.USER_TEL = #{userTel}
</otherwise>
</choose>
</select>
<select id="searchSelect" parameterType="String" resultMap="userResultMap">
SELECT U.USER_ID, MAX(U.USER_NAME) USER_NAME, MAX(U.BLUE_ID) BLUE_ID, MAX(F.FILE_NAME) FILE_NAME
FROM INS_USER U, INS_USER_FILE F
WHERE 1=1
AND U.USER_ID = F.USER_ID(+)
AND U.USER_ID IN ( SELECT USER_ID
FROM INS_USER
WHERE USER_ID LIKE '%'||#{value}||'%'
OR USER_NAME LIKE '%'||#{value}||'%'
OR U.USER_INTRO LIKE '%'||#{value}||'%')
GROUP BY U.USER_ID
</select>
<insert id="userInsert" parameterType="com.sist.web.model.User">
INSERT INTO INS_USER (
USER_ID,
USER_PWD,
USER_NAME,
USER_EMAIL,
EMAIL_AUTH,
USER_INTRO,
REG_DATE,
STATUS
) VALUES (
#{userId},
#{userPwd},
#{userName},
#{userEmail},
#{emailAuth},
#{userIntro},
SYSDATE,
#{status}
)
</insert>
<update id="userUpdate" parameterType="com.sist.web.model.User">
UPDATE INS_USER
SET USER_PWD = #{userPwd},
USER_NAME = #{userName},
USER_EMAIL = #{userEmail},
USER_TEL = #{userTel},
EMAIL_AUTH = #{emailAuth},
USER_INTRO = #{userIntro},
STATUS = #{status}
WHERE USER_ID= #{userId}
</update>
<update id="buyerUpdate" parameterType="String">
UPDATE INS_USER
SET BLUE_ID = 'B'
WHERE USER_ID = #{value}
</update>
<insert id="userFileInsert" parameterType="com.sist.web.model.UserFile">
INSERT INTO INS_USER_FILE
(FILE_NUM,
USER_ID,
FILE_ORG_NAME,
FILE_NAME,
FILE_EXT,
FILE_SIZE,
REG_DATE)
VALUES
(
(SELECT MAX(FILE_NUM)+1 FROM INS_USER_FILE),
#{userId},
#{fileOrgName},
#{fileName},
#{fileExt},
#{fileSize},
SYSDATE
)
</insert>
<select id="userFileSelect" parameterType="String" resultMap="userFileResultMap">
SELECT
FILE_NUM,
USER_ID,
FILE_ORG_NAME,
FILE_NAME,
FILE_EXT,
FILE_SIZE,
REG_DATE
FROM INS_USER_FILE
WHERE USER_ID = #{value}
</select>
<update id="userFileUpdate" parameterType="com.sist.web.model.UserFile">
UPDATE INS_USER_FILE
SET
FILE_ORG_NAME = #{fileOrgName},
FILE_NAME =#{fileName},
FILE_EXT = #{fileExt},
FILE_SIZE = #{fileSize},
REG_DATE = SYSDATE
WHERE USER_ID = #{userId}
</update>
<delete id="userFileDel" parameterType="String">
DELETE
FROM ins_user_file
WHERE USER_ID = #{value};
</delete>
</mapper>
'Project > 과정 기록' 카테고리의 다른 글
[부동산 관련] D-30, ERD 마무리 + 기초데이터 인서트 (0) | 2024.04.12 |
---|---|
[스프링] 미니프로젝트 : 인스타그램 클론 코딩하기 (3) JSP 및 HTML (0) | 2024.03.19 |
[JSP] 미니프로젝트 게시판 만들기 : 2일차-6일차 (0) | 2024.01.24 |
[JSP] 미니프로젝트 게시판 만들기 : 1일차 (사전조사/ERD 그리기/ (0) | 2024.01.24 |
[데이터베이스] 팀별 미니프로젝트 _ 게시판 / 회원정보 ERD 만들기 (1) | 2024.01.03 |
댓글