基於SSM做站內消息系統(二)

基於SSM做站內消息系統(二)

java程序編寫

上回寫的是站內信的理論知識,相信很多人看起來會很枯燥無味,其實我自己也是這麼覺得的。我一直在想怎麼解決這個問題!如果有什麼好的建議歡迎在評論區留言。一起探討學習~

實體類的編寫

package com.taotao.pojo;

import java.util.Date;

/**
 * 站內信消息之消息表
 * @author 盛
 *
 */
public class Messages {
	private Long id;//主鍵Id
	private Long sendId;//發送者
	private Long recId;//接收者
	private int messageStatus ;//當前消息狀態(0未讀,1已讀,2刪除)具體需求具體設計
	private Long contentId;//消息內容表Id
	private Date createTime;//創建時間
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public Long getSendId() {
		return sendId;
	}
	public void setSendId(Long sendId) {
		this.sendId = sendId;
	}
	public Long getRecId() {
		return recId;
	}
	public void setRecId(Long recId) {
		this.recId = recId;
	}
	public int getMessageStatus() {
		return messageStatus;
	}
	public void setMessageStatus(int messageStatus) {
		this.messageStatus = messageStatus;
	}
	public Long getContentId() {
		return contentId;
	}
	public void setContentId(Long contentId) {
		this.contentId = contentId;
	}
	
	
	
}

以上字段只是通用字段,仍需根據具體需求制定具體字段~~

package com.taotao.pojo;

import java.util.Date;

/**
 * 站內信之消息內容表
 * @author 盛
 *
 */
