保姆级教程,逻辑删除及字段自动填充设置,特别要说明的是本次用的是MySQL数据库,如果使用Oracle数据库是,数据库配置需要改变,数据库表一定要大写,否则无法生成代码。

数据库表

CREATE TABLE `student` (`id` int(64) NOT NULL AUTO_INCREMENT COMMENT '编号',`name` varchar(32) DEFAULT NULL COMMENT '姓名',`age` int(3) DEFAULT NULL COMMENT '年龄',`is_delete` int(1) NOT NULL DEFAULT '0' COMMENT '是否删除',`create_time` datetime DEFAULT NULL COMMENT '入库时间',`update_time` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

1.依赖

代码生成工具使用 mybatis-plus-generator,generator默认使用的模板为 velocity-engine-core,也可以使用freemarker(需要额外设置)。接口文档使用 knife4j-spring-boot-starter。

             <!--代码生成插件--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1.tmp</version></dependency><!--代码生成模板--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.2</version></dependency><!--可选代码生成模板--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.29</version></dependency><!--接口文档--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version></dependency><!--strategy.setEntityLombokModel(true);如果设置为true是需要lombok的--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

yml配置

mybatis-plus:mapper-locations: classpath*:/com/example/demo/**/mapper/xml/*.xmlglobal-config:db-config:logic-not-delete-value: 0logic-delete-value: 1

2.代码生成类

如果要使用freemarker模板,需要额外配置 .setTemplateEngine(new FreemarkerTemplateEngine()); 启用 .setSwagger2(true);

class CodeGenerator {/*** 项目根路径*/private static final String PROJECT_PATH = "E:\yuanzheng-codebase\m-framework\codegenerator";/*** 注释@auth 名称*/private static final String AUTH = "auth";/*** 父包全限定类名*/private static final String PARENT = "com.example.demo";/*** 模块名称*/private static final String MODEL_NAME = "student";/*** 忽略的表前缀*/private static final String[] IGNORE_TABLE_PFX = new String[]{"table_", "t_"};/*** 要生成的表名*/private static final String TABLE_NAMES = "student";/*** 数据源配置*/private static final DataSourceConfig DSC = new DataSourceConfig();static {DSC.setDbType(DbType.MYSQL);DSC.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true");DSC.setDriverName("com.mysql.cj.jdbc.Driver");DSC.setUsername("root");DSC.setPassword("root");}@Testvoid test() {main(null);}static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();/** 全局配置*/GlobalConfig gc = new GlobalConfig();// 输出路径gc.setOutputDir(PROJECT_PATH + "/src/main/java");// 设置作者gc.setAuthor(AUTH);// 生成代码后,是否打开文件夹gc.setOpen(false);// 是否覆盖原来代码gc.setFileOverride(false);// 去掉service的I前缀,一般只需要设置service就行
//        gc.setServiceName("%sService");
//        gc.setMapperName("%sMapper");
//        gc.setXmlName("%sMapper");
//        gc.setServiceImplName("%sServiceImpl");
//        gc.setControllerName("%sController");// 日期格式gc.setDateType(DateType.ONLY_DATE);// 实体属性 Swagger2 注解,实体类上会增加注释gc.setSwagger2(true);mpg.setGlobalConfig(gc);/** 数据源配置*/mpg.setDataSource(DSC);/** 配置模板(generator默认的是velocity,使用freemarker的话要打开此项设置)*/// mpg.setTemplateEngine(new FreemarkerTemplateEngine());/** 包配置*/PackageConfig pc = new PackageConfig();pc.setParent(PARENT);pc.setModuleName(MODEL_NAME);pc.setEntity("entity");pc.setMapper("mapper");pc.setService("service");pc.setController("controller");mpg.setPackageInfo(pc);/** 策略配置*/StrategyConfig strategy = new StrategyConfig();strategy.setInclude(TABLE_NAMES);strategy.setTablePrefix(IGNORE_TABLE_PFX);// 包的命名规则,使用驼峰规则strategy.setNaming(NamingStrategy.underline_to_camel);// 列的名称,使用驼峰规则strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 是否使用lombok(要确认项目是否有lombok)strategy.setEntityLombokModel(true);// 是否使用strategy.setRestControllerStyle(true);// 逻辑删除(要结合数据表字段使用)strategy.setLogicDeleteFieldName("is_delete");// 自动填充字段TableFill fillInsert = new TableFill("create_time", FieldFill.INSERT);TableFill fillUpdate = new TableFill("update_time", FieldFill.UPDATE);List fillLists = new ArrayList();fillLists.add(fillInsert);fillLists.add(fillUpdate);strategy.setTableFillList(fillLists);//乐观锁//strategy.setVersionFieldName("version");mpg.setStrategy(strategy);// 执行mpg.execute();}
}

3.生成后的结构

Student
可以看到代码生成设置的逻辑删除字段、INSERT和UPDATE填充字段的注释。

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="Student对象", description="")
public class Student implements Serializable {private static final long serialVersionUID=1L;@ApiModelProperty(value = "编号")@TableId(value = "id", type = IdType.AUTO)private Integer id;@ApiModelProperty(value = "姓名")private String name;@ApiModelProperty(value = "年龄")private Integer age;@ApiModelProperty(value = "是否删除")@TableLogicprivate Integer isDelete;@ApiModelProperty(value = "入库时间")@TableField(fill = FieldFill.INSERT)private Date createTime;@ApiModelProperty(value = "修改时间")@TableField(fill = FieldFill.UPDATE)private Date updateTime;
}

