SpringBoot项目从零搭建
2021-03-05 17:27
标签:autowired temp oracl void pid snap cto group hot 工具和环境配置清单如下,给出了软件版本、安装教程、入门教程的链接,可以给读者提供关键线索,个别细节读者自行Google解决即可 注意:依赖是逐步添加的,根据调试一个一个功能的加,这里给出的是全部的依赖 常规操作,需要注意的是MapperScan这里导的是tk-mybatis的包 关注以下2点: 通用Mapper自带了常见的CRUD方法,只需要将自己接口类继承Mapper接口类即可使用。如 对于复杂的CRUD操作,读者需要在接口类中定义方法,在xml中书写sql语句及结果映射。 service层里完成主要的业务处理,在这里加入了Redis的缓存,类型为String Restful风格的API接口测试 常规操作 常规操作 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.htmlSpringBoot项目从零搭建
0、工具和环境配置
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、依赖配置
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、生成启动器
@SpringBootApplication
@MapperScan("com.kkb.mapper")
public class QaApplication {
public static void main(String[] args) {
SpringApplication.run(QaApplication.class, args);
}
}
1.4、实体类生成
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层
public interface AnswerMapper extends Mapper {
}
1.6、Service层
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层
1.8、单元测试
1.9、PostMan测试
1.10、Swagger配置及测试