您的位置:首页 > 科技 > 能源 > 淮南最新通告今天_网站主题推荐_百度推广seo自学_seo优化排名易下拉效率

淮南最新通告今天_网站主题推荐_百度推广seo自学_seo优化排名易下拉效率

2025/3/19 21:18:16 来源:https://blog.csdn.net/z_kakaya/article/details/146337428  浏览:    关键词:淮南最新通告今天_网站主题推荐_百度推广seo自学_seo优化排名易下拉效率
淮南最新通告今天_网站主题推荐_百度推广seo自学_seo优化排名易下拉效率

接口测试-Springboot增删改查

1.创建springboot工程

image-20250318101025383

image-20250318101140188

2.添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.13</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.scuvc</groupId><artifactId>crud</artifactId><version>0.0.1-SNAPSHOT</version><name>vuecrud</name><description>swagger for Spring Boot</description><properties>
<!--        jdk版本--><java.version>17</java.version>
<!--        mysql jdbc驱动--><mysql.version>8.0.28</mysql.version>
<!--        mybatis-plus--><mybatis-plus.version>3.4.2</mybatis-plus.version><mybatis-plus-generator.version>3.4.1</mybatis-plus-generator.version><velocity-engine-core.version>2.3</velocity-engine-core.version><swagger.version>2.7.0</swagger.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
<!--        mysql8驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency>
<!--        mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!--        逆向工程代码生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis-plus-generator.version}</version></dependency><!--        生成器默认模板引擎--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>${velocity-engine-core.version}</version></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version></dependency><!--swagger ui--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

3.新建数据库crud,运行以下SQL

DROP TABLE IF EXISTS `hospital_set`;CREATE TABLE `hospital_set` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',`hosname` varchar(100) DEFAULT NULL COMMENT '医院名称',`hoscode` varchar(30) DEFAULT NULL COMMENT '医院编号',`api_url` varchar(100) DEFAULT NULL COMMENT 'api基础路径',`sign_key` varchar(50) DEFAULT NULL COMMENT '签名秘钥',`contacts_name` varchar(20) DEFAULT NULL COMMENT '联系人',`contacts_phone` varchar(11) DEFAULT NULL COMMENT '联系人手机',`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除(1:已删除,0:未删除)',PRIMARY KEY (`id`),UNIQUE KEY `uk_hoscode` (`hoscode`)) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8mb3 COMMENT='医院设置表';-- ------------------------------ Records of hospital_set-- ----------------------------INSERT INTO `hospital_set` VALUES ('1', '*成都第一医院', '00012', '/api/tiantan', '122', '', null, '0', '2025-03-15 22:58:09', '2025-03-25 19:08:43', '1');INSERT INTO `hospital_set` VALUES ('2', '*四川省医院', '00015', '/api/east', '122', '', '', '0', '2025-03-15 22:58:09', '2025-03-25 19:08:43', '1');INSERT INTO `hospital_set` VALUES ('3', '*华西医院', '00016', '/api/airforce', '122', '', '', '0', '2025-03-15 22:58:09', '2025-03-25 19:08:43', '0');INSERT INTO `hospital_set` VALUES ('4', '*军区总医院', '00017', '/api/army', '122', '', '', '0', '2025-03-15 22:58:09', '2025-03-25 19:08:43', '0');INSERT INTO `hospital_set` VALUES ('5', '*成都中医院', '00019', '/api/navy', '122', '', '', '0', '2025-03-15 22:58:09', '2025-03-25 19:08:43', '1');

4.配置application.properties

#服务器端口号
server.port=8080
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crud?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
mybatis-plus.configuration.map-underscore-to-camel-case=true
#日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#主键生成策略:雪花算法
mybatis-plus.global-config.db-config.id-type=ASSIGN_ID

5.逆向工程生成代码