public class MessageText {
	private Long id;//
	private String content;//消息內容
	private Long messageId;//消息表Id
	private Date createTime;//創建時間(可有可無,根據具體需求設定)
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Long getMessageId() {
		return messageId;
	}
	public void setMessageId(Long messageId) {
		this.messageId = messageId;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	

}

package com.taotao.pojo;

import java.util.Date;

/**
 * 站內信之用戶系統消息表
 * @author 盛
 *
 */
public class UserMessage {
	private Long id;
	private Long messageId;//消息表Id
	private int status;//消息狀態(0未讀,1已讀,2刪除)
	private Date createTime;//創建時間
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public Long getMessageId() {
		return messageId;
	}
	public void setMessageId(Long messageId) {
		this.messageId = messageId;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	
}

以上是站內信的三個實體類~~

dao層加mapper文件的編寫

我這裏的dao層用的是mybatis框架!

package com.taotao.mapper;

import java.util.List;
import java.util.Map;

import com.taotao.pojo.Messages;
/**
 * 站內信之消息表dao層
 * @author 盛
 *
 */
public interface MessagesMapper {
	public int add(Messages m);
	public int update(Messages m);
	public List<Messages> list(Map<String, Object> q);
}


```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.taotao.mapper.MessagesMapper" >
  <insert id="add" parameterType="com.taotao.pojo.Messages">
  	insert into messages(sendId,recId,messageStatus,contentId,createTime)
  	VALUES(#{sendId},#{recId},#{messageStatus},#{contentId},#{createTime})
  </insert>
  <update id="update" parameterType="com.taotao.pojo.Messages">
  	update messages set sendId=#{sendId},recId=#{recId},messageStatus=#{messageStatus},
  	contentId=#{contentId},createTime=#{createTime} where id=#{id}
  </update>
  <select id="list" parameterType="Map" resultType="com.taotao.pojo.Messages">
  	select * from messages where 1=1
  	<if test="status!=null">
  		and status=#{status}
  	</if>
  	<if test="sendId!=null">
  		and sendId=#{sendId}
  	</if>
  	<if test="recId!=null">
  		and recId=#{recId}
  	</if>
  </select>
</mapper>

對於sql的查詢我也只是寫了簡單的增刪改查,仍需根據你具體想做什麼樣的需求具體設定!

package com.taotao.mapper;

import java.util.List;
import java.util.Map;

import com.taotao.pojo.MessageText;
import com.taotao.pojo.UserMessage;



/**
 * 站內信之用戶系統消息dao層
 * @author 盛
 *
 */
public interface MessageTextMapper {
	public int add(UserMessage m);
	public int update(UserMessage m);
	public List<UserMessage> list(Map<String, Object> q);
}


<?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.taotao.mapper.MessageTextMapper" >
  <insert id="add" parameterType="com.taotao.pojo.MessageText">
  	insert into messageText(content,messageId,createTime)
  	VALUES(#{content},#{messageId},#{createTime})
  </insert>
  <update id="update" parameterType="com.taotao.pojo.MessageText">
  	update messageText set content=#{content},messageId=#{messageId},createTime=#{createTime} where id=#{id}
  </update>
  <select id="list" parameterType="Map" resultType="com.taotao.pojo.MessageText">
  	select * from messageText where 1=1
  	<if test="messageId!=null">
  		and messageId=#{messageId}
  	</if>
  </select>
</mapper>
package com.taotao.mapper;

import java.util.List;
import java.util.Map;

import com.taotao.pojo.UserMessage;


/**
 * 站內信之用戶系統消息dao層
 * @author 盛
 *
 */
public interface UserMessageMapper {
	public int add(UserMessage m);
	public int update(UserMessage m);
	public List<UserMessage> list(Map<String, Object> q);
	public List<UserMessage> findListMessage(Map<String, Object> q);
	public int getListMessage(Map<String, Object> q);
}

<?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.taotao.mapper.UserMessageMapper" >
  <insert id="add" parameterType="com.taotao.pojo.UserMessage">
  	insert into userMessage(messageId,status,createTime)
  	VALUES(#{messageId},#{status},#{createTime})
  </insert>
  <update id="update" parameterType="com.taotao.pojo.UserMessage">
  	update userMessage set messageId=#{messageId},status=#{status},
		createTime=#{createTime} where id=#{id}
  </update>
  <select id="list" parameterType="Map" resultType="com.taotao.pojo.UserMessage">
  	select * from userMessage where 1=1
  	<if test="status!=null">
  		and status=#{status}
  	</if>
  	<if test="messageId!=null">
  		and messageId=#{messageId}
  	</if>
  </select>
  <resultMap id="ExamSort" type="com.taotao.pojo.UserMessage">
		<id column="sc_id" property="id" />
		
		<result column="sc_status" property="status" />
		<result column="sc_messageId" property="messageId" />
		<result column="sc_createTime" property="createTime" />
		
		<association property="sysMessageText" javaType="com.taotao.pojo.MessageText">
			<id column="mt_id" property="id" />
			<result column="mt_content" property="content" />
		</association>
		<association property="Messages" javaType="com.taotao.pojo.Messages">
			<id column="m_id" property="id" />
			<result column="m_contentId" property="content" />
		</association>
	</resultMap>
	<select id="findListMessage" parameterType="Map" resultMap="ExamSort">
		select
		sc.id sc_id,sc.createTime sc_createTime,sc.messageId sc_messageId,sc.status sc_status,
		m.id m_id,m.contentId m_contentId,
		mt.id mt_id,mt.content mt_content
		from userMessage sc,messages m,messageText mt
		where 1 = 1 and m.contentId=mt.id AND sc.messageId=m.id
		
		<if test="recId !=null">
			and m.recId=#{recId}
		</if>
		<if test="messageStatus !=null">
			and m.messageStatus = #{messageStatus}
		</if>
		<if test="status !=null">
			
				and sc.status = #{status}
			
		</if>
		order by sc.status,sc.createTime DESC
		<if test="offset != null and pageSize != null">
			limit #{offset},#{pageSize}
		</if>
	</select>
	<select id="getListMessage" parameterType="Map" resultMap="ExamSort">
		select
		count(*)
		from userMessage sc,messages m,messageText mt
		where 1 = 1 and m.contentId=mt.id AND sc.messageId=m.id
		
		<if test="recId !=null">
			and m.recId=#{recId}
		</if>
		<if test="messageStatus !=null">
			and m.messageStatus = #{messageStatus}
		</if>
		<if test="status !=null">
				and sc.status = #{status}
		</if>
		order by sc.status,sc.createTime DESC
	</select>
</mapper>

這個用戶消息系統有點特殊,它需要連表查詢加上左查詢,每當系統用戶登錄時要在消息表(message)中獲取系統給用戶發的消息。可以自己給系統一個唯一的標識符(如:8080這個代號代表系統)通過sql查詢出來結果!
例如:
1)甲用戶第一次登錄這個網站,他在登錄之前要獲取系統之前所有發的公告通知等消息,sql要查詢(message表)中的sendId字段【系統(8080)】然後再將這些數據插入到用戶消息系統表(userMessage)
這裏需要三表聯查就行了
2)就是甲用戶不是第一次登錄的情況下,比較複雜點,需要先查用戶消息系統表(userMessage)中有幾條消息表中的數據(Message),有的就不需要插入用戶消息系統表中,沒有的纔要插入。這裏需要用到左查詢加三表聯查

業務邏輯層(service)編寫

package com.taotao.service;

import java.util.List;
import java.util.Map;


import com.taotao.pojo.Messages;

public interface MessagesService {
	public int add(Messages m);
	public int update(Messages m);
	public List<Messages> list(Map<String, Object> q);
}

package com.taotao.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.taotao.mapper.MessagesMapper;
import com.taotao.pojo.Messages;
import com.taotao.service.MessagesService;
@Service
public class MessagesServiceImpl implements MessagesService {
	@Autowired
	private MessagesMapper messagesMapper;

	@Override
	public int add(Messages m) {
		// TODO Auto-generated method stub
		return messagesMapper.add(m);
	}

	@Override
	public int update(Messages m) {
		// TODO Auto-generated method stub
		return messagesMapper.update(m);
	}

	@Override
	public List<Messages> list(Map<String, Object> q) {
		// TODO Auto-generated method stub
		return messagesMapper.list(q);
	}
	
}

package com.taotao.service;

import java.util.List;
import java.util.Map;

import com.taotao.pojo.UserMessage;
/**
 * 站內信之消息內容業務邏輯層
 * @author 盛
 *
 */
public interface MessageTextService {
	public int add(UserMessage m);
	public int update(UserMessage m);
	public List<UserMessage> list(Map<String, Object> q);
}

package com.taotao.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.taotao.mapper.MessageTextMapper;
import com.taotao.pojo.UserMessage;
import com.taotao.service.MessageTextService;
@Service
public class MessageTextServiceImPl implements MessageTextService {
	@Autowired
	private MessageTextMapper messageTextMapper;
	@Override
	public int add(UserMessage m) {
		// TODO Auto-generated method stub
		return messageTextMapper.add(m);
	}

	@Override
	public int update(UserMessage m) {
		// TODO Auto-generated method stub
		return messageTextMapper.update(m);
	}

	@Override
	public List<UserMessage> list(Map<String, Object> q) {
		// TODO Auto-generated method stub
		return messageTextMapper.list(q);
	}

}

package com.taotao.service;

import java.util.List;
import java.util.Map;

import com.taotao.pojo.UserMessage;
/**
 * 站內信之用戶系統業務邏輯層
 * @author 盛
 *
 */
public interface UserMessageService {
	public int add(UserMessage m);
	public int update(UserMessage m);
	public List<UserMessage> list(Map<String, Object> q);
	public List<UserMessage> findListMessage(Map<String, Object> q);
	public int getListMessage(Map<String, Object> q);
}

package com.taotao.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.taotao.mapper.UserMessageMapper;
import com.taotao.pojo.UserMessage;
import com.taotao.service.UserMessageService;
@Service
public class UserMessageServiceImpl implements UserMessageService {
	@Autowired
	private UserMessageMapper userMessageMapper;
	@Override
	public int add(UserMessage m) {
		// TODO Auto-generated method stub
		return userMessageMapper.add(m);
	}

	@Override
	public int update(UserMessage m) {
		// TODO Auto-generated method stub
		return userMessageMapper.update(m);
	}

	@Override
	public List<UserMessage> list(Map<String, Object> q) {
		// TODO Auto-generated method stub
		return userMessageMapper.list(q);
	}

	@Override
	public List<UserMessage> findListMessage(Map<String, Object> q) {
		// TODO Auto-generated method stub
		return userMessageMapper.findListMessage(q);
	}

	@Override
	public int getListMessage(Map<String, Object> q) {
		// TODO Auto-generated method stub
		return userMessageMapper.getListMessage(q);
	}

}

以上就是今天內容~歡迎評論區點評留言,讓我們共同進步!!!
對於控制層(Controller)我還沒有具體想好怎麼展示,因爲這個需要跟前端結合。我需要研究一下怎麼處理比較合適!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章