代码生成器
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
环境准备
创建一个employee表
1 2 3 4 5 6 7 8 9 10 11 12 13
| SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `employee`; CREATE TABLE `employee` ( `id` bigint(20) NOT NULL COMMENT 'ID', `name` varchar(255) DEFAULT NULL COMMENT '用户名', `gender` varchar(255) DEFAULT NULL COMMENT '性别', `version` int(10) DEFAULT '1' COMMENT '乐观锁', `deleted` int(1) DEFAULT '0' COMMENT '逻辑删除', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|

创建一个SpringBoot项目。配置Swagger,数据库驱动,MyBatisPlus,Web,lombok依赖。
代码生成器需要添加一下依赖


完整的pom.xml依赖代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| <dependencies> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> </exclusion> <exclusion> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.21</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>1.5.21</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </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> </dependencies>
|
配置SpringBoot配置文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| spring.datasource.username=root spring.datasource.password=kylin spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0
spring.profiles.active=dev
|
由于测试中要使用MyBatisPlus的乐观锁,Sql性能分析,自动填充功能,填充策略。所以我们要配置MyBatisPlus的配置类,和处理器。详情见博客的MyBatis-Plus的CRUD及其扩展文章。同时还使用Swagger,所以也要配置Swagger配置类。详情见博客文章SpringBoot集成Swagger

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| @EnableTransactionManagement @Configuration public class MybatisPlusConfig { @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); }
@Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }
@Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } @Bean @Profile({"dev","test"}) public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); performanceInterceptor.setMaxTime(100); return performanceInterceptor; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Slf4j @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill....."); this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); }
@Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime",new Date(),metaObject); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| @Configuration @EnableSwagger2 public class SwaggerConfig {
@Bean public Docket docket(Environment environment) { Profiles profiles = Profiles.of("dev", "test"); boolean flag = environment.acceptsProfiles(profiles); System.out.println(flag); return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enable(flag) .groupName("Kylin") .select() .apis(RequestHandlerSelectors.basePackage("com.kylin.controller")) .build(); }
private ApiInfo apiInfo() { Contact contact = new Contact("Kylin", "https://www.kylin.show", "zhang171346168@qq.com"); return new ApiInfo( "Kylin的SwaggerAPI文档", "学习不易,努力努力~", "v1.0", "https://www.kylin.show", contact, "Apache 2.0", "http://www.apache.org/licenses/LINCENSE-2.0", new ArrayList()); } }
|
到此为之环境搭建完成!
编写配置
在项目中的test文件下新建一个类。名字任意取。本文取名为KylinCode

编写一个main方法。首先需要构建一个代码生成器对象AutoGenerator

配置策略,全局配置创建一个GlobalConfig

设置数据源DataSourceConfig

设置生成代码的包路径PackageConfig

策略配置StrategyConfig

执行代码mpg.execute();

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| public class KylinCode { public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); System.out.println(projectPath); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("Kylin"); gc.setOpen(false); gc.setFileOverride(false); gc.setServiceName("%sService"); gc.setIdType(IdType.ID_WORKER); gc.setDateType(DateType.ONLY_DATE); gc.setSwagger2(true);
mpg.setGlobalConfig(gc);
DataSourceConfig dsc = new DataSourceConfig(); dsc.setUsername("root"); dsc.setPassword("kylin"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8"); dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
PackageConfig pc = new PackageConfig(); pc.setParent("com.kylin"); pc.setEntity("entity"); pc.setMapper("mapper"); pc.setService("service"); pc.setController("controller"); mpg.setPackageInfo(pc);
mpg.setPackageInfo(pc);
StrategyConfig strategy = new StrategyConfig(); strategy.setInclude("employee"); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); strategy.setLogicDeleteFieldName("deleted");
TableFill createTime = new TableFill("create_time", FieldFill.INSERT); TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills= new ArrayList<>(); tableFills.add(createTime); tableFills.add(updateTime); strategy.setTableFillList(tableFills); strategy.setVersionFieldName("version");
strategy.setRestControllerStyle(true); strategy.setControllerMappingHyphenStyle(true); mpg.setStrategy(strategy);
mpg.execute(); } }
|
数据库配置,包名要配置成自己的!
代码生成器测试
点击运行

成功在我们设置的目录下生成了 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码。






这就是自动生成实体类,Service,Controller的所以代码了~
MyBatisPlus的CRUD测试
首先我们要在我们的Mapper接口中加上@Mappe
r(或者启动类上加上@MapperScan
)和@Repository
注解

本文就只简单的测试一下插入操作。在测试类中进行测试。
由于我们配置了主键的生成策略id,自动填充功能create_time,update_time,而version又是乐观锁,deleted为逻辑删除。所以我们只要给name,gender赋值就可以了。

点击运行,查看运行结果

成功执行。查看数据库中的数据

测试成功!
Swagger测试
由于我们在代码生成器中配置了Swagger,MyBatisPlus自动帮我们配置文档注解,所以我们来看看Swagger的效果怎么样。
首先我们要在启动类上配置@EnableSwagger2
注解开启Swagger

接着如果想要看到Model则需要配置Controller返回一个Model实体类对象

点击运行项目。由于我配置了Swagger配置类,所以按照我配置对Swagger页面进行了定制localhost:8080/swagger-ui.html
访问SwaggerUi


测试成功!
源代码下载
MyBatisPlus所有源代码下载https://gitee.com/kylincw/MyBatisPlus