若依代码改造

96 阅读3分钟

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注解来实现 模版如下图 image.png 代码如下

@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>--><!--        &lt;!&ndash; 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 &ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>io.swagger</groupId>-->
<!--            <artifactId>swagger-models</artifactId>-->
<!--            <version>1.6.2</version>-->
<!--        </dependency>-->

3、修改前端工程代码

image.png

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

image.png

后端进入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类中加入枚举

image.png 在admain文件中改这个地方

image.png 改为 image.png

其他在更改

在generator的yml文件可以改生成代码的作者和包名和路径