首先,先说一下代码自动生成器的作用是什么,就是自动替我们去创建mapper、entity、service、controller...这些我们在项目中要用到的通用性文件。
然后我们在说一下他的配置。
mybaits-plush自动生成器的配置分为
- 全局配置 GlobalConfig
- 数据源配置 DataBaseConfig
- 策略配置 StrateConfig
- 包配置 PackageConfig
- 自定义配置 InjectionConfig
关于以上的几个配置,官网中都有描述,配置项很多,我们先用基本的配置来生成我们需要的代码
添加所需要的依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.1</version> </dependency>
这个依赖是代码生成器的依赖,MyBatis-Plus 从
3.0.3
之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency>
这个依赖是因为我们用到了Freemarker 模板引擎,如果用其他的模板引擎,需要更换其他的依赖
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency>
通过构建一个静态方法获取全局配置,避免在main方法中代码显得很乱 public static GlobalConfig getGlobalConfig() { return new GlobalConfig() .setOutputDir(System.getProperty("user.dir") + "\\src\\main\\java") // 设置文件的输出路径 .setOpen(false) // 设置是否打开输出目录 默认值是true .setFileOverride(true) // 设置生成的文件是否覆盖原来的文件 默认值是false .setSwagger2(true) // 设置是否打开swagger开关 .setAuthor("admin"); // 设置开发人员名称 }
通过构建一个静态方法获取数据源配置 public static DataSourceConfig getDateSourceConfig() { return new DataSourceConfig() .setPassword("123456") .setUsername("root") .setDriverName("com.mysql.cj.jdbc.Driver") .setUrl("jdbc:mysql://localhost:3306/bookdb?useSSL=true&useUnicode=true&characterEncoding=UTF-8&&serverTimezone=Asia/Shanghai") .setDbType(DbType.MYSQL); }
通过构建一个静态方法获得包配置 public static PackageConfig getPackageConfig() { return new PackageConfig() .setParent("com.xj.demo") .setEntity("entity") .setServiceImpl("service.impl") .setService("service") .setMapper("mapper") .setController("controller"); }
下边这是packageConfig的源码属性,如果我们不指定父包名parent ,生成的代码默认包名就会是com.baomidou
同时我们也能看到,在PackageConfig的属性中默认给到的service、controller等包的包名与我们上边定义的包名相同,
那我们上边就不需要再重复定义了
public class PackageConfig { private String parent = "com.baomidou"; private String moduleName = null; private String entity = "entity"; private String service = "service"; private String serviceImpl = "service.impl"; private String mapper = "mapper"; private String xml = "mapper.xml"; private String controller = "controller";
通过构建一个静态方法获取策略配置 public static StrategyConfig getStrategyConfig() { return new StrategyConfig() .setNaming(NamingStrategy.underline_to_camel) // 设置当表名命名方式为驼峰命名法 .setColumnNaming(NamingStrategy.underline_to_camel) // 设置字段命名方式为驼峰命名法 .setInclude("book_info", "user_info") // 设置需要自动生成代码的实体表名称 .setRestControllerStyle(true); // 设置生成@RestController 控制器 }
通过main方法中定义的代码自动生成器,将我们上边定义的各项配置加载到代码生成器中,执行就会生成我们所需要的代码 public static void main(String[] args) { AutoGenerator autoGenerator = new AutoGenerator(); // 创建代码生成器 autoGenerator .setTemplateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker的模板引擎 ,如果不指定 就使用默认的Velocity 模板引擎 .setStrategy(getStrategyConfig()) .setDataSource(getDateSourceConfig()) .setPackageInfo(getPackageConfig()) .setGlobalConfig(getGlobalConfig()); autoGenerator.execute(); // 通过以上的配置运行代码生成器 }
这就是上边代码自动生成的目录和文件
虽然我们通过代码生成器可以简单的生成代码了,但是提出了几个问题
1、一般的习惯,mapper.xml应该放置在resources 目录下,但是 自动生成到了mapper的目录下边
2、在使用Pojo类的时候,我们会区分Vo、 entity、dto 但是 代码生成器并没有提供直接设置 vo 和 dto 的位置