Java消息系统简单设计与实现 (2)

其实有思考过使用时间或者另建一张保存有最新已读到哪条消息的表,但用户可以选择有一些读有一些不读,这两个似乎都很难达到目的...还是暴力吧

问题三:私信消息该怎么设计? 发送者 接受者 内容 发送时间
粉丝1号   我没有三颗心脏   我是你的真爱粉啊!我要给你生猴子!   2019年1月7日11:34:23  
我没有三颗心脏   粉丝1号   已阅...下一个...   2019年1月7日11:34:53  

就像 QQ消息 一样嘛,包含一个内容、时间、发送者和接受者,然后前端直接根据时间或者 id 排序生成一左一右的消息对话框,不过比较特殊的一点就是私信是一个双向交流的过程,在一个对话框中我可能既是接受者也是发送者,这也无所谓嘛,稍微分析分析场景:

读取私信列表时:按照接受者和发送者一起查询的原则,也就是查询接受者是自己和发送者是自己的数据,然后根据时间和已读未读来建立私信列表;

读取私信时:这时已经有了明确的接受者和发送者,那就查询所有 发送者是对方接受者是自己 Or 发送者是自己接受者是对方 的数据,然后在前端拼凑出一左一右的聊天框;

发送私信时:先查询之前是否有记录,然后同上建立聊天框,点击发送之后把发送方设为自己接收方设为私信对象,然后在通知表中新建一条未读数据通知私信对象有私信来了;

这完全能满足要求,只不过感觉查询多了些..

数据库设计

Java消息系统简单设计与实现

简单弄了弄弄..看着挺难受的,不过能简单实现功能,并且为了演示,这里是做了一张user_follow表,表示用户之间的关联关系,点赞和评论与这个类似,就不多弄了..下面给一下建表语句吧:

user表:

CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `username` varchar(50) NOT NULL COMMENT '用户姓名', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

user_follow表:

CREATE TABLE `user_follow` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `uid` bigint(20) NOT NULL COMMENT '用户ID', `follow_uid` bigint(20) NOT NULL COMMENT '关注的用户id', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户关注表,记录了所有用户的关注信息';

notify表:

CREATE TABLE `notify` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `sender_id` bigint(20) NOT NULL COMMENT '发送者用户ID', `reciver_id` bigint(20) NOT NULL COMMENT '接受者用户ID', `type` varchar(50) NOT NULL COMMENT '消息类型:announcement公告/remind提醒/message私信', `is_read` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已读,0未读,1已读', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间:按当前时间自动创建', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户通知表,包含了所有用户的消息';

message表:

CREATE TABLE `message` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `notify_id` bigint(20) NOT NULL COMMENT '对应通知消息的id', `sender_id` bigint(20) NOT NULL COMMENT '发送者用户ID', `reciver_id` bigint(20) NOT NULL COMMENT '接受者用户ID', `content` varchar(1000) NOT NULL COMMENT '消息内容,最长长度不允许超过1000', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间:按当前时间自动创建', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='私信信息表,包含了所有用户的私信信息';

根据《Java开发手册》5.3 第六条 没有使用任何级联和外键,bingo!

Spring Boot + MyBatis 实例 第一步:基础环境搭建

SpringBoot项目怎么搭就不说了吧,给一给几个关键的配置文件:

pom包依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- SpringBoot - MyBatis 逆向工程 --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>5.1.18</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywdsp.html