6.4
因为现在使用了mybatis框架,但是一些代码重复很耗费时间,为了加快开发速度,了解了mybatis-plus,而且也知道了能自动生成后端的样例。
所需配置
<!--mybatisPlus--> | |
<dependency> | |
<groupId>com.baomidou</groupId> | |
<artifactId>mybatis-plus-boot-starter</artifactId> | |
<version>3.4.1</version> | |
</dependency> | |
<!--mybatis-plus代码生成器--> | |
<dependency> | |
<groupId>com.baomidou</groupId> | |
<artifactId>mybatis-plus-generator</artifactId> | |
<version>3.4.1</version> | |
</dependency> | |
<!--freemarker模板--> | |
<dependency> | |
<groupId>org.freemarker</groupId> | |
<artifactId>freemarker</artifactId> | |
<version>2.3.30</version> | |
</dependency> | |
<dependency> | |
<groupId>com.spring4all</groupId> | |
<artifactId>spring-boot-starter-swagger</artifactId> | |
<version>1.5.1.RELEASE</version> | |
</dependency> |
applycation.yml
spring: | |
datasource: | |
url: jdbc:mysql://localhost3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 | |
driver-class-name: com.mysql.cj.jdbc.Driver | |
username: root | |
password: 自己的密码 |
代码生成器代码如下
package com.example.common; | |
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; | |
import com.baomidou.mybatisplus.core.toolkit.StringPool; | |
import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |
import com.baomidou.mybatisplus.generator.AutoGenerator; | |
import com.baomidou.mybatisplus.generator.InjectionConfig; | |
import com.baomidou.mybatisplus.generator.config.*; | |
import com.baomidou.mybatisplus.generator.config.po.TableInfo; | |
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; | |
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.Scanner; | |
public class CodeGenerator { | |
public static String scanner(String tip) { | |
Scanner scanner = new Scanner(System.in); | |
System.out.println("请输入" + tip + ":"); | |
if (scanner.hasNext()) { | |
String ipt = scanner.next(); | |
if (StringUtils.isNotBlank(ipt)) { | |
return ipt; | |
} | |
} | |
throw new MybatisPlusException("请输入正确的" + tip + "!"); | |
} | |
public static void main(String[] args) { | |
// 代码生成器 | |
AutoGenerator mpg = new AutoGenerator(); | |
// 全局配置 | |
GlobalConfig gc = new GlobalConfig(); | |
String projectPath = System.getProperty("user.dir"); | |
gc.setOutputDir(projectPath + "/src/main/java"); | |
gc.setAuthor("GYG"); | |
gc.setOpen(false); | |
// gc.setSwagger2(true); 实体属性 Swagger2 注解 | |
mpg.setGlobalConfig(gc); | |
// 数据源配置 | |
DataSourceConfig dsc = new DataSourceConfig(); | |
dsc.setUrl("jdbc:mysql://localhost:3306/db1?useUnicode=true&useSSL=false&characterEncoding=utf8"); | |
// dsc.setSchemaName("public"); | |
dsc.setDriverName("com.mysql.cj.jdbc.Driver"); | |
dsc.setUsername("root"); | |
dsc.setPassword("031856Gyg"); | |
mpg.setDataSource(dsc); | |
// 包配置 | |
PackageConfig pc = new PackageConfig(); | |
// pc.setModuleName(scanner("模块名")); | |
pc.setParent("com.example") | |
.setEntity("entity") | |
.setMapper("mapper") | |
.setService("service") | |
.setServiceImpl("service.impl") | |
.setController("controller"); | |
mpg.setPackageInfo(pc); | |
// 自定义配置 | |
InjectionConfig cfg = new InjectionConfig() { | |
public void initMap() { | |
// to do nothing | |
} | |
}; | |
// 如果模板引擎是 freemarker | |
String templatePath = "/templates/mapper.xml.ftl"; | |
// 如果模板引擎是 velocity | |
// String templatePath = "/templates/mapper.xml.vm"; | |
// 自定义输出配置 | |
List<FileOutConfig> focList = new ArrayList<>(); | |
// 自定义配置会被优先输出 | |
focList.add(new FileOutConfig(templatePath) { | |
public String outputFile(TableInfo tableInfo) { | |
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! | |
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() | |
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; | |
} | |
}); | |
/* | |
cfg.setFileCreate(new IFileCreate() { | |
@Override | |
public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { | |
// 判断自定义文件夹是否需要创建 | |
checkDir("调用默认方法创建的目录,自定义目录用"); | |
if (fileType == FileType.MAPPER) { | |
// 已经生成 mapper 文件判断存在,不想重新生成返回 false | |
return !new File(filePath).exists(); | |
} | |
// 允许生成模板文件 | |
return true; | |
} | |
}); | |
*/ | |
cfg.setFileOutConfigList(focList); | |
mpg.setCfg(cfg); | |
// 配置模板 | |
TemplateConfig templateConfig = new TemplateConfig(); | |
// 配置自定义输出模板 | |
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 | |
// templateConfig.setEntity("templates/entity2.java"); | |
// templateConfig.setService(); | |
// templateConfig.setController(); | |
templateConfig.setXml(null); | |
mpg.setTemplate(templateConfig); | |
// 策略配置 | |
StrategyConfig strategy = new StrategyConfig(); | |
strategy.setNaming(NamingStrategy.underline_to_camel); | |
strategy.setColumnNaming(NamingStrategy.underline_to_camel); | |
// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!"); | |
strategy.setEntityLombokModel(true); | |
strategy.setRestControllerStyle(true); | |
// 公共父类 | |
// strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!"); | |
// // 写于父类中的公共字段 | |
// strategy.setSuperEntityColumns("id"); | |
strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); | |
strategy.setControllerMappingHyphenStyle(true); | |
strategy.setTablePrefix("tb_");//删除前缀tb_ | |
// strategy.setTablePrefix(pc.getModuleName() + "_"); | |
mpg.setStrategy(strategy); | |
mpg.setTemplateEngine(new FreemarkerTemplateEngine()); | |
mpg.execute(); | |
} | |
} |
以上代码中只需要改以下几处
// 数据源配置 | |
DataSourceConfig dsc = new DataSourceConfig(); | |
dsc.setUrl("jdbc:mysql://localhost:3306/db1?useUnicode=true&useSSL=false&characterEncoding=utf8");//将这里的db1换成自己的数据库 | |
// dsc.setSchemaName("public"); | |
dsc.setDriverName("com.mysql.cj.jdbc.Driver"); | |
dsc.setUsername("root");//自己的名称,一般都是root | |
dsc.setPassword("root");//自己的密码 | |
mpg.setDataSource(dsc); |
可以将生成代码的类放在一个叫common的文件夹里,进行这些工作