SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
保姆级教程,逻辑删除及字段自动填充设置,特别要说明的是本次用的是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
SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)相关推荐
- 【SpringBoot】22、SpringBoot中整合knife4j接口文档
在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护 接口文档使得项目开发过程中前后端工程师 ...
- SpringBoot集成swagger生成在线接口文档
SpringBoot集成swagger生成在线接口文档 集成maven依赖 <dependency><groupId>io.springfox</groupId>& ...
- 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 ...
- SpringBoot集成knife4j接口文档
knife4j介绍 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案. 其他的详情请看官方文档: knife4j官方文档 首先创建一个spring boot 项目, ...
- SpringBoot - 集成Swagger、Knif4j接口文档以及文档添加账号密码登录
文章目录 集成Swagger.Knif4j 依赖 配置 演示 集成Swagger.Knif4j 依赖 pom.xml <!-- 引入Knife4j的官方start包,Swagger2基于Spri ...
- knife4j接口文档
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍 ...
- SpringBoot 使用Swagger2打造在线接口文档(附源代码)
点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...
- Spring Boot 1.5.10项目引入knife4j接口文档
介绍 knife4j是一个在线接口文档项目,对swaggger2进行增强,页面更加美观,功能更加强大 背景 在前后端分离的趋势下,团队一直没有接口文档规范,联调接口全凭一个个接口去代码里扒,后端同事忙 ...
- 项目配置Swagger2生成API接口文档
一.Swagger2介绍 前后端分离开发模式中,api文档是最好的沟通方式. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 及时性 (接 ...
最新文章
- php框架where条件使用,where条件
- redis java序列化_java处理redis的几种序列化策略
- 暗黑2战网服务器爆率修改,暗黑2修改MOD最初级基础
- 【干货】全球大数据领域顶级开源工具汇总
- poi 读取excel
- 40个html作品,40个效果惊人的单页设计
- 1-1 Go抽奖系统导学
- Go各种类型转换及函数的高级用法
- golang http client 使用gzip_Grpc介绍 — Go-Service To PHP-Client
- StringUtil工具类之去除所有的空白字符
- c语言——高精度除法
- RGB色彩模式与CMYK色彩模式参数转换公式
- word输入对号以及带框的对号
- kbhit函数(讲解)
- iOS混合开发之uni-app本地打包集成到iOS原生项目
- Unity Shader-真实下雨路面
- 苹果AppStore应用商店生存之道:国内iOS开发者创业经验分享(三)
- chrome html 打印预览,Chrome打印预览错误
- ​力扣解法汇总764. 最大加号标志
- Unix 操作系统背后的女程序员 Lorinda Cherry 去世,享年 78 岁
热门文章
- jenkins-cli命令使用总结
- hibernate07--关联映射
- 博客园电子月刊[第一期]
- C语言不好应该转专业吗,转专业后对于C语言补修的一些体会(1)
- java treeset 转array,Java TreeSet toArray(T[])用法及代碼示例
- 前端vue适配不同的分辨率_浅析 React / Vue 跨端渲染原理与实现
- Caused by: java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
- php旋转数组找出最小的,LeetCode 153 寻找旋转排序数组中的最小值
- python 并行计算库_Python 大规模数据存储与读取、并行计算:Dask库简述
- python续行_python基础(变量,续行符,is,round,if,字符串,日期,数学,参数)...