有了前面的铺垫,我们能看懂mybatis和springboot工程整合之后各个文件都有什么用处了。但是每次都要写实体类、Mapper接口、Mapper XML,在web项目中还要写Service层和Controller层,大部分都是重复性的工作,现在就使用mybatis-plus快速生成这些重复性的代码吧!

代码生成

安装mybatis-plus-generator

因为mybatis-plus从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,所以,我们需要需要手动添加代码生成器依赖和模板引擎依赖:

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-generator</artifactId>
  4. <version>3.4.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.velocity</groupId>
  8. <artifactId>velocity-engine-core</artifactId>
  9. <version>2.2</version>
  10. </dependency>

编写配置

现在我们告诉mybatis-plus如何生成代码吧!

  1. import com.baomidou.mybatisplus.annotation.DbType;
  2. import com.baomidou.mybatisplus.generator.AutoGenerator;
  3. import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
  4. import com.baomidou.mybatisplus.generator.config.GlobalConfig;
  5. import com.baomidou.mybatisplus.generator.config.PackageConfig;
  6. import com.baomidou.mybatisplus.generator.config.StrategyConfig;
  7. import com.baomidou.mybatisplus.generator.config.rules.DateType;
  8. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  9. public class CodeGenerator {
  10. public static void main(String[] args) {
  11. AutoGenerator autoGenerator = new AutoGenerator();
  12. //全局配置
  13. GlobalConfig globalConfig = new GlobalConfig();
  14. String projectPath = System.getProperty("user.dir");
  15. globalConfig.setOutputDir(projectPath+"/src/main/java");
  16. globalConfig.setAuthor("zhanghaopai");
  17. globalConfig.setOpen(false);
  18. globalConfig.setServiceName("%sService");
  19. globalConfig.setDateType(DateType.ONLY_DATE);
  20. autoGenerator.setGlobalConfig(globalConfig);
  21. //设置数据源
  22. DataSourceConfig dataSourceConfig = new DataSourceConfig();
  23. dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/blog?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
  24. dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
  25. dataSourceConfig.setUsername("root");
  26. dataSourceConfig.setPassword("AaA19980818");
  27. dataSourceConfig.setDbType(DbType.MYSQL);
  28. autoGenerator.setDataSource(dataSourceConfig);
  29. //包设置
  30. PackageConfig pc = new PackageConfig();
  31. // pc.setModuleName("generator");
  32. pc.setParent("com.zhp.generator");
  33. pc.setEntity("entity");
  34. pc.setMapper("mapper");
  35. pc.setService("service");
  36. pc.setController("controller");
  37. autoGenerator.setPackageInfo(pc);
  38. //策略配置
  39. StrategyConfig strategy = new StrategyConfig();
  40. strategy.setInclude("t_blog","t_blog_tags","t_comment","t_tag","t_type","t_user"); // 设置要映射的表名
  41. strategy.setNaming(NamingStrategy.underline_to_camel);
  42. strategy.setColumnNaming(NamingStrategy.underline_to_camel);
  43. strategy.setEntityLombokModel(true); // 自动lombok
  44. strategy.setRestControllerStyle(true);
  45. autoGenerator.setStrategy(strategy);
  46. autoGenerator.execute();//执行代码自动生成
  47. }
  48. }

可以看到一共有四处设置,分别是全局设置、设置数据源、生成包设置、生成策略配置。
这其中还需要到了一些依赖,比如设置数据源需要用到mysql依赖,策略配置中使用了lombok,所以也需要添加lombok依赖,依赖如下:

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <version>1.18.16</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. <version>5.1.30</version>
  10. </dependency>

点击运行CodeGenerator主程序,即可生成相关代码。
运行结果如下:
image.png

运行准备

现在只是将代码生成出来了,想要运行起来还有一些步骤需要进行。

添加mybatis-plus核心依赖

我们刚才只是添加了mybatis-plus的generator依赖,现在我们需要添加mybatis-plus运行时的核心依赖。

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>3.4.0</version>
  5. </dependency>

配置mapper地址和实体类包地址

我们需要在springboot的配置中说明刚刚生成的mapper地址和实体类的地址,这样mybatis-plus才能将从数据库中查询的数据转换成实体类。
在springboot的application.yml核心配置中填写如下的配置:

  1. mybatis-plus:
  2. mapper-locations: classpath:/com/zhp/generator/mapper/xml/*.xml
  3. type-aliases-package: com.zhp.generator.entity

我们还需要配置数据库的连接信息

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost:3306/blog
  4. username: root
  5. password: AaA19980818
  6. driver-class-name: com.mysql.jdbc.Driver

配置包扫描

现在springboot知道了Mapper XML的地址、实体类的包地址,现在我们要告诉springboot的Mapper地址,只需要在启动类上开启包扫描即可。

  1. @SpringBootApplication
  2. @MapperScan("com.zhp.generator.mapper")
  3. public class GeneratorApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(GeneratorApplication.class, args);
  6. }
  7. }

让maven项目将XML文件编译

点击运行之后,请打开生成的target目录,如果里面没有像我一样的xml文件,可能是你没有告诉编译系统需要将xml文件编译。
image.png
如果你有这样的问题,那么请在pom.xml文件的标签中添加如下的代码:

  1. <build>
  2. <resources>
  3. <resource>
  4. <directory>src/main/resources</directory>
  5. <includes>
  6. <include>**/*.properties</include>
  7. <include>**/*.xml</include>
  8. <include>**/*.yml</include>
  9. </includes>
  10. <filtering>true</filtering>
  11. </resource>
  12. <resource>
  13. <directory>src/main/java</directory>
  14. <includes>
  15. <include>**/*.properties</include>
  16. <include>**/*.xml</include>
  17. <include>**/*.yml</include>
  18. </includes>
  19. <filtering>true</filtering>
  20. </resource>
  21. </resources>
  22. </build>

现在你告诉了编译系统src/main/resources文件夹下的properties、xml、yml文件需要编译,src/main/java文件夹下的properties、xml、yml文件也需要编译。

运行

我们采用web方式验证,在任意生成的controller中添加测试代码,测试代码有两项内容,①自动注入Service ②调用Service的方法访问数据库并返回,对于我的项目我是按照如下方式写的测试代码:

  1. @RestController
  2. @RequestMapping("/tBlog")
  3. public class TBlogController {
  4. @Autowired
  5. private TBlogService blogService;
  6. @GetMapping("/getBlogById")
  7. public TBlog getBlogById(){
  8. return blogService.getById(6);
  9. }
  10. }

运行并访问,结果如下:
image.png