DateObjectHandler
处理一下填充字段。

@Component
public class DateObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.setFieldValByName("createTime", new Date(), metaObject);}@Overridepublic void updateFill(MetaObject metaObject) {this.setFieldValByName("updateTime", new Date(), metaObject);}
}

Controller
简单测试一下。

@RestController
@RequestMapping("/student")
@Api(value = "学生", tags = {"增删改查"})
public class StudentController {@Autowiredprivate IStudentService studentService;@GetMapping("/get")@ApiOperation(value = "获取学生列表")public List<Student> getStudents() {LambdaQueryWrapper<Student> query = Wrappers.lambdaQuery(Student.class);return studentService.list(query);}@PostMapping("/add")@ApiOperation(value = "新增学生信息")public boolean addStudent(@ApiParam Student student) {return studentService.save(student);}@PostMapping("/update")@ApiOperation(value = "修改学生信息")public boolean updateStudent(@ApiParam Student student) {return studentService.updateById(student);}@GetMapping("/del")@ApiOperation(value = "删除学生信息")public boolean deleteStudent(@ApiParam(name = "id",value = "唯一ID") Integer id) {return studentService.removeById(id);}
}

4.使用 http://ip:port/doc.html

新增一条数据后,creatTime字段自动填充了;


修改后,updateTime字段也自动填充了;


删除后,查询列表已经没有数据了;


查询数据库,可以看到数据是逻辑删除了。

SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)相关推荐

  1. 【SpringBoot】22、SpringBoot中整合knife4j接口文档

    在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护 接口文档使得项目开发过程中前后端工程师 ...

  2. SpringBoot集成swagger生成在线接口文档

    SpringBoot集成swagger生成在线接口文档 集成maven依赖 <dependency><groupId>io.springfox</groupId>& ...

  3. spring-boot整合smart-doc推送接口文档到torna报错Failure to find xxx... resolution will not be reattempted until

    spring-boot整合smart-doc推送接口文档到torna报错Failure to find xxx- resolution will not be reattempted until th ...

  4. SpringBoot集成knife4j接口文档

    knife4j介绍 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案. 其他的详情请看官方文档: knife4j官方文档 首先创建一个spring boot 项目, ...

  5. SpringBoot - 集成Swagger、Knif4j接口文档以及文档添加账号密码登录

    文章目录 集成Swagger.Knif4j 依赖 配置 演示 集成Swagger.Knif4j 依赖 pom.xml <!-- 引入Knife4j的官方start包,Swagger2基于Spri ...

  6. knife4j接口文档

    knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍 ...

  7. SpringBoot 使用Swagger2打造在线接口文档(附源代码)

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...

  8. Spring Boot 1.5.10项目引入knife4j接口文档

    介绍 knife4j是一个在线接口文档项目,对swaggger2进行增强,页面更加美观,功能更加强大 背景 在前后端分离的趋势下,团队一直没有接口文档规范,联调接口全凭一个个接口去代码里扒,后端同事忙 ...

  9. 项目配置Swagger2生成API接口文档

    一.Swagger2介绍 前后端分离开发模式中,api文档是最好的沟通方式. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 及时性 (接 ...

最新文章

  1. php框架where条件使用,where条件
  2. redis java序列化_java处理redis的几种序列化策略
  3. 暗黑2战网服务器爆率修改,暗黑2修改MOD最初级基础
  4. 【干货】全球大数据领域顶级开源工具汇总
  5. poi 读取excel
  6. 40个html作品,40个效果惊人的单页设计
  7. 1-1 Go抽奖系统导学
  8. Go各种类型转换及函数的高级用法
  9. golang http client 使用gzip_Grpc介绍 — Go-Service To PHP-Client
  10. StringUtil工具类之去除所有的空白字符
  11. c语言——高精度除法
  12. RGB色彩模式与CMYK色彩模式参数转换公式
  13. word输入对号以及带框的对号
  14. kbhit函数(讲解)
  15. iOS混合开发之uni-app本地打包集成到iOS原生项目
  16. Unity Shader-真实下雨路面
  17. 苹果AppStore应用商店生存之道:国内iOS开发者创业经验分享(三)
  18. chrome html 打印预览,Chrome打印预览错误
  19. ​力扣解法汇总764. 最大加号标志
  20. Unix 操作系统背后的女程序员 Lorinda Cherry 去世,享年 78 岁

热门文章

  1. jenkins-cli命令使用总结
  2. hibernate07--关联映射
  3. 博客园电子月刊[第一期]
  4. C语言不好应该转专业吗,转专业后对于C语言补修的一些体会(1)
  5. java treeset 转array,Java TreeSet toArray(T[])用法及代碼示例
  6. 前端vue适配不同的分辨率_浅析 React / Vue 跨端渲染原理与实现
  7. Caused by: java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
  8. php旋转数组找出最小的,LeetCode 153 寻找旋转排序数组中的最小值
  9. python 并行计算库_Python 大规模数据存储与读取、并行计算:Dask库简述
  10. python续行_python基础(变量,续行符,is,round,if,字符串,日期,数学,参数)...