基於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)我還沒有具體想好怎麼展示,因爲這個需要跟前端結合。我需要研究一下怎麼處理比較合適!!!