1. 项目技术架构

  • Spring Boot
  • Spring、Spring MVC、Mybatis
  • Redis、Kafka、Elasticsearch
  • Spring Security、Spring Actuator

    2. 搭建开发环境

    Apache maven

    1. mvn -v #查看版本
    2. mvn compile #编译
    3. mvn clean #删除编译的结果
    4. mvn clean compile #先清理再编译

    MySQL

    ```markdown

    安装MySQL需要以管理员身份在bin目录下运行以下命令

    mysqld —initialize —console

安装和启动

mysqld install net start mysql

登录MySQL

mysql -u root -p

退出MySQL

exit

登录之后,可以修改MySQL登录密码

alter user root@localhost identified by ‘123456’;

建库

create database community;

查看当前所有数据库

show databases;

使用某个数据库

use community;

导入SQL文件

source C:\work\community-init-sql-1.5\init_schema.sql source C:\work\community-init-sql-1.5\init_data.sql

查看表

show tables;

**<br />**Mybatis 核心组件:**

- SqlSessionFactory:用于创建 SqlSession 的工厂类。
- SqlSession:Mybatis 的核心组件,用于向数据库执行 SQL。
- 主配置文件:XML 配置文件,可以对 Mybatis 的底层行为做出详细的配置。
- Mapper 接口:就是 DAO 接口,在 Mybatis 中习惯性地称之为 Mapper。
- Mapper 映射器,用于编写 SQL,并将 SQL 和实体类映射的组件,采用 XML、注解均可实现。

> salt 是一个随机字符串,用户密码拼上 salt 之后再进行加密,这样不容易被破解。

<a name="b075ee49"></a>
# 3. SSM 入门
**Bean**:由 Spring 管理的对象,`SpringApplication.run()`在底层为我们自动创建了 Spring 容器,会扫描配置类所在包以及其子包下的类,将其纳入 IOC 容器进行管理,这些类称为 bean。Controller、Repository 和 Service 注解都是由 Conponent 注解实现的,因此直接将 Conponent 注解加到某个类上,就能让这个类被扫描到,成为 IOC 容器管理的 bean。<br />![](https://cdn.nlark.com/yuque/0/2021/png/1032788/1612349431772-207e152d-7569-4747-a77c-4820c013a5ee.png#align=left&display=inline&height=369&margin=%5Bobject%20Object%5D&originHeight=358&originWidth=645&size=0&status=done&style=none&width=664)<br />Controller 向业务层取数据交给 Model,然后再交由 View 展示。

**HTTP 学习**:<br />[HTTP | MDN (mozilla.org)](https://developer.mozilla.org/zh-CN/docs/Web/HTTP)

**Thymeleaf**:

- 模版引擎:生成动态的 HTML
- Thymeleaf:倡导自然模板,即以 HTML 文件为模板
- 常用语法:标准表达式、判断与循环、模板的布局

![](https://cdn.nlark.com/yuque/0/2021/png/1032788/1612349432271-911c405d-2de2-46ac-b2c9-623550180d9e.png#align=left&display=inline&height=186&margin=%5Bobject%20Object%5D&originHeight=186&originWidth=519&size=0&status=done&style=none&width=519)
<a name="604dac84"></a>
# 4. 表结构
<a name="3ec750c5"></a>
## 帖子表
```sql
CREATE TABLE `discuss_post` (  
  `id` int NOT NULL AUTO_INCREMENT,  
  `user_id` varchar(45) DEFAULT NULL,  
  `title` varchar(100) DEFAULT NULL,  
  `content` text,  
  `type` int DEFAULT NULL COMMENT '0-普通; 1-置顶;',  
  `status` int DEFAULT NULL COMMENT '0-正常; 1-精华; 2-拉黑;',  
  `create_time` timestamp NULL DEFAULT NULL,  
  `comment_count` int DEFAULT NULL,  
  `score` double DEFAULT NULL,  
  PRIMARY KEY (`id`),  
  KEY `index_user_id` (`user_id`)  
) ENGINE=InnoDB AUTO_INCREMENT=300292 DEFAULT CHARSET=utf8

用户表

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,  
  `username` varchar(50) DEFAULT NULL,  
  `password` varchar(50) DEFAULT NULL,  
  `salt` varchar(50) DEFAULT NULL,  
  `email` varchar(100) DEFAULT NULL,  
  `type` int DEFAULT NULL COMMENT '0-普通用户; 1-超级管理员; 2-版主;',  
  `status` int DEFAULT NULL COMMENT '0-未激活; 1-已激活;',  
  `activation_code` varchar(100) DEFAULT NULL,  
  `header_url` varchar(200) DEFAULT NULL,  
  `create_time` timestamp NULL DEFAULT NULL,  
  PRIMARY KEY (`id`),  
  KEY `index_username` (`username`(20)),  
  KEY `index_email` (`email`(20))  
) ENGINE=InnoDB AUTO_INCREMENT=164 DEFAULT CHARSET=utf8

登陆凭证表

CREATE TABLE `login_ticket` (  
  `id` int NOT NULL AUTO_INCREMENT,  
  `user_id` int NOT NULL,  
  `ticket` varchar(45) NOT NULL COMMENT '登录凭证',  
  `status` int DEFAULT '0' COMMENT '0-有效; 1-无效;',  
  `expired` timestamp NOT NULL,  
  PRIMARY KEY (`id`),  
  KEY `index_ticket` (`ticket`(20))  
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8

评论表

CREATE TABLE `comment` (  
  `id` int NOT NULL AUTO_INCREMENT,  
  `user_id` int DEFAULT NULL,  
  `entity_type` int DEFAULT NULL,  
  `entity_id` int DEFAULT NULL,  
  `target_id` int DEFAULT NULL,  
  `content` text,  
  `status` int DEFAULT NULL,  
  `create_time` timestamp NULL DEFAULT NULL,  
  PRIMARY KEY (`id`),  
  KEY `index_user_id` (`user_id`)
  KEY `index_entity_id` (`entity_id`)  
) ENGINE=InnoDB AUTO_INCREMENT=238 DEFAULT CHARSET=utf8

私信表

CREATE TABLE `message` (  
  `id` int NOT NULL AUTO_INCREMENT,  
  `from_id` int DEFAULT NULL,  
  `to_id` int DEFAULT NULL,  
  `conversation_id` varchar(45) NOT NULL,  
  `content` text,  
  `status` int DEFAULT NULL COMMENT '0-未读;1-已读;2-删除;',  
  `create_time` timestamp NULL DEFAULT NULL,  
  PRIMARY KEY (`id`),  
  KEY `index_from_id` (`from_id`),  
  KEY `index_to_id` (`to_id`),  
  KEY `index_conversation_id` (`conversation_id`)  
) ENGINE=InnoDB AUTO_INCREMENT=363 DEFAULT CHARSET=utf8

5. 开发社区首页的分步实现

  1. 开发社区首页,显示前 10 个帖子
  2. 开发分页组件,分页显示所有帖子

    6. 项目调试技巧

    浏览器在访问服务器的『删除』功能之后,需要服务器返回删除帖子后的所有帖子。这时候可以在『删除』功能的内部进行『查询』,但是这样不利于之后的解耦,因此服务器一般给服务器返回『302 重定向』的信息,让浏览器自己再去访问『查询』功能。

再比如,用户在注册完成之后可以重定向到登录页面。

将控制台的打印信息设置为 DEBUG,这样可以打印出执行的 SQL 语句。