Java Web如何设置已读功能

在Java Web开发中,设置已读功能通常用于论坛、邮件系统、即时通讯等场景,用于标记用户是否已经阅读过某条消息或通知,本文将详细介绍如何在Java Web项目中实现已读功能。
技术选型
- 开发语言:Java
- 框架:Spring Boot
- 数据库:MySQL
- 消息队列:RabbitMQ(可选)
数据库设计
-
用户表(user)
- id:主键,自增
- username:用户名
- password:密码
- …(其他用户信息)
-
消息表(message)
- id:主键,自增标题
- content:内容
- sender_id:发送者ID
- receiver_id:接收者ID
- read_status:已读状态(0:未读,1:已读)
- …(其他消息信息)
实现步骤

创建消息模型
public class Message {
private Long id;
private String title;
private String content;
private Long senderId;
private Long receiverId;
private Integer readStatus;
// getter和setter方法
}
创建消息服务接口
public interface MessageService {
List<Message> findMessagesByReceiverId(Long receiverId);
void updateReadStatus(Long id);
}
实现消息服务接口
@Service
public class MessageServiceImpl implements MessageService {
@Autowired
private MessageMapper messageMapper;
@Override
public List<Message> findMessagesByReceiverId(Long receiverId) {
return messageMapper.findMessagesByReceiverId(receiverId);
}
@Override
public void updateReadStatus(Long id) {
Message message = new Message();
message.setId(id);
message.setReadStatus(1);
messageMapper.updateReadStatus(message);
}
}
创建消息Mapper
@Mapper
public interface MessageMapper {
List<Message> findMessagesByReceiverId(Long receiverId);
void updateReadStatus(Message message);
}
创建消息Mapper XML
<mapper namespace="com.example.mapper.MessageMapper">
<select id="findMessagesByReceiverId" resultType="com.example.entity.Message">
SELECT * FROM message WHERE receiver_id = #{receiverId}
</select>
<update id="updateReadStatus">
UPDATE message SET read_status = 1 WHERE id = #{id}
</update>
</mapper>
创建控制器

@RestController
@RequestMapping("/message")
public class MessageController {
@Autowired
private MessageService messageService;
@GetMapping("/unread")
public ResponseEntity<?> findUnreadMessages(@RequestParam Long receiverId) {
List<Message> messages = messageService.findMessagesByReceiverId(receiverId);
return ResponseEntity.ok(messages);
}
@PutMapping("/read")
public ResponseEntity<?> markAsRead(@RequestParam Long id) {
messageService.updateReadStatus(id);
return ResponseEntity.ok("Message marked as read");
}
}
创建前端页面
(此处以Vue.js为例)
<template>
<div>
<ul>
<li v-for="message in messages" :key="message.id">
<span>{{ message.title }}</span>
<button @click="markAsRead(message.id)">Mark as Read</button>
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
messages: []
};
},
created() {
this.fetchUnreadMessages();
},
methods: {
fetchUnreadMessages() {
axios.get(`/message/unread?receiverId=${this.receiverId}`).then(response => {
this.messages = response.data;
});
},
markAsRead(id) {
axios.put(`/message/read?id=${id}`).then(response => {
this.fetchUnreadMessages();
});
}
}
};
</script>
通过以上步骤,我们成功实现了Java Web中设置已读功能,在实际项目中,可以根据需求进行功能扩展,如添加消息推送、消息筛选等。


















