1.创建SpringBoot项目
2.勾选依赖
勾选Mybatis FrameWork、MySQL Driver、Spring web(mvc)、Lombok、Validation依赖
Validation框架是用来校验数据合法性;
Lombok框架用来减少模板代码,提供日志功能;
mvc通过将请求分派给相应的控制器来处理Web请求,然后将处理结果发送回客户端。
mybatis框架简化了90%以上的JDBC代码
3.搭建项目结构
先跟我把项目结构搭建起来
4.导入数据库数据
执行sql语句
DROP DATABASE IF EXISTS blog;
CREATE DATABASE blog CHARSET=UTF8;
USE blog;
CREATE TABLE user(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
password VARCHAR(100),
nickname VARCHAR(50),
created TIMESTAMP
)CHARSET=UTF8;
CREATE TABLE weibo(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(255),
created TIMESTAMP,
user_id BIGINT
)CHARSET=UTF8;
CREATE TABLE comment(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(255),
created TIMESTAMP,
user_id BIGINT,
weibo_id BIGINT
)CHARSET=UTF8;
INSERT INTO user VALUES (100, 'Lucy', '123456', 'lucy', '1987-10-16 00:00:00');
INSERT INTO user VALUES (101, 'Tom', '123456', 'tom', '1987-10-16 00:00:00');
INSERT INTO user VALUES (102, 'Jim', '123456', 'jim', '1987-10-16 00:00:00');
INSERT INTO weibo VALUES (200, 'lucy的第1条微博', '2000-01-01 00:00:00', 100);
INSERT INTO weibo VALUES (201, 'lucy的第2条微博', '2000-01-01 00:00:00', 100);
INSERT INTO weibo VALUES (202, 'tom的第1条微博', '2000-01-01 00:00:00', 101);
INSERT INTO weibo VALUES (203, 'tom的第2条微博', '2000-01-01 00:00:00', 101);
INSERT INTO weibo VALUES (204, 'tom的第3条微博', '2000-01-01 00:00:00', 101);
INSERT INTO comment VALUES (300, 'lucy对第1条微博的评论', '2008-01-01 00:00:00', 100, 200);
INSERT INTO comment VALUES (301, 'tom对第1条微博的评论', '2008-01-01 00:00:00', 101, 200);
INSERT INTO comment VALUES (302, 'lucy对第2条微博的评论', '2008-01-01 00:00:00', 100, 201);
INSERT INTO comment VALUES (303, 'tom对第2条微博的评论', '2008-01-01 00:00:00', 101, 201);
INSERT INTO comment VALUES (304, 'jim对第2条微博的评论', '2008-01-01 00:00:00', 102, 201);
5.对application.properties进行配置
将下面配置复制到application.properties里完成数据库配置、mapper接口的扫描,以及全局和项目日志级别的设置,端口号默认为8080
mybatis.mapper-locations=classpath:mappers/*.xml
spring.datasource.url=jdbc:mysql://localhost:3306/blog?characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
logging.level.root=warn
logging.level.com.example._05mvcboot03=debug
server.port=8080
6.entity类与数据库表字段映射
创建三个实体类
//Data注解是Lombok的一个注解,用于Getter、Setter、toString减少模板代码的冗余
@Data
public class Comment {
private Long id;
private String content;
private Date created;
private Long userId;
private Long weiboId;
}
@Data
public class User {
private Long id;
private String username;
private String password;
private String nickname;
private Date created;
}
@Data
public class Weibo {
private Long id;
private String content;
private Date created;
private Long userId;
}
7.创建MybatisConfig完成对mapper接口的自动扫描
否则每次写接口都要在接口上面写@Mapper注解
@Mapper注解的主要作用是自动为接口创建实现类,并且在@Autowired注解的作用下自动装配到bean对象里面
@Configuration
@MapperScan("com.example.xiangmu.mapper")
public class MybatisConfig {
}
8.在pom.xml文件里导入knife4j依赖
Knife4j是基于SpringBoot构建的一个文档生成工具,它可以让开发者为我们的应用生成API文档;
目的是可以更加方便的基于API文档进行测试。
生成的文档还可以导出,然后给到前端开发团队,前端开发团队可以基于API接口写具体的调用。
这是knife4j的配置坐标,knife4j的好处非常多,有了它我们就可以不用再自己写测试方法,框架什么都给我们准备好了
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
一定要放在<dependencies></dependencies>里面 ,然后下载依赖
创建Knife4jConfig,并将下面配置文件粘贴进去
package com.example.xiangmu.config;
//这是你项目的目录文件
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {
//配置Swagger2的Docket的Bean实例
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
// apiInfo():配置 API 的一些基本信息,比如:文档标题title,文档描述description,文档版本号version
.apiInfo(apiInfo())
// select():生成 API 文档的选择器,用于指定要生成哪些 API 文档
.select()
// apis():指定要生成哪个包下的 API 文档
.apis(RequestHandlerSelectors.basePackage("cn.tedu._05weibo.controller"))
// paths():指定要生成哪个 URL 匹配模式下的 API 文档。这里使用 PathSelectors.any(),表示生成所有的 API 文档。
.paths(PathSelectors.any())
.build();
}
//文档信息配置
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 文档标题
.title("微博项目")
// 文档描述信息
.description("微博项目在线API文档")
// 文档版本号
.version("1.0")
.build();
}
}
配置好knife4j后,在本地浏览器发送请求:
http://localhost:8080/doc.html
看图:
这是我写好的一部分,可以看到我们不需要写字段,只需要输入我们想测试的值就可以了
非常的好用
9.自定义内部状态码
创建枚举,状态码包括状态码和含义
@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum StatesCode {
OPERATION_SUCCESS(10100,"操作成功"),
OPERATION_FAILED(10200,"操作失败"),
USERNAME_PASSWORD_ERROR(10300,"用户名或密码错误"),
NOT_LOGIN(10400,"未登录"),
VALIDATED_ERROR(10500,"参数校验失败");
private Integer state;
public String message;
}
10.统一结果响应返回
在response包里面创建JsonResult类(当然类,名字可以随便起)
将下面代码粘入
package com.example._05mvcboot03.common.response;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class JsonResult {
/**
* 1.针对于没有具体数据返回的控制器方法[登录、注册],使用此构造方法
*/
public JsonResult(StatesCode statesCode) {
this.state=statesCode.getState();
this.message=statesCode.getMessage();
}
/**
* 2.针对于有具体数据返回的控制器方法[微博首页、评论表],使用:全参构造 AllArgsConstructor
*/
public JsonResult(StatesCode statesCode,Object data) {
this.state=statesCode.getState();
this.message=statesCode.getMessage();
this.data=data;
}
/**
* 针对于操作成功的场景,可以再次进行封装;
* 定义2个静态方法:
* 1.针对于有具体数据返回的:ok(数据);
* 2.针对于没有具体数据返回的:ok();
*/
public static JsonResult ok(Object data){
return new JsonResult(StatesCode.OPERATION_SUCCESS,data);
}
public static JsonResult ok(){
return new JsonResult(StatesCode.OPERATION_SUCCESS,null);
}
// 响应状态码, 提示消息, 响应数据
private Integer state;
private String message;
private Object data;
}
至此,微博项目的整体框架就搭好了,后面我会完成微博项目的简单逻辑开发