spring boot整合mybatisplus代码生成器
pom配置文件,有些包可能重复了,无所谓
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hl</groupId>
<artifactId>MPdemo2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MPdemo2</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<!-- 表示把配置文件拷到和jar包同一个路径下 -->
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
配置类,用于读取application.properties的属性注入
@Component
@Data
public class MPConfig {
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.driver-class-name}")
private String driverName;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${mp.parentPackage}")
private String parentPackage;
@Value("${mp.entity}")
private String entity;
@Value("${mp.mapper}")
private String mapper;
@Value("${mp.service}")
private String service;
@Value("${mp.controller}")
private String contoller;
@Value("${mp.tables}")
private String[] tables;
@Value("${mp.templateEngine}")
private String templateEngine;
@Value("${mp.outDir}")
private String outDir;
}
项目启动会创建的bean,会执行代码生成操作
@Component
public class MyStartupRunner implements CommandLineRunner{
@Autowired
private MPConfig config;
@Override
public void run(String... args) throws Exception {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
//生成文件的输出目录
String outDir = config.getOutDir();
gc.setOutputDir(outDir);
gc.setAuthor("hl");
//是否打开输出目录
gc.setOpen(false);
//是否覆盖已有文件
gc.setFileOverride(false);
//指定生成的主键的ID类型
gc.setIdType(IdType.AUTO);
//时间类型对应策略
gc.setDateType(DateType.ONLY_DATE);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(config.getUrl());
dsc.setDriverName(config.getDriverName());
dsc.setUsername(config.getUsername());
dsc.setPassword(config.getPassword());
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
// 基包
pc.setParent(config.getParentPackage());
pc.setEntity(config.getEntity());
pc.setMapper(config.getMapper());
pc.setService(config.getService());
pc.setController(config.getContoller());
mpg.setPackageInfo(pc);
//更改生成xml文件的路径
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {}
};
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
//模板引擎是 velocity,模板路径必须这样写
focList.add(new FileOutConfig(config.getTemplateEngine()) {
@Override
public String outputFile(TableInfo tableInfo) {
//自定义路径
return config.getOutDir()+"/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// Step5:策略配置(数据库表配置)
StrategyConfig strategy = new StrategyConfig();
// 指定表名(可以同时操作多个表,使用 , 隔开)(需要修改)
strategy.setInclude(config.getTables());
// 配置数据表与实体类名之间映射的策略:下划线转驼峰命名
strategy.setNaming(NamingStrategy.underline_to_camel);
// 配置数据表的字段与实体类的属性名之间映射的策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 配置 lombok 模式
strategy.setEntityLombokModel(true);
// 配置 rest 风格的控制器(@RestController)
strategy.setRestControllerStyle(true);
// 配置驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
// 配置表前缀,生成实体时去除表前缀
// 此处的表名为 test_mybatis_plus_user,模块名为 test_mybatis_plus,去除前缀后剩下为 user。
// strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
//配置模板
TemplateConfig templateConfig = new TemplateConfig();
//控制 不生成 controller
// templateConfig.setController("");
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// Step6:执行代码生成操作
mpg.execute();
}
}
resources下application.properties配置
#mysql config
spring.datasource.url=jdbc:mysql://localhost:3306/mvptest?useSSL=FALSE&serverTimezone=UTC&autoReconnect=yes&useUnicode=yes&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
#base package path
mp.parentPackage=com.hl.MPdemo2
#sub package
mp.entity=entity
mp.mapper=mapper
mp.service=service
mp.controller=api
#velocity模板引擎路径
mp.templateEngine=/templates/mapper.xml.vm
#表名用英文逗号,隔开
mp.tables=user
#新文件输出路径
mp.outDir=D:/hl/outdemo
整体配置完毕后,执行spring boot的启动类,会在项目启动时根据数据库表自动生成pojo,controller,service,dao的代码架子,具体自己实现。
生成成功后,可以对项目进行install,install成功后的Jar包放在target目录下,同时因为pom配置了资源文件单独打包,也会再target下,不是在Jar包里。
编写.bat脚本执行jar包自动生成代码
新建MPdemo2.bat文件,内容如下:
@echo off
d:
cd D:\hl\workspace\MPdemo
java -jar MPdemo-0.0.1-SNAPSHOT.jar
pause
表示切换到application.properties和MPdemo2-0.0.1-SNAPSHOT.jar的同一级目录MPdemo下,执行jar包。