Appearance
业务代码编写示例
源码启动
父pom引入
xml
<parent>
<groupId>com.cpbf</groupId>
<artifactId>boot</artifactId>
<version>2.1.3</version>
</parent>
业务代码编写示例
controller 层
java
/**
* @Classname DemoController
* @Description TODO
* @Date 2021/12/21 9:44
* @Created by evolsun
*/
@RestController
@Api(tags = "示例")
public class DemoController {
@Resource
private DemoService demoService;
/**
* 示例方法
*
* @Date 2021/12/21 13:44
* @Created by evolsun
*/
@ApiOperation(value = "示例方法")
@GetMapping(name = "示例方法", path = "/json/success")
public ResponseData renderSuccess() {
demoService.demoService();
StpUtil.login(10001);
StpUtil.checkLogin();
return new SuccessResponseData();
}
}
service层
java
/**
* 演示服务
*
* @author evolsun
* @Classname DemoService
* @Description TODO
* @Date 2021/12/21 9:55
* @Created by evolsun
*/
public interface DemoService {
/**
* 演示服务
*/
public void demoService();
}
service实现层
java
/**
* 演示服务impl
*
* @author evolsun
* @Classname DemoServiceImpl
* @Description TODO
* @Date 2021/12/21 9:57
* @Created by evolsun
*/
@Service
public class DemoServiceImpl extends ServiceImpl<DemoMapper, Demo> implements DemoService, DemoServiceApi {
@Resource
DemoMapper demoMapper;
/**
* 演示服务
*/
@Override
public void demoService() {
// demoMapper.selectById(1);
System.out.println("这是一个demo方法");
}
}
mapper层
java
/**
* @Classname DemoMapper
* @Description TODO
* @Date 2021/12/21 10:12
* @Created by evolsun
*/
@Mapper
public interface DemoMapper extends BaseMapper<Demo> {
}
mapper xml文件
java
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chinapost.cpitboot.service.business.mapper.DemoMapper">
<select id="exist" resultType="boolean">
select count(1) from demo
</select>
</mapper>
Mybatis-plus
核心功能
CURD接口
- 通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
- 泛型 T 为任意实体对象
- 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
- 对象 Wrapper 为 条件构造器
Save
java
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
T | entity | 实体对象 |
int | batchSize | 插入批次数量 |
Collection<T> | entityList | 实体对象集合 |
SaveOrUpdate
java
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
T | entity | 实体对象 |
int | batchSize | 插入批次数量 |
Collection<T> | entityList | 实体对象集合 |
Wrapper<T> | updateWrapper | updateWrapper |
Remove
java
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
Wrapper<T> | queryWrapper | 实体包装类 QueryWrapper |
Serializable | id | 主键ID |
Map<String, Object> | columnMap | 表字段 map 对象 |
Collection<? extends Serializable> | idList | 主键ID列表 |
Update
java
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);
参数说明
类型 | 参数名 | 描述 |
---|---|---|
Wrapper<T> | updateWrapper | 实体对象封装操作类 UpdateWrapper |
T | entity | 实体对象 |
Map<String, Object> | columnMap | 表字段 map 对象 |
Collection<? extends Serializable> | idList | 主键ID列表 |
插件
插件主体
MybatisPlusInterceptor
该插件是核心插件,目前代理了Executor#query和Executor#update和StatementHandler#prepare方法。我们提供的插件都将基于此接口来实现功能,目前已有的功能:
- 自动分页: PaginationInnerInterceptor
- 乐观锁: OptimisticLockerInnerInterceptor
Swagger
关于Swagger
Swagger是一组围绕 OpenAPI 规范构建的开源工具,可以帮助开发人员设计、构建、记录和使用 REST API。主要的 Swagger 工具包括:
- Swagger Editor – 基于浏览器的编辑器,开发人员可以在其中编写 OpenAPI 规范;
- Swagger UI – 将 OpenAPI 规范呈现为交互式 API 文档;
- Swagger Codegen – 从 OpenAPI 规范生成服务器存根和客户端库;
Swagger集成
- 服务端框架已经集成Swagger插件,可在application.yml/application.properties配置文件中指定使用Swagger 2.0或者3.0版本。例如在.yml文件中指定swaggerVersion:3.0。默认使用2.0版本
- 单独集成需在POM文件中引入依赖
xml
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
配置SwaggerConfig
java
@Configuration
public class SwaggerConfig implements WebMvcConfigurer {
/**
* 创建rest api
*
* @return {@link Docket}
*/
@Bean
public Docket createRestApi() {
//使用swagger 3.0.0
Docket docket = new Docket(DocumentationType.OAS_30);
return docket
.pathMapping("/")
// 定义是否开启swagger,false为关闭,可以通过变量控制
.enable(true)
// 将api的元信息设置为包含在json ResourceListing响应中。
.apiInfo(apiInfo())
// 选择哪些接口作为swagger的doc发布
.select()
//扫描全局
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
// 支持的通讯协议集合
.protocols(Sets.newHashSet("http", "https"));
}
/**
* api的信息 API 页面上半部分展示信息 @return {@link ApiInfo}
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(" Api Doc")
.version(
"Application Version: "
+ "1.0.0"
+ ", Spring Boot Version: "
+ SpringBootVersion.getVersion())
.build();
}
}
- 访问ip:port/swagger-ui/index.html#即可查看
Swagger使用
java
* 控制类中的注解
* @Api 类注解,在控制类添加此注解,可以对控制器类进行功能说明
* tags="说明该类的作用,可以在UI界面上看到的注解"
* value="该参数没什么意义,可以不配置"
* @ApiOperation 方法注解:说明接口方法的作用
* value="说明方法的用途、作用"
* notes="方法的备注说明"
* @ApiImplicitParams和@ApiImplicitParam 方法注解,说明接口方法的参数
* @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
* name:参数名
* value:参数的汉字说明、解释
* required:参数是否必须传
* paramType:参数放在哪个地方
* · header --> 请求参数的获取:@RequestHeader
* · query --> 请求参数的获取:@RequestParam
* · path(用于restful接口)--> 请求参数的获取:@PathVariable
* · div(不常用)
* · form(不常用)
* dataType:参数类型,默认String,其它值dataType="Integer"
* defaultValue:参数的默认值
* @ApiIgnore 方法注解,接口不会在ui文档中出现
* @ApiResponses:用在请求的方法上,表示一组响应
* @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
* code:数字,例如400
* message:信息,例如"请求参数没填好"
* response:抛出异常的类
java
@RestController
@RequestMapping("/user")
@Api(value = "提供用户的登录和注册接口",tags = "用户管理")
public class UserController {
@Resource
private UserService userService;
@ApiOperation("用户登录接口")
@ApiImplicitParams({
@ApiImplicitParam(dataType = "string",name = "username",value = "用户登录账号",required = true),
@ApiImplicitParam(dataType = "string",name = "password",value = "用户登录密码",required = false,defaultValue = "111111")
})
@GetMapping("/login")
public ResultVO login(@RequestParam("username") String name,@RequestParam(value = "password",defaultValue = "111111") String pwd){
return userService.checkLogin(name,pwd);
}
}
- 返回实体类和参数实体类注解
- @ApiModel 类注解,在返回和参数实体类添加此注解,可以对返回和参数实体类进行说明
- @ApiModelProperty:用在属性上,描述响应类的属性
java@ApiModel(value = "响应的VO对象",description = "封装接口返回给前端的数据") public class ResultVO { //响应给前端的状态码 @ApiModelProperty(value = "响应状态码",dataType = "int") private int code; //响应给前端的信息 @ApiModelProperty(value = "响应信息",dataType = "String") private String msg; //响应给前端的数据 @ApiModelProperty(value = "响应数据",dataType = "Object") private Object data; }