简单微博项目的开发(整体结构搭建)

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;
}

至此,微博项目的整体框架就搭好了,后面我会完成微博项目的简单逻辑开发

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值