mybatis Puls 自动填充字段
步骤
1.定义实体类
在实体类中使用@TableField注解来标记需要自动填充的字段 用@TableField(fill=FieldFill,INSERT)表示新增 @TableField(fill=FieldFill,UPDATE)表示修改 @TableField(fill=FieldFill,INSERT_UPDATE)表示新增和修改
2.实现MetaObjiectHander可以放在拦截器的包
创建一个类实现MetaObjiectHande接口,并重新写insertFill和updateFill方法
3.确保你的MetaObjiectHande类被Spring管理,可以通过@Compoent或@Bean注解来实现
模版如下图
代码如下
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("开始插入填充...");
this.strictInsertFill(metaObject, "createBy", String.class, getLoginUsrerId());
this.strictInsertFill(metaObject, "createTime", Date.class, DateUtils.getNowDate());
this.strictInsertFill(metaObject, "updateBy", String.class, getLoginUsrerId());
this.strictInsertFill(metaObject, "updateTime", Date.class, DateUtils.getNowDate());
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("开始更新填充...");
//为因为无论原先有没有值都要更新所以调用setFieldValByName方法
this.setFieldValByName("updateBy",getLoginUsrerId(),metaObject ) ;
this.setFieldValByName("updateTime",DateUtils.getNowDate(),metaObject);
}
//自己写的方法获取id值 若依原有提供的方法SecurityUtils.getLoginUser();直接用
public String getLoginUsrerId(){
LoginUser loginUser = SecurityUtils.getLoginUser();
//自己判断是是否为空
if (Objects.isNull(loginUser)) {
return "0";
}return loginUser.getUserId().toString();
}
}
注意 MyMetaObjectHandler提供的默认方法策略是:如果属性有值则不覆盖,如果填充值为null则不填充
swagger可以生成在线接口文档
若依已经集成了,但是原版的模版不太好看可已集成Knife4j
1、在common中引入依赖
<!-- ruoyi-springboot2 / swagger knife4j 配置 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2、在admin中注释Swagger依赖
<!-- swagger3-->
<!-- <dependency>-->
<!-- <groupId>io.springfox</groupId>-->
<!-- <artifactId>springfox-boot-starter</artifactId>-->
<!-- </dependency>-->
<!-- <!– 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 –>-->
<!-- <dependency>-->
<!-- <groupId>io.swagger</groupId>-->
<!-- <artifactId>swagger-models</artifactId>-->
<!-- <version>1.6.2</version>-->
<!-- </dependency>-->
3、修改前端工程代码
4、修改Swagger相关信息
com.zzyl.web.core.config.SwaggerConfig
/**
* 添加摘要信息
*/
private ApiInfo apiInfo()
{
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title("标题:中州养老管理系统_接口文档")
// 描述
.description("描述:用于管理中州养老院,具体包括护理模块...")
// 作者信息
.contact(new Contact(ruoyiConfig.getName(), null, null))
// 版本
.version("版本号:" + ruoyiConfig.getVersion())
.build();
}
2、Swagger常用注解
1、标记在控制器(Controller)上
@Api:用在请求的类上,表示对类的说明
tags="说明该类的作用,可以在UI界面上看到的注解"【必须指定】
value="该参数没什么意义,在UI界面上也看到,所以不需要配置"
@ApiOperation:用在请求的方法上,说明方法的用途、作用
value="说明方法的用途、作用"【必须指定】
notes="方法的备注说明"
@ApiImplicitParams:用在请求的方法上,表示一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
name:参数名【该参数必须指定,否则报错】
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)--> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType="Integer"
defaultValue:参数的默认值
@ApiParam:用在单个请求参数上,一般用于修饰路径参数
name:参数名
value:参数的汉字说明、解释
====了解====
@ApiResponses:用在请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
2、标记在实体类(pojo)上
@ApiModel:用于响应类上,表示一个返回响应数据的信息
(这种一般用在post创建的时候,使用@RequestBody这样的场景,
请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性
Data改localDateTime
在前端加字段LocalDateTime
后端进入VelocityUtils类中单的getImportList方法,在其中添加
if (!column.isSuperColumn() &&
GenConstants.TYPE_LOCAL_DATE_TYPE.equals(column.getJavaType())) {
importList.add("java.time.LocalDateTime"); *// 导入这个是为了格式化日期*
**importList.add("com.fasterxml.jackson.annotation.JsonFormat");
}
进入GenConStanats类中加入枚举
在admain文件中改这个地方
改为
其他在更改
在generator的yml文件可以改生成代码的作者和包名和路径