package com.scuvc.code;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CodeGenerator {public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("请输入" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotEmpty(ipt)) {return ipt;}}throw new MybatisPlusException("请输入正确的" + tip + "!");}public static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();// 全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("Michealzou");gc.setOpen(false);// 设置名字gc.setControllerName("%sController");gc.setServiceName("%sService");gc.setServiceImplName("%sServiceImpl");gc.setMapperName("%sMapper");// 设置 resultMapgc.setBaseResultMap(true);gc.setBaseColumnList(true);
//        gc.setFileOverride(true);// gc.setSwagger2(true); 实体属性 Swagger2 注解mpg.setGlobalConfig(gc);// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/crud?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("root");mpg.setDataSource(dsc);// 自定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};// 包配置PackageConfig pc = new PackageConfig();//  pc.setModuleName(scanner("模块名"));pc.setParent("com.scvuc");mpg.setPackageInfo(pc);// 如果模板引擎是 velocityString templatePath = "/templates/mapper.xml.vm";// 自定义输出配置List<FileOutConfig> focList = new ArrayList<>();// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);// 配置模板TemplateConfig templateConfig = new TemplateConfig();templateConfig.setXml(null);mpg.setTemplate(templateConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);// 写于父类中的公共字段
//        strategy.setSuperEntityColumns("id");strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName() + "_");mpg.setStrategy(strategy);mpg.setTemplateEngine(new VelocityTemplateEngine());mpg.execute();}
}

输入表名,生成对应代码。在Mapper的接口上添加注解@Mapper

6.创建swagger接口测试配置代码

创建config包,并创建类Swagger2Config:

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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;/*** Swagger2配置信息*/
@Configuration
@EnableSwagger2
public class Swagger2Config {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2)//apiInfo指定测试文档基本信息,这部分将在页面展示.apiInfo(apiInfo()).select()//apis() 控制哪些接口暴露给swagger,.apis(RequestHandlerSelectors.basePackage("com.scvuc")).paths(PathSelectors.any()).build();}//基本信息,页面展示private ApiInfo apiInfo() {return new ApiInfoBuilder().title("增删改查").description("接口测试").version("1.0").contact(new Contact("xxx", "http://www.qq.com", "Michealzou@126.com")).build();}
}

启动项目输入网址http://localhost:8080/swagger-ui.html

image-20250318105752755

7.配置分页

在config下创建MybatisPlusConfig类,用于分页使用:

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class MybatisPlusConfig {/*** 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {log.info("分页插件......");MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

8.配置mybatis-plus公共字段插入

将MyConfig.java放到config包里:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;@Configuration
@Slf4j
public class MyConfig {@Beanpublic MetaObjectHandler metaObjectHandler(){return new MetaObjectHandler() {@Overridepublic void insertFill(MetaObject metaObject) {log.info("开始处理 insert方式 公共字段");metaObject.setValue("createTime", LocalDateTime.now());metaObject.setValue("updateTime", LocalDateTime.now());
//                metaObject.setValue("createUser", BaseContext.getCurrentId());
//                metaObject.setValue("updateUser", BaseContext.getCurrentId());}@Overridepublic void updateFill(MetaObject metaObject) {//验证LoginFilter 的doFilter//    MyMetaObjectHandler的updateFill//    EmployeeController的update方法使用同一线程Long sameId = Thread.currentThread().getId();log.info("doFilter  updateFill  update sameId = {}", sameId);log.info("开始处理 update方式 公共字段");metaObject.setValue("updateTime", LocalDateTime.now());//          metaObject.setValue("updateUser", BaseContext.getCurrentId());}};}
}

9.配置工具类

创建一个包util,将ResultCodeEnum.java和Result.java放到util包中,用于统一返回结果

import lombok.Getter;
/*** 统一返回结果状态信息类*/
@Getter
public enum ResultCodeEnum {SUCCESS(200,"成功"),FAIL(201, "失败"),PARAM_ERROR( 202, "参数不正确"),SERVICE_ERROR(203, "服务异常"),DATA_ERROR(204, "数据异常"),DATA_UPDATE_ERROR(205, "数据版本异常"),LOGIN_AUTH(208, "未登陆"),PERMISSION(209, "没有权限"),CODE_ERROR(210, "验证码错误"),//    LOGIN_MOBLE_ERROR(211, "账号不正确"),LOGIN_DISABLED_ERROR(212, "改用户已被禁用"),REGISTER_MOBLE_ERROR(213, "手机号已被使用"),LOGIN_AURH(214, "需要登录"),LOGIN_ACL(215, "没有权限"),URL_ENCODE_ERROR( 216, "URL编码失败"),ILLEGAL_CALLBACK_REQUEST_ERROR( 217, "非法回调请求"),FETCH_ACCESSTOKEN_FAILD( 218, "获取accessToken失败"),FETCH_USERINFO_ERROR( 219, "获取用户信息失败"),//LOGIN_ERROR( 23005, "登录失败"),PAY_RUN(220, "支付中"),CANCEL_ORDER_FAIL(225, "取消订单失败"),CANCEL_ORDER_NO(225, "不能取消预约"),SIGN_ERROR(300, "签名错误"),;private Integer code;private String message;private ResultCodeEnum(Integer code, String message) {this.code = code;this.message = message;}
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/*** 全局统一返回结果类*/
@Data
@ApiModel(value = "全局统一返回结果")
public class Result<T> {@ApiModelProperty(value = "返回码")private Integer code;@ApiModelProperty(value = "返回消息")private String message;@ApiModelProperty(value = "返回数据")private T data;public Result(){}protected static <T> Result<T> build(T data) {Result<T> result = new Result<T>();if (data != null) {result.setData(data);}return result;}public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {Result<T> result = build(body);result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());return result;}public static <T> Result<T> build(Integer code, String message) {Result<T> result = build(null);result.setCode(code);result.setMessage(message);return result;}public static<T> Result<T> ok(){return Result.ok(null);}/*** 操作成功* @param data* @param <T>* @return*/public static<T> Result<T> ok(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.SUCCESS);}public static<T> Result<T> fail(){return Result.fail(null);}/*** 操作失败* @param data* @param <T>* @return*/public static<T> Result<T> fail(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.FAIL);}public Result<T> message(String msg){this.setMessage(msg);return this;}public Result<T> code(Integer code){this.setCode(code);return this;}public boolean isOk() {if(this.getCode().intValue() == ResultCodeEnum.SUCCESS.getCode().intValue()) {return true;}return false;}
}

