第一种:
一,maven依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
二,生成类的代码:
public class Generate{
public static void main(String[] args) {
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
//gc.setOutputDir(projectPath + "/src/main/java");
gc.setOutputDir("当前模块的java目录的绝对路径");
//例如:E:\idea_wspace\service\service_live\src\main\java
//这个是防止生成的service 是IService。
gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setAuthor("xiaokai");
gc.setOpen(false);
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/数据库");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
//pc.setModuleName("live"); //模块名
pc.setParent("前缀"); //例如:com.demo
pc.setController("controller");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
//这个设置是指定依据哪个表来生成相应的代码。有几个表就写几个。
//strategy.setInclude("subject");
strategy.setInclude("live_course","live_course_account","live_course_config","live_course_description","live_course_goods","live_visitor");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
}
第二种:
一,Maven依赖配置:
<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>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
二,创建一个类,运行代码
package com.seckill.seckilldemo;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//创建代码生成器对象
AutoGenerator autoGenerator=new AutoGenerator();
// 1.全局配置
GlobalConfig globalConfig=new GlobalConfig();
globalConfig.setActiveRecord(true)//是否支持AR模式
.setAuthor("Jackwong")//作者(需要更换)
.setOutputDir("E:\\idea_wspace\\SeckillDemo\\src\\main\\java")//生成路径(需要更换)
.setOpen(false)//是否打开资源管理器
.setFileOverride(true)//生成文件覆盖
.setIdType(IdType.AUTO)//主键策略
.setServiceName("%sService")//设置生成service接口的名字首字母是否为I
.setDateType(DateType.ONLY_DATE)
.setBaseResultMap(true)
.setBaseColumnList(true);
autoGenerator.setGlobalConfig(globalConfig);
//2.设置数据源
DataSourceConfig dsc=new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/seckill?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=UTF-8"); //(需要更换)
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
dsc.setDbType(DbType.MYSQL);
autoGenerator.setDataSource(dsc);
//3.包的配置
PackageConfig pc=new PackageConfig();
// pc.setModuleName("mybatisplus");//设置模块名
pc.setParent("com.seckill.seckilldemo""); //(需要更换)
pc.setEntity("entity"); //(需要更换)
pc.setMapper("mapper"); //(需要更换)
pc.setXml("mapper.xml"); //(需要更换)
pc.setService("service"); //(需要更换)
pc.setController("controller"); //(需要更换)
pc.setServiceImpl("service.impl"); //(需要更换)
autoGenerator.setPackageInfo(pc);
//4.策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true); //自动lombok
strategy.setRestControllerStyle(true);
strategy.setControllerMappingHyphenStyle(true);
strategy.setLogicDeleteFieldName("deleted");//设置逻辑删除的名字
// 自动填充配置
TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);//设置自动填充创建时间
TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);//设置自动填充修改时间
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(gmtCreate);
tableFills.add(gmtModified);
strategy.setTableFillList(tableFills);
// 乐观锁
strategy.setVersionFieldName("version");
strategy.setRestControllerStyle(true); //controller层使用rest风格
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
autoGenerator.setStrategy(strategy);
autoGenerator.execute();
}
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入" + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
}
如下输入数据库的多个表名同时生成:
生成速度还是挺快的。
踩坑:
如果自己已经先创建好了前缀包,想要将生成的包和类放在这个包下,全局配置的代码部分的输出路径不能设置到这个前缀包下,依然要设置为到java包为止。
假设已经提前建好了前缀包:
输出路径到java 即可。
然后包配置部分设置这个前缀包名:
如果输出路径设置这个前缀包,会重复创建,而且生成的类中的package 没有前缀包名: