今天对MyBatis-Plus的代码生成器展开了学习:
1.使用MyBatis-Plus的代码生成器完成代码自动生成:
步骤如下:
1.1编写application.yml:
要在文件里编写上url,username,password,还有swagger的配置原则,还有mybatis-plus的一些配置,如日志等。
spring: datasource: url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8 username: root password: dzx123123 mvc: pathmatch: matching-strategy: ant_path_matcher mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml type-aliases-package: com.djw.entity configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl1.2再编写一个测试单元,用于开启代码生成器:
package com.djw; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Day08DemoApplicationTests { @Test void contextLoads() { FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8", "root", "密码") .globalConfig(builder -> { builder.author("djw") // 设置作者a .enableSwagger() // 开启 swagger 模式 .fileOverride() // 覆盖已生成文件 .outputDir(".\\src\\main\\java"); // 指定输出目录 }) .packageConfig(builder -> { builder.parent("com.djw") // 设置父包名 .moduleName("");// 设置父包模块名 //.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { builder.addInclude("channel") // 设置需要生成的表名 .addTablePrefix() // 设置过滤表前缀 .entityBuilder().enableLombok() //开启lombok .enableChainModel()//开启链式编程 .controllerBuilder().enableRestStyle();//开启restController // .logicDeletePropertyName("deleted") // .logicDeleteColumnName("deleted");//配置逻辑删除处理 }) .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 .execute(); } }1.3编写对应的Controller
package com.djw.controller; import com.djw.entity.Channel; import com.djw.service.IChannelService; import com.djw.util.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.swing.text.html.StyleSheet; import java.util.List; /** * <p> * 栏目表 前端控制器 * </p> * * @author djw * @since 2026-05-27 */ @RestController @RequestMapping("/channel") @Api("频道控制类") public class ChannelController { @Autowired private IChannelService iChannelService; @ApiOperation("查询列表") @GetMapping public Result selectList(){ List<Channel> list = iChannelService.list(); return Result.success().setData("list",list); } @ApiOperation("按id查询") @GetMapping("/{id}") public Result selectById(@PathVariable Integer id){ Channel byId = iChannelService.getById(id); return byId!=null?Result.success().setData("channel",byId):Result.error(); } @ApiOperation("保存频道") @PostMapping public Result insert(@RequestBody Channel channel){ iChannelService.save(channel); return Result.success().setData("channel",channel); } @PutMapping @ApiOperation("更新频道") public Result update(@RequestBody Channel channel){ boolean b = iChannelService.updateById(channel); return b?Result.success().setData("channel",channel):Result.error(); } @DeleteMapping @ApiOperation("删除频道") public Result delete(@RequestBody List<Integer> ids){ boolean b = iChannelService.removeByIds(ids); return b?Result.success().setData("channel",ids):Result.error(); } }1.4编写对应的所需的config,swagger和自动填充的配置
package com.djw.config; import io.swagger.annotations.ApiOperation; 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; /** * @author djw */ @Configuration public class SwaggerConfig { @Bean public Docket apiConfig() { return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) .paths(PathSelectors.any()) .build(); } public ApiInfo apiInfo(){ return new ApiInfoBuilder() .title("董济维的项目") .description("这是一个项目...") .contact(new Contact("董济维","http://www.itszb.com","1918431841@qq.com")) .version("1.0") .build(); } }package com.djw.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; // java example @Slf4j @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { log.info("开始插入填充..."); this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class,LocalDateTime.now()); this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { log.info("开始更新填充..."); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } }接下来就可以运行测试类的操作就好了;