springboot代码生成器
一、使用springboot+mybatisplus+swagger完成如下操作
1、创建数据库表如下 channel
字段名称 |
中文 |
类型 |
长度 |
主键 |
外键 |
自增 |
约束 |
cid |
栏目id |
Int |
|
Y |
|
Y |
|
cname |
栏目名称 |
varchar |
255 |
|
|
|
|
channel_desc |
栏目描述 |
varchar |
255 |
|
|
|
|
Create_time |
创建时间 |
datetime |
|
|
|
|
|
Update_time |
修改时间 |
Datetime |
|
|
|
|
|
Deleted |
是否删除 |
Tinyint |
1 |
|
|
|
|
2、使用mybatis-plus代码生成器,生成相关代码
3、对创建时间和更新时间做自动填充
4、对deleted做逻辑删除
5、对相应的Controller层和实体类加入swagger 说明API
6、完成Controller层中CRUD处理,并实现分页,在swagger中测试
二、使用mybatisX插件完成如下数据库表article的反向生成
字段名称 |
中文 |
类型 |
长度 |
主键 |
外键 |
自增 |
约束 |
aid |
文章id |
Int |
|
Y |
|
Y |
|
Title |
文章标题 |
varchar |
255 |
|
|
|
|
content |
文章内容 |
text |
|
|
|
|
|
Create_time |
创建时间 |
datetime |
|
|
|
|
|
Update_time |
修改时间 |
Datetime |
|
|
|
|
|
Deleted |
是否删除 |
Tinyint |
1 |
|
|
|
|
Cid |
关联栏目id |
Int |
|
|
|
|
|
使用
创建moduel时选择以下依赖
在pom.xml中加入swagger和mybatis-plus相关依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xzit</groupId> <artifactId>day8_job</artifactId> <version>0.0.1-SNAPSHOT</version> <name>day8_job</name> <description>day8_job</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.3.7.RELEASE</spring-boot.version> </properties> <dependencies> <!--模板引擎--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--热部署驱动--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <!--mysql数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> <!--mybatis plus依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.2</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.7.RELEASE</version> <configuration> <mainClass>com.xzit.Day8JobApplication</mainClass> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
测试生成器TestGenerator然后运行,自动生成出代码,再往里边儿加controller和其他配置文件
package com.xzit; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.util.Collections; @SpringBootTest public class TestGenerator { @Test public void genarator(){ FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8", "root","zengyu1234") .globalConfig(builder -> { builder.author("IvanYu") //设置作者 .enableSwagger() //开启swagger模式 .fileOverride() //覆盖已生成文件 .outputDir(".\\src\\main\\java");//指定输出目录 }) .packageConfig(builder -> { builder.parent("com.xzit") //设置父包名 .moduleName("gene") //设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.xml,".\\src\\main\\resources\\mapper"));//设置mapperXml生成路径 //.pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { builder.addInclude("t_simple") // 设置需要生成的表名 .addTablePrefix("t_", "c_") // 设置过滤表前缀 .entityBuilder().enableLombok()//开启lombok .enableChainModel()//开启链式编程 .controllerBuilder().enableRestStyle();//开启RestController /*因为在yml文件中配置过删除字段了,这里无需做重复配置。否则就要配置*/ //.logicDeletePropertyName("deleted") //.logicDeleteColumnName("deleted");//配置逻辑删除处理 }) .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 .execute(); } }
复制两个config文件过来,加入分页插件和Swagger3插件
package com.xzit.gene.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //加入分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); //加入乐观锁插件 //interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } }
package com.xzit.gene.config; import io.swagger.annotations.Api; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; //bean.xml applicationContext.xml //<bean id="" class=""> @Configuration public class Swagger3Config { @Bean public Docket apiConfig(){ return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() //设置通过什么方式定位到需要生成文档的接口, //定位了方法上的ApiOperation .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) //接口URL路径,any表示全部的路径 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder() .title("伊万的项目") .description("项目描述信息") .contact(new Contact("伊万","http://www.baidu.com","2342342456qq.com")) .version("1.0") .build(); } }
配置Controller类
package com.xzit.gene.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.sun.org.apache.bcel.internal.generic.RET; import com.xzit.gene.entity.Channel; import com.xzit.gene.service.IChannelService; import com.xzit.gene.util.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * <p> * 前端控制器 * </p> * * @author IvanYu * @since 2022-09-18 */ @RestController @RequestMapping("/gene/channel") @Api(tags = "频道管理") public class ChannelController { @Resource private IChannelService service; /*这个方法使用了自定义的方法,通过xml文件配置的,自定义xml文件需要在 * TestGenerator自动生成类里配置xml文件生成的路径,在生成的mapper.xml * 文件里写sql语句,在ChannelMapper.java接口以及Service层里写上对应方法 * 此处才能调用 */ @ApiOperation("查询全部数据") @GetMapping public Result select(){ List<Channel> list=service.testSelect(); return Result.success().setData("list",list); } @ApiOperation("按给定的ID查询数据") @GetMapping("/{id}") public Result selectById(@PathVariable Integer id){ Channel channel = service.getById(id); return Result.success().setData("channel",channel); } @ApiOperation("分页查询数据") @GetMapping("/{current}/{size}") public Result selectPage(@PathVariable int current,@PathVariable int size){ Page<Channel> page = new Page<>(current,size); service.page(page); return Result.success().setData("page",page); } @ApiOperation("保存频道") @PostMapping public Result save(@RequestBody Channel channel){ return service.save(channel)?Result.success():Result.error(); } @ApiOperation("更新频道") @PutMapping public Result update(@RequestBody Channel channel){ return service.updateById(channel)?Result.success():Result.error(); } @ApiOperation("删除频道") @DeleteMapping("/{id}") public Result delete(@PathVariable Integer id){ return service.removeById(id)?Result.success():Result.error(); } }
运行主类,然后访问http://localhost:8080/swagger-ui/index.html#/
测试功能均能正常运行,执行效果:
在Plugins里找到MybatisX插件并安装,装完以后需要重启下idea
重启后可以实现点击红色小鸟跳转到xml,点击蓝色小鸟跳转回java文件的快速跳转功能,在你有几百个mapper的时候这个功能非常关键
在idea界面右边database新配置一个mysql数据源
配置好数据库用户名密码和时区然后点一下Test Connection测试下连接
在需要反向生成的表上点击右键
点确认后即可反向生成
在mapper里可以根据mybatisX的规则快速编写各种查询并生成对应的xml语句
第一步:
第二步:按下alt+enter,选择第二项生成sql
xml文件中生成的查询sql效果如图:
还可以加上各种条件来生成:
生成效果如图: