基于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)我还没有具体想好怎么展示,因为这个需要跟前端结合。我需要研究一下怎么处理比较合适!!!