고래씌

[Spring] 10-2. 채팅방 참여, 인원수 증가, 메세지 조회 본문

Server/Spring

[Spring] 10-2. 채팅방 참여, 인원수 증가, 메세지 조회

고래씌 2024. 1. 29. 15:53

1. 채팅방참여, 인원수 증가, 메세지 조회

=> views/chat폴더아래에 chatRoom.jsp 파일 생성

 
 
=> 채팅방 배경화면 추가를 위해 아래와 같이 추가

 
 
▶ chatRoom.jsp
 
 
 
 
 
▶ ChatController.java
 
☞ CHAT_ROOM_JOIN안에 참여한 채팅방번호(chatRoomNo)와 현재 참여한 회원번호(userNo)를 담아서 INSERT(참여인원수 증가시키기 위해서)
 
☞ 채팅방 참여(isnert)후, 해당 채팅방의 채팅메세지 조회(select)
 

=> 맨위에 chatRoomNo 추가함. chatRoomNo은 세션으로 데이터 이관하기 위해서 추가한다!
 
 
 
▶ ChatService.java

List<ChatMessage> joinChatRoom(ChatRoomJoin join);

 
 
▶ ChatServiceImpl.java

	@Override
	public List<ChatMessage> joinChatRoom(ChatRoomJoin join) {
		
		// Chat_ROOM_JOIN에 데이터 INSERT 후,
		// 채팅메세지 목록 조회후 반환
		List<ChatMessage> list = null;
		
		// 1. 현재 회원이 해당 채팅방에 참여하고 있는지 확인(select)
//		int result = dao.joinCheck(join);
//		
//		// 2. 참여하고 있지 않다면 참여(insert)
//		if(result == 0) {
//			result = dao.joinChatRoom(join);
//		}
		
		int result = 1;
		
		try {
			result = dao.joinChatRoom(join);
		}catch(Exception e) {
			// 에러가 발생시 
			e.printStackTrace();
		}
		
		// 채팅메세지 조회후 반환
		if(result > 0) {
			list = dao.selectChatMessage(join.getChatRoomNo());
		}
		
		return list;
	}

 
 
▶ ChatDao.java
 
☞ 각 해당하는 메소드 3개를 생성

//	채팅방 참여 여부확인
	public int joinCheck(ChatRoomJoin join) {
		return sqlSession.selectOne("chatMapper.joinCheck", join);
	}

//	채팅방 메시지
	public int joinChatRoom(ChatRoomJoin join) {
		return sqlSession.insert("chatMapper.joinChatRoom", join);
	}

//	채팅방 메시지 조회
	public List<ChatMessage> selectChatMessage(int chatRoomNo) {
		return sqlSession.selectList("chatMapper.selectChatMessage", chatRoomNo);
	}

 
 
▶ chat-mapper.xml

	<!-- 채팅방 참여여부 확인 -->
	<!-- 사용자의 참여를 관여하는 테이블이 CHAT_ROOM_JOIN임 -->
	<select id="joinCheck" parameterType="chatRoomJoin" resultType="int">
		SELECT
			COUNT(*)
		FROM CHAT_ROOM_JOIN 
		WHERE CHAT_ROOM_NO = #{chatRoomNo} AND USER_NO = #{userNo}
	</select>
	
	<!-- 채팅방 참여하기 -->
	<insert id="joinChatRoom" parameterType="chatRoomJoin">
		INSERT INTO CHAT_ROOM_JOIN
		VALUES(#{userNo}, #{chatRoomNo})
	</insert>
	
	<!-- 채팅방 메세지 조회 -->
	<select id="selectChatMessage" parameterType="int" resultType="chatMessage">
		SELECT 
			MESSAGE,
			CREATE_DATE,
			USER_NAME,
			USER_NO,
			CM_NO
		FROM CHAT_MESSAGE
		JOIN MEMBER USING(USER_NO)
		WHERE CHAT_ROOM_NO = #{chatRoomNo}
		ORDER BY CM_NO
	</select>

 
 
 
▶ 결과