数据库表
用户表 user
字段 | 类型 | 备注 |
---|---|---|
id | int | 主键、自增 |
username | varchar | 用户名,创建索引 |
password | varchar | 用户密码 |
salt | varchar | 加密盐值 |
varchar | 用户邮箱,创建索引 | |
type | int | 用户类型:0 普通、1 管理员、2 版主 |
status | int | 用户状态:0 未激活、1 已激活 |
activation_code | varchar | 激活码 |
header_url | varchar | 用户头像地址 |
create_time | timestamp | 注册时间 |
评论表 comment
字段 | 类型 | 备注 |
---|---|---|
id | int | 主键、自增 |
user_id | int | 评论的用户 id,创建索引 |
entity_id | int | 评论实体 id,创建索引 |
entity_type | int | 评论实体类型:1 帖子评论、2 评论回复 |
target_id | int | 评论目标 id |
content | text | 评论内容 |
status | int | 评论状态:0 有效、1 无效 |
create_time | timestamp | 评论发表时间 |
帖子表 discuss_post
字段 | 类型 | 备注 |
---|---|---|
id | int | 主键、自增 |
user_id | int | 发帖的用户 id,创建索引 |
title | varchar | 帖子表标题 |
content | text | 帖子内容 |
type | int | 帖子类型:0 普通、1 置顶 |
comment_count | int | 评论数量 |
status | int | 帖子状态:0 普通、1 精华、2 拉黑 |
create_time | timestamp | 评论发表时间 |
用户登录凭证表 login_ticket
字段 | 类型 | 备注 |
---|---|---|
id | int | 主键、自增 |
user_id | int | 登录用户 id |
ticket | varchar | 登录凭证,随机字符串 |
status | int | 登录状态:0 有效、1 无效 |
expired | timestamp | 过期时间 |
消息表 message
字段 | 类型 | 备注 |
---|---|---|
id | int | 主键、自增 |
from_id | int | 发消息的 id,创建索引 |
to_id | int | 收消息的 id,创建索引 |
conversation_id | varchar | 会话 id,由通信双方 id 拼接,创建索引 |
content | text | 消息内容 |
status | int | 消息状态:0 未读、1 已读、2 删除 |
create_time | timestamp | 消息发送时间 |
开发社区首页
搭建基本环境
构建 SpringBoot 的 maven 项目,引入 mysql 和 mybatis 依赖。
在 application.properties
配置文件中:
- 关闭 thymeleaf 缓存
- 配置数据库,设置基本连接信息、最大线程数,最小空闲线程数,最大空闲时间等
- mybatis,设置 mapper 文件的位置、实体类包名、使用主键等
创建 community 数据库和数据库表。
用户相关操作:
- 创建对应 user 表的 User 实体类
- 创建 UserMapper 接口,使用
@Mapper
注解 - 创建 user-mapper.xml,重复 sql 语句可以写在
<sql id = "xxx">
标签,通过<include refid="xxx"/>
引用。
开发社区首页(discuss_post 表)
功能拆分:开发社区首页,显示前 10 个帖子。开发分页组件,分页显示所有帖子。
用到的表是 discuss_post 数据库表,包括帖子 id、发帖人 id、标题、内容、类型、状态、发帖时间、评论数量(为了提高效率,避免关联查询,因此冗余存储)、分数(用于进行热度排名)。
开发数据层
帖子相关操作:
-
创建对应 discuss_post 表的 DisscussPost 实体类。
-
创建 DisscussPostMapper 接口,使用
@Mapper
注解。- 分页查询中用户 id 是可选参数,通过动态 SQL 选择,如果为 0 就不使用,在开发用户个人主页查询用户发帖记录时需要使用。
- 如果只有一个参数,并且在动态 SQL 的
<if>
里使用,必须使用@Param
加别名。
-
创建
disscusspost-mapper.xml
。-
where status != 2
拉黑的帖子不展现。 -
<if test="userId!=0">
userID 为 0 时不使用,按照类型,发帖时间排序。
-
开发业务层
创建 DiscussPostService 类,可以分页查询帖子和帖子数量。
创建 UserService 类,实现根据 id 查询用户功能,因为显示帖子时不显示用户 id,而是显示用户名。
开发视图层
把静态资源 css、html、img、js 放到 static 目录下。
把模板 mail、site、index.html 放到 template 目录下。
创建 HomeController,getIndexPage
方法,用 map 集合把帖子和用户封装到一起。
修改 index.html
,使用 <th:text="${map.xxx.xxx}"
动态替换。
【问题】使用帖子关联查询用户时,给查询用户的 findUserById