SpringBoot项目从零搭建

2021-03-05 17:27

阅读:647

标签:autowired   temp   oracl   void   pid   snap   cto   group   hot   

SpringBoot项目从零搭建

0、工具和环境配置

工具和环境配置清单如下,给出了软件版本、安装教程、入门教程的链接,可以给读者提供关键线索,个别细节读者自行Google解决即可

0.1、工具
作用 名称 版本 备注
web服务器 Tomcat
版本管理 Git latest
代码开发工具 IDEA 2020.1
数据库可视化工具 Navicat 15.0.2
建模工具 PDMan 2.2.0 Gitee下载、教程
Restful测试工具 PostMan
0.2、开发环境
名称 版本 注释
JDK 11 官方安装包
MySQL 5.7.32
Redis 5.0.5 下载及安装
SpringBoot 2.2.13.RELEASE 官网
Maven 3.3.3
Knife4j 2.0.7 官方教程
Mybatis 2.1.4(latest) mybatis-spring-boot-starter
Druid 1.2.4(latest) druid-spring-boot-starter

1、SpringBoot工程项目搭建

1.1、依赖配置

注意:依赖是逐步添加的,根据调试一个一个功能的加,这里给出的是全部的依赖

4.0.0com.kkb
    qa-v01
    1.0-SNAPSHOT11org.springframework.boot
        spring-boot-starter-parent
        2.2.13.RELEASEorg.springframework.boot
            spring-boot-starter-web
        tk.mybatis
            mapper-spring-boot-starter
            2.0.2com.alibaba
            druid-spring-boot-starter
            1.2.4org.springframework.boot
            spring-boot-starter-jdbc
        mysql
            mysql-connector-java
            8.0.23org.springframework.boot
            spring-boot-starter-test
            testjunit
            junit
            testorg.projectlombok
            lombok
        org.springframework.boot
            spring-boot-starter-data-redis
        com.alibaba
            fastjson
            1.2.9org.apache.commons
            commons-lang3
            3.9com.github.xiaoymin
            knife4j-spring-boot-starter
            2.0.7
1.2、application.yml文件配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/qa?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

# Mybatis配置
mybatis:
  type-aliases-package: com.kkb.entity
  mapper-locations: classpath:/mappers/*.xml

# Redis配置
  redis:
    host: 192.168.37.141
    port: 6379

1.3、生成启动器

常规操作,需要注意的是MapperScan这里导的是tk-mybatis的包

@SpringBootApplication
@MapperScan("com.kkb.mapper")
public class QaApplication {
    public static void main(String[] args) {
        SpringApplication.run(QaApplication.class, args);
    }
}

1.4、实体类生成

关注以下2点:

  1. 属性和字段映射
  2. 使用Swagger的@ApiModelProperty注解可以标记属性是否是必须,方便调试
package com.kkb.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;

@Table(name = "answer")
@Data
@ApiModel(value = "答案实体类")
public class Answer {
    /**
     * 主键Id,非空属性
     */
    @Id
    @Column(name = "Id")
    @ApiModelProperty(required = true, name = "id", value = "主键id")
    private String id;

    /**
     * 内容
     */
    @Column(name = "Content")
    private String content;

    /**
     * 支持数量
     */
    @Column(name = "SupportCnt")
    private Integer supportCnt;

    /**
     * 反对数量
     */
    @Column(name = "OpposeCnt")
    private Integer opposeCnt;

    /**
     * 回应问题的Id
     */
    @Column(name = "AnswerTo")
    private String answerTo;

    /**
     * 答案创建时间
     */
    @Column(name = "time")
    private Date time;

    /**
     * 用户Id
     */
    @Column(name = "UserId")
    private String userId;

    /**
     * 是否采纳,非空属性
     */
    @Column(name = "accept")
    @ApiModelProperty(required = true)
    private Integer accept;

    /**
     * 
     * 非空属性
     */
    @Column(name = "praise")
    @ApiModelProperty(required = true)
    private Integer praise;
}

1.5、mapper层

通用Mapper自带了常见的CRUD方法,只需要将自己接口类继承Mapper接口类即可使用。如

public interface AnswerMapper extends Mapper {

}

对于复杂的CRUD操作,读者需要在接口类中定义方法,在xml中书写sql语句及结果映射。

1.6、Service层

service层里完成主要的业务处理,在这里加入了Redis的缓存,类型为String

package com.kkb.service.impl;

import com.kkb.common.http.HttpResult;
import com.kkb.common.utils.JsonUtils;
import com.kkb.entity.Answer;
import com.kkb.mapper.AnswerMapper;
import com.kkb.service.AnswerService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author: PengLuo
 * @Create: 2021/1/22
 */

@Service
public class AnswerServiceImpl implements AnswerService {

    @Autowired
    private AnswerMapper answerMapper;

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Override
    public HttpResult findAllAnswers() {
        // 查询缓存
        String json = redisTemplate.opsForValue().get("answerList");
        if (StringUtils.isNotBlank(json)) {
            List list = JsonUtils.jsonToList(json, Answer.class);
            System.out.println("查询缓存成功");
            return HttpResult.ok(list);
        }
        // 缓存里没有,则查询数据库,并把查询结果存入缓存
        List list = answerMapper.selectAll();
        redisTemplate.opsForValue().set("answerList", JsonUtils.objectToJson(list));
        return HttpResult.ok(list);
    }

    @Override
    public HttpResult addAnswer(Answer answer) {
        // id可设计为系统自动生成,参考雪花算法
        int result = answerMapper.insert(answer);
        if (result == 1) {
            return HttpResult.ok("succeed add");
        } else {
            return HttpResult.error("add failure");
        }
    }

    @Override
    public HttpResult deleteById(String id) {
        // 根据id查出answer,将accept字段值修改为no,表示逻辑删除,前端不予展示即可
        Answer answer = answerMapper.selectByPrimaryKey(id);
        if (answer != null) {
            answer.setAccept(1);
            int result = answerMapper.updateByPrimaryKeySelective(answer);
            if (result == 1) {
                return HttpResult.ok("delete succeed");
            } else {
                return HttpResult.error("delete failure");
            }
        } else {
            return HttpResult.error("delete failure");
        }
    }

    @Override
    public HttpResult update(Answer answer) {
        int result = answerMapper.updateByPrimaryKeySelective(answer);
        if (result == 1) {
            return HttpResult.ok("update succeed");
        } else {
            return HttpResult.error("update failure");
        }
    }
}

1.7、Controller层

Restful风格的API接口测试

1.8、单元测试

常规操作

1.9、PostMan测试

常规操作

1.10、Swagger配置及测试

Swagger的配置参考knife4j官网的配置,访问http://localhost:8080/doc.html可跳转到交互界面。需要指出的就是

接口文档、接口调试、导出为markdown或其它格式在这里都很方便的完成

技术图片

SpringBoot项目从零搭建

标签:autowired   temp   oracl   void   pid   snap   cto   group   hot   

原文地址:https://www.cnblogs.com/PengLuo22/p/14322042.html


评论


亲,登录后才可以留言!