软件开发流程:
- 需求分析:需求规格说明书、产品原型
- 设计:UI设计、数据库设计、接口设计
- 编码:项目代码、单元测试
- 测试:测试用例、测试报告
- 上线运维:软件环境安装、配置
前端:直接使用 nginx 启动
后端:导入 IDEA,创建 git 仓库
数据库:生成数据库表并导入数据
使用 mybatisX 生成实体类、mapper层和service层代码
mybatis:
#mapper配置文件
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.sky.model
configuration:
#开启驼峰命名
map-underscore-to-camel-case: true
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-field: is_delete # 全局逻辑删除的实体字段名
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)前后端联调,nginx反向代理后端
upstream webservers {
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
server {
listen 80;
server_name localhost;
location /api/ {
proxy_pass http://webservers/admin/; #反向代理
}
}swagger 接口文档
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
/**
* 通过knife4j生成接口文档
* @return
*/
@Bean
public Docket docket() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
/**
* 设置静态资源映射
* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}swagger 注解
| 注解 | 说明 |
|---|---|
| @Api | 用在类上,例如controller,表示对类的说明 |
| @ApiModel | 用在类上,例如entity、DTO、VO |
| @ApiModelProperty | 用在属性上,描述属性信息 |
| @ApiOperation | 用在方法上,例如Controller的方法,说明方法的用途、作用 |
- 添加员工
捕获SQL异常:
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex) {
String msg = ex.getMessage();
if (msg.contains("Duplicate entry")) {
String[] split = msg.split(" ");
String username = split[2];
return Result.error(username + MessageConstant.ALREADY_EXISTS);
} else {
return Result.error("操作失败");
}
}- 分页查询
需要配置 mybatis-plus
@Configuration
@MapperScan("com.sky.mapper")
public class MyBatisPlusConfig {
/**
* 拦截器配置
*
* @return
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}- 根据id查询员工
- 编辑员工信息
- 停用启用员工账号