一、示范代码
package com.cd.selftestcode;
import com.baomidou.mybatisplus.annotation.DbType;
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.rules.NamingStrategy;
class SelfTestCodeApplicationTests {
// DriverName("com.mysql.cj.jdbc.Driver");
public static final String DRIVAER_NAME = "com.mysql.cj.jdbc.Driver";
// tUsername("root");
public static final String USER_NAME = "root";
// Password("mysql");
public static final String PSW = "mysql";
// Url
public static final String URL = "jdbc:mysql://192.168.0.108:13306/database";
//最顶级包名,生成的所有的顶级包名
public static final String PARENT_PACKAGE = "com.cd";
//controller包包
public static final String CONTROLLER_PACKAGE = "controller";
//service包名
public static final String SERVICE_PACKAGE = "service";
//service.iml包名
public static final String SERVICE_IMPL_PACKAGE = "service.impl";
//mapper包名
public static final String MAPPER_PACKAGE = "mapper";
//entity包名
public static final String ENTITY_PACKAGE = "po";
//xml包名
public static final String XML_PACKAGE = "xml";
//生成文件目录
public static final String OUT_FILE_PATH="D:\\tempProject\\src\\main\\java";
// 开启swagger2模式
public static final Boolean SWAGGER_ENABLE = true;
// 是否覆盖已有文件
public static final Boolean RECOVER_ENABLE = true;
//DTO名字格式
public static final String DTO_NAME_FORMAT = "%sDTO";
public static final String DTO_BASE = PARENT_PACKAGE + ".base.BaseDTO";
//PO名字格式
public static final String PO_NAME_FORMAT = "%sPO";
public static final String PO_BASE = PARENT_PACKAGE + ".base.BasePO";
//query名字格式
public static final String QUERY_NAME_FORMAT = "%sQuery";
public static final String QUERYO_BASE = PARENT_PACKAGE + ".BaseQuery";
//数据库中的表名
public static final String[] TABLE_NAMES = {"表名1","表名2"};
/**
* 生成DTO\PO\QUERY以及service\controller\mybatisplus\mapper\mapper.xml代码
*/
public static void main(String[] args) {
//生成DTO
generatorMybatisAndDTO();
//生成query
generatorMybatisAndQuery();
//生成po和mapper
generatorMybatisAndPO();
}
/**
* 数据源配置
*/
private static DataSourceConfig dataSource() {
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL); // mysql生成用DbType.MYSQL
dsc.setDriverName(DRIVAER_NAME);
dsc.setUsername(USER_NAME);
dsc.setPassword(PSW);
dsc.setUrl(URL);
return dsc;
}
/**
* 包名配置
*/
private static PackageConfig packageConfig() {
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent(PARENT_PACKAGE); // 父包名
pc.setController(CONTROLLER_PACKAGE); // Controller包名
pc.setService(SERVICE_PACKAGE); // Service包名
pc.setServiceImpl(SERVICE_IMPL_PACKAGE); // Service Impl包名
pc.setMapper(MAPPER_PACKAGE); // Mapper包名
pc.setEntity(ENTITY_PACKAGE); // Entity包名
pc.setXml(XML_PACKAGE); // xml包名
return pc;
}
/**
* 全局配置
*/
private static GlobalConfig globalConfig() {
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setSwagger2(SWAGGER_ENABLE); // 开启swagger2模式
gc.setOutputDir(OUT_FILE_PATH); // 生成文件存放的位置
gc.setFileOverride(RECOVER_ENABLE); // 是否覆盖已有文件
gc.setActiveRecord(false); // 开启ActiveRecord模式,默认false
gc.setEnableCache(false); // 是否在xml中添加二级缓存配置,默认false
gc.setBaseResultMap(true); // 开启BaseResultMap(通用查询映射结果)
gc.setBaseColumnList(true); // 开启baseColumnList(通用查询结果列)
gc.setAuthor("cd"); // 开发人员
// 自定义文件命名,注意 %s 会自动填充表实体属性(各层文件名称方式,例如:%sAction生成UserAction, %s为占位符)
gc.setControllerName("%sController");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setEntityName("%sPO");
return gc;
}
/**
* 策略配置
*/
private static StrategyConfig strategy() {
StrategyConfig strategy = new StrategyConfig();
strategy.setEntityBooleanColumnRemoveIsPrefix(true);//boolean类型去掉is开头
strategy.setLogicDeleteFieldName("delete_flag");
strategy.setTablePrefix(""); // 去掉表名前缀
strategy.setNaming(NamingStrategy.underline_to_camel); // 表名生成策略(underline_to_camel:下划线转驼峰命名)
strategy.setInclude(TABLE_NAMES); // 表名
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setSuperControllerClass(PARENT_PACKAGE + ".base.AbstractBaseController");// 自定义继承的Controller类全称,带包名
strategy.setSuperServiceClass(PARENT_PACKAGE+".base.BaseService");
strategy.setSuperEntityClass(PARENT_PACKAGE + ".base.BasePO");// 自定义继承的实体类全称,带包名
strategy.setEntityLombokModel(true); // 实体类是否为lombok模型(默认false)
strategy.setRestControllerStyle(true); // 生成 <code>@RestController</code> 控制器
strategy.setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper"); // 自定义继承的Mapper类全称,带包名
strategy.setChainModel(true); //生成build代码
return strategy;
}
private static void generatorMybatisAndPO() {
// 生成器
AutoGenerator mpg = new AutoGenerator();
// 包配置
mpg.setPackageInfo(packageConfig().setEntity("po"));
// 全局配置
mpg.setGlobalConfig(globalConfig().setEntityName(PO_NAME_FORMAT));
// 数据源配置
mpg.setDataSource(dataSource());
// 策略配置
mpg.setStrategy(strategy().setSuperEntityClass(PO_BASE));
// 执行生成
mpg.execute();
}
private static void generatorMybatisAndQuery() {
// 生成器
AutoGenerator mpg = new AutoGenerator();
// 包配置
mpg.setPackageInfo(packageConfig().setEntity("query"));
// 全局配置
mpg.setGlobalConfig(globalConfig().setEntityName(QUERY_NAME_FORMAT));
// 数据源配置
mpg.setDataSource(dataSource());
// 策略配置
mpg.setStrategy(strategy().setSuperEntityClass(QUERYO_BASE).setChainModel(true).setEntityLombokModel(false).setLogicDeleteFieldName(null));
// 执行生成
mpg.execute();
}
private static void generatorMybatisAndDTO() {
// 生成器
AutoGenerator mpg = new AutoGenerator();
// 包配置
mpg.setPackageInfo(packageConfig().setEntity("dto"));
// 全局配置
mpg.setGlobalConfig(globalConfig().setEntityName(DTO_NAME_FORMAT));
// 数据源配置
mpg.setDataSource(dataSource());
// 策略配置 实体基类 建造者模式 lombok是否启用 逻辑删除字段
mpg.setStrategy(strategy().setSuperEntityClass(DTO_BASE).setChainModel(true).setEntityLombokModel(false).setLogicDeleteFieldName(null));
// 执行生成
mpg.execute();
}
}
因为上面代码中配置了service\controller\po\dto\query的基类,所以要在生成的代码中新建该基类,如果不需要基类可不配置
二、pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!--mybatis-plus代码生成器 相关依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!-- druid阿里巴巴数据库连接池 -->
<!--<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.20</version>
</dependency>-->
<!--<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>-->
<!-- MySql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.28.0</version>
</dependency>
<!--@Data注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
三、使用生成代码的项目的依赖
该示例项目为结合mybatis-plus生成的代码,添加一些配置,以达到可以自动生成crud代码的示例,以及swagger、po与dto转换