10.编写增删改查接口

controller:

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.scvuc.entity.HospitalSet;
import com.scvuc.service.HospitalSetService;
import com.scvuc.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** <p>* 医院设置表 前端控制器* </p>** @author Michealzou* @since 2025-03-18*/
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
@Api(tags = "单表增删改查")
@Slf4j
@CrossOrigin
public class HospitalSetController {@Autowiredprivate HospitalSetService hospitalSetService;//    insert into hospital_set(id,hoscode,hosname,api_url,sign_key,
//    contacts_name,contacts_phone,status,is_deleted)
//    value(999,'123ww','buba','http','fjaa','赵六','21',0,0);@ApiOperation(value = "单表插入")@PostMapping("/save")public Result save(@RequestBody HospitalSet hospitalSet){if (hospitalSet == null){return Result.fail();}boolean b = hospitalSetService.save(hospitalSet);if (b){return Result.ok();}else{return  Result.fail();}}//接口方法,入口@ApiOperation(value = "分页查询")//get请求路径@GetMapping("/getPage/{pageNumber}/{pageSize}")//limit (pathNumber - 1) * pageSize,pageSize//第一页,每页五条数据//select * from hospital limit 0,5//公共方法,返回值是result类型的json数据,请求路径获取public Result getPage(@PathVariable Long pageNumber,@PathVariable Long pageSize){//构造器Page<HospitalSet> p = new Page<>(pageNumber,pageSize);Page<HospitalSet> page = hospitalSetService.page(p);return Result.ok(page);}@ApiOperation(value = "单表修改")@PostMapping("/updateHosp")//update hospital_set set hosname = '西安医院' where id = 10;//接收Post请求返回json数据public Result updateHosp(@RequestBody HospitalSet hospitalSet){boolean b = hospitalSetService.updateById(hospitalSet);if (b){return Result.ok();}else {return Result.fail();}}@ApiOperation(value = "根据id删除")@GetMapping("/removeById")//delete from hospital_set where id = 10;public Result removeById(Long id) {boolean b = hospitalSetService.removeById(id);if (b){return Result.ok();}else {return Result.fail();}}

在实体类Hospital-set的id上添加注解

/**
* 编号
*/
@JsonFormat(shape = JsonFormat.Shape.STRING)
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;

11.接口测试

et);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}

@ApiOperation(value = "根据id删除")
@GetMapping("/removeById")
//delete from hospital_set where id = 10;
public Result removeById(Long id) {boolean b = hospitalSetService.removeById(id);if (b){return Result.ok();}else {return Result.fail();}
}

在实体类Hospital-set的id上添加注解```java
/**
* 编号
*/
@JsonFormat(shape = JsonFormat.Shape.STRING)
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;

11.接口测试

启动项目,打开http://localhost:8080/swagger-ui.html进行接口测试。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com