本项目是作者小傅哥使用技术栈
JavaFx
、Netty4.x
、SpringBoot
、Mysql
等,搭建的仿桌面版微信聊天工程实现通信核心功能。如果本项目能为您提供帮助,请给予支持(关注、点赞、分享)!
作者: 小傅哥,Java Developer,🏆 CSDN 博客专家,🐛 虫洞 · 科技栈
学习链接:
赏个鸡腿🍗
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
库表结构的设计是以满足业务需求为主,在领域驱动设计中不会先设计库表在设计业务,而是从业务领域为着手点进行规划。下面的库表信息是我们仿微信聊天中核心的库表结构和字段,学习的用户可以通过文件夹中itstack.sql
下载数据库初始化SQL。
- 对于我们的业务功能需要有这么六个表来完成业务流程,而这六个表可以分为三个部分来看;
- 第一部分,基础表;也就是用户和群组的维护
- 第二部分,关联表;每个用户与好友和群组的关系
- 第三部分,行为表;每一个用户都会与自己的好友或者群组产生对话,以及最终的聊天记录
-
对于用户表首先第一个使用的地方就是登录,在登录的时候需要进行身份校验。再者就是有关于用户信息详情的展示。
-
库表信息
序号 字段 类型 描述 1 id bigint(20) 自增ID 2 userId varchar(9) 用户ID 3 userNickName varchar(32) 用户昵称 4 userHead varchar(16) 用户头像 5 userPassword varchar(64) 用户密码 6 createTime datetime 创建时间 7 updateTime datetime 更新时间 -
样例数据
id userId userNickName userHead userPassword createTime updateTime 1 184172133 小傅哥 01_50 123456 2020-01-01 00:00:00 2020-01-01 00:00:00 2 980765512 铁锤 02_50 123456 2020-01-01 00:00:00 2020-01-01 00:00:00 3 796542178 团团 03_50 123456 2020-01-01 00:00:00 2020-01-01 00:00:00 - 这里的头像
userHead
,是图片的名称,默认我们设置了10个图片;(01-10)_50,最终的图片路径是:/fxml/login/img/head/01_50.png
- 另外这里的密码是明文保存,如果是实际的业务中使用,一定要是加密处理。
- 这里的头像
群组表在我们系统中是默认创建的一个群组然后给每个用户分配,当然也可以在页面开发功能去创建群组。但对于我们的系统来说,我们是默认的方式,对于每一个用户都是群组里面的用户。同时也希望你在拿到源码后,可以来实现下这部分功能。
库表信息
序号 | 字段 | 类型 | 描述 |
---|---|---|---|
1 | id | bigint(20) | 自增ID |
2 | groupId | varchar(9) | 群组ID |
3 | groupName | varchar(16) | 群组名称 |
4 | groupHead | varchar(16) | 群组头像 |
5 | createTime | datetime | 创建时间 |
6 | updateTime | datetime | 更新时间 |
样例数据
id | groupId | groupName | groupHead | createTime | updateTime |
---|---|---|---|---|---|
1 | 5307397 | 虫洞 · 技术栈(1024) | group_1 | 2020-01-01 00:00:00 | 2020-01-01 00:00:00 |
- 这里的群组是我们系统进行初始化的数据,当然也可以完善代码像微信一样创建群组。
groupHead
,是头像名称,最终地址会是;/fxml/login/img/head/group_1.png
,如果这部分头像是可以上传配置的,那么需要从服务端下载到客户端并保存。
-
好友表主要用于维护每一个用户自己的好友信息记录,目前的表结构字段比较简单。如果是类似一个真实的微信场景,那么可能会有好友的各种信息描述,例如;添加方式(扫码、手机号搜索、好友分享)、添加地点、添加时间,还包括你比较关心的是是否被删除等等。
-
库表信息
序号 字段 类型 描述 1 id bigint(20) 自增ID 2 userId bigint(20) 用户ID 3 userFriendId bigint(20) 好友用户ID 4 createTime datetime 创建时间 5 updateTime datetime 更新时间 -
样例数据
id userId userFriendId createTime updateTime 1 184172133 980765512 2020-01-01 00:00:00 2020-01-01 00:00:00 2 184172133 796542178 2020-02-03 13:24:00 2020-02-03 13:24:00 3 184172133 523088136 2020-02-05 14:37:37 2020-02-05 14:37:37 4 523088136 184172133 2020-02-05 14:37:37 2020-02-05 14:37:37 5 184172133 123456003 2020-02-05 17:43:26 2020-02-05 17:43:26 - 在这里维护了用户的好友关系信息,并且这个关系是双向的。数据;你是我的好友,我也是你的好友。
-
群组表与好友表类似,群组表主要维护个人用户都参与到哪些群组里。就是你自己有一堆QQ群或者微信群一样的概念。并且在这个群组里目前只包括了核心的功能,很方便后续的拓展。
-
库表信息
序号 字段 类型 描述 1 id bigint(20) 自增ID 2 userId varchar(9) 用户ID 3 groupId varchar(9) 群组ID 4 createTime datetime 创建时间 5 updateTime datetime 更新时间 -
样例数据
id userId groupId createTime updateTime 1 184172133 5307397 2020-01-01 00:00:00 2020-01-01 00:00:00 5 796542178 5307397 2020-01-01 00:00:00 2020-01-01 00:00:00 6 980765512 5307397 2020-01-01 00:00:00 2020-01-01 00:00:00 - 这里记录着用户与群组的关系,每个用户属于哪个群组。
-
对话框主要是个人与每个好友或者群组进行对话通信的记录的一个承载地方,那么这个里面的信息在用户发起聊天后就会记录到用户对话表中。当然,在删除对话框后也会从对话表中删除。同时对话框里面的信息会分为与用户兑换还是与群组进行对话,因为与个人对话则是好友的id,与群组对话则是这个群的id。
-
库表信息
序号 字段 类型 描述 1 id bigint(20) 自增ID 2 userId varchar(9) 用户ID 3 talkId varchar(9) 对话框ID(好友ID、群组ID) 4 talkType int(4) 对话框类型;0好友、1群组 5 createTime datetime 创建时间 6 updateTime datetime 更新时间 -
样例数据
id userId talkId talkType createTime updateTime 3 980765512 184172133 0 2020-01-01 00:00:00 2020-01-01 00:00:00 28 184172133 123456003 0 2020-02-05 17:46:56 2020-02-05 17:46:56 29 123456003 184172133 0 2020-02-05 17:46:56 2020-02-05 17:46:56 53 184172133 5307397 1 2020-02-07 15:45:13 2020-02-07 15:45:13 55 523088136 5307397 1 2020-02-07 16:14:09 2020-02-07 16:14:09 56 123456003 5307397 1 2020-02-07 16:55:58 2020-02-07 16:55:58 - 这里主要是记录用户与个人和群组的对话框信息,也就是与用户聊天则记录好友与用户ID、与群组聊天则记录用户与群组ID关系。
-
聊天记录主要记录每个用户与好友或者群组的聊天消息信息,每一个聊天消息发送到服务端后都会采用异步的方式进行落库记录,以减少服务端耗时。另外这里依然是以核心的功能实现为主,随着业务的拓展可以自行添加扩展。
-
库表信息
序号 字段 类型 描述 1 id bigint(20) 自增ID 2 userId varchar(9) 自己ID 3 friendId varchar(9) 好友ID 4 talkType int(4) 对话类型;0好友、1群组 5 msgContent varchar(512) 消息内容 6 msgDate datetime 消息时间 7 createTime datetime 创建时间 8 updateTime datetime 更新时间 -
样例数据
id userId friendId msgContent msgDate createTime updateTime talkType 2 184172133 523088136 兔兔 你几号去欧洲呀 2020/2/6 11:51 2020/2/6 11:51 2020/2/6 11:51 0 3 523088136 184172133 暂时还没有计划。你呢? 2020/2/6 11:52 2020/2/6 11:52 2020/2/6 11:52 0 4 184172133 523088136 我们过了元旦就的去了 2020/2/6 12:08 2020/2/6 12:08 2020/2/6 12:08 0 5 184172133 523088136 看着还挺有意思的 2020/2/6 12:08 2020/2/6 12:08 2020/2/6 12:08 0 6 184172133 523088136 多买点包包 2020/2/6 12:08 2020/2/6 12:08 2020/2/6 12:08 0 7 523088136 184172133 破费!只能买点小东西了 2020/2/6 12:08 2020/2/6 12:08 2020/2/6 12:08 0 8 523088136 184172133 你在家干啥呢 2020/2/6 12:08 2020/2/6 12:08 2020/2/6 12:08 0 9 184172133 523088136 写点技术文章 2020/2/6 12:08 2020/2/6 12:08 2020/2/6 12:08 0 10 184172133 523088136 javafx netty springboot = 微信聊天 2020/2/6 12:09 2020/2/6 12:09 2020/2/6 12:09 0 11 523088136 184172133 我想看看 2020/2/6 12:09 2020/2/6 12:09 2020/2/6 12:09 0 12 184172133 523088136 还没完事,写完就给你看看 2020/2/6 12:09 2020/2/6 12:09 2020/2/6 12:09 0 13 184172133 523088136 嗨 2020/2/6 12:44 2020/2/6 12:44 2020/2/6 12:44 0 14 123456003 184172133 小傅哥 2020/2/6 13:13 2020/2/6 13:13 2020/2/6 13:13 0 15 184172133 123456003 咋了?Alexa 2020/2/6 13:13 2020/2/6 13:13 2020/2/6 13:13 0 16 123456003 184172133 你们那几号放假呀 2020/2/6 13:13 2020/2/6 13:13 2020/2/6 13:13 0 17 184172133 123456003 不知道呀还没放呢 2020/2/6 13:14 2020/2/6 13:14 2020/2/6 13:14 0 18 184172133 523088136 你! 2020/2/6 19:26 2020/2/6 19:26 2020/2/6 19:26 0 19 184172133 523088136 嗨 2020/2/6 19:38 2020/2/6 19:38 2020/2/6 19:38 0 20 184172133 523088136 兔兔 2020/2/6 20:07 2020/2/6 20:07 2020/2/6 20:07 0 21 184172133 523088136 嗨 2020/2/6 20:13 2020/2/6 20:13 2020/2/6 20:13 0 22 184172133 523088136 兔兔出来玩呀 2020/2/6 20:16 2020/2/6 20:16 2020/2/6 20:16 0
如果本项目能为您提供帮助,请给予支持(关注、点赞、分享)!