代码生成器
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
环境准备
创建一个employee表
| 12
 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依赖代码
| 12
 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配置文件

| 12
 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

| 12
 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;
 }
 }
 
 | 
| 12
 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);
 }
 }
 
 | 
| 12
 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();

| 12
 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接口中加上@Mapper(或者启动类上加上@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