1. 项目技术架构
- Spring Boot
- Spring、Spring MVC、Mybatis
- Redis、Kafka、Elasticsearch
- Spring Security、Spring Actuator
2. 搭建开发环境
Apache maven
mvn -v #查看版本
mvn compile #编译
mvn clean #删除编译的结果
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. 开发社区首页的分步实现
- 开发社区首页,显示前 10 个帖子
- 开发分页组件,分页显示所有帖子
6. 项目调试技巧
浏览器在访问服务器的『删除』功能之后,需要服务器返回删除帖子后的所有帖子。这时候可以在『删除』功能的内部进行『查询』,但是这样不利于之后的解耦,因此服务器一般给服务器返回『302 重定向』的信息,让浏览器自己再去访问『查询』功能。
再比如,用户在注册完成之后可以重定向到登录页面。
将控制台的打印信息设置为 DEBUG,这样可以打印出执行的 SQL 语句。