项目跟网上搜索出来生成的代码不一样,所以就开大招(改生成的模板,结果发现这可真香)
代码:(里面有模板)
链接:https://pan.baidu.com/s/1-DVUaAU7HM_BRnqO_Y9QUQ
提取码:okr1
MybatisPlus官方参考文档:
https://baomidou.com/pages/779a6e/ 新版本
https://baomidou.com/pages/d357af/ 旧版本
首先得知道:MP是按照mybatis-plus-generator 3.5.1版本区分开 (之前和之后是两种不同的生成方法,差异较大),之后的用最新的那个,我用的3.1版本的,所以使用的是老版本,本人用的是freemarker模板
生成的文件:其中根据 对应的模板 可以随意各种添加任何@注解和其他参数,并去除多余注解,可以随意添加继承类和相对应在导入包
直接上结果图:
其中对应在模板就在 mybatis-plus-generator相对应在包里(不能从网上找模板,因为包版本不同,模板就有差异)
直接上代码
新建文件 CodeGenerator3
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
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.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.*;
/**
* * 1.配置resources下的genreator.properties中的author 数据库 和 需要添加的表名
* * 2.执行本文件 生成文件
* * 3. 将 controller、mapper、service 拷到项目中可直接使用
* * 将 entity 拷到项目中可直接使用
*
* @ClassName CodeGenerator3
* @Description TODO
* @Author wanglei
* @Date 2022/4/20
**/
public class CodeGenerator3 {
public static void main(String[] args) {
// 要生成代码的表名配置
String[] tables = {
"xxl_job_info",//xxx表
"xxl_job_log",//aaa表
"xxl_job_log_report",//bbbb表
"xxl_job_logglue",
"xxl_job_registry",
"xxl_job_group",
"xxl_job_user",
"xxl_job_lock"
};
//用来获取generator.properties文件的配置信息
ResourceBundle rb = ResourceBundle.getBundle("genreator");
// 1.new一个 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2.new一个 全局配置 ,并放到代码生成器
GlobalConfig gc = new GlobalConfig();
//获取项目根目录
String projectPath = System.getProperty("user.dir");
//生成文件的输出目录 默认值:D 盘根目录
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor(rb.getString("author"));
//是否打开输出目录 默认值:true
gc.setOpen(false);
//是否覆盖已有文件 默认值:false #open
gc.setFileOverride(true);
//开启 BaseResultMap 默认值:false
gc.setBaseResultMap(true);
//开启 baseColumnList 默认值:false
gc.setBaseColumnList(true);
gc.setSwagger2(true); //实体属性 Swagger2 注解
// 注意:【如下配置 %s 为占位符】
gc.setEntityName("%s");
//主键策略
gc.setIdType(IdType.AUTO);
//去掉Service接口的首字母I
gc.setServiceName("%sService");
mpg.setGlobalConfig(gc);
// 3.配置 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(rb.getString("jdbc.url"));
// dsc.setSchemaName("public");
dsc.setDriverName(rb.getString("jdbc.drivername"));
dsc.setUsername(rb.getString("jdbc.username"));
dsc.setPassword(rb.getString("jdbc.password"));
dsc.setDbType(DbType.MYSQL);
dsc.setTypeConvert(new MySqlTypeConvert());
mpg.setDataSource(dsc);
//4.生成文件的 包配置 根据自己项目需求来配置
PackageConfig pc = new PackageConfig();
// pc.setModuleName(scanner("模块名"));
pc.setParent(rb.getString("parent"));
pc.setController(rb.getString("controller"));
pc.setService(rb.getString("service"));
pc.setServiceImpl(rb.getString("serviceImpl"));
pc.setEntity(rb.getString("entity"));
pc.setXml(rb.getString("xml"));
pc.setMapper(rb.getString("mapper"));
mpg.setPackageInfo(pc);
// 自定义配置 此处是给模板赋值
// InjectionConfig cfg = new InjectionConfig() {
// //自定义属性注入:abc
// //在.ftl(或者是.vm)模板中,通过${cfg.abc}获取属性
// @Override
// public void initMap() {
// Map map = new HashMap<>();
// map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
// this.setMap(map);
// }
// };
// 如果模板引擎是 freemarker
// String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
// String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置 因为entity在api包里
// List focList = new ArrayList<>();
// 自定义配置会被优先输出
// focList.add(new FileOutConfig(templatePath) {
// @Override
// 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);
// 5. 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 此处的路径是.ftl
templateConfig.setEntity("templates/entity2.java");
templateConfig.setController("templates/controller2.java");
templateConfig.setService("templates/service2.java");
templateConfig.setServiceImpl("templates/serviceImpl2.java");
// templateConfig.setXml("templates/mapper2.xml"); //TODO 此处不知道为什么改名字不行,默认会使用mapper.xml.ftl
templateConfig.setMapper("templates/mapper2.java");
mpg.setTemplate(templateConfig);
// 策略配置 详细请参考 https://baomidou.com/pages/061573/#%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A1%A8%E9%85%8D%E7%BD%AE
StrategyConfig strategy = new StrategyConfig();
/** 此处可以修改为您的表前缀,如果没有,注释掉即可*/
//strategy.setTablePrefix(new String[] { "t_" });
//数据库表映射到实体的命名策略 支持驼峰
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
//【实体】是否为 lombok 模型(默认 false)此处设置成true会生成以下三个注解 ,所以直接删除了模板entity2.java.ftl的多余注解
strategy.setEntityLombokModel(true);
//是否生成实体时,生成字段注解
strategy.setEntityTableFieldAnnotationEnable(true);
//生成 @RestController 控制器
strategy.setRestControllerStyle(true);
// strategy.setControllerMappingHyphenStyle(true);
// 公共Controller父类 这个父类的导包有问题,TODO 直接在模板里写死
// strategy.setSuperControllerClass("BaseController");
// 写于父类中的公共字段
// strategy.setSuperEntityColumns("id");
strategy.setInclude(tables);
// strategy.setControllerMappingHyphenStyle(true);
// strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
// set freemarker engine 需要在 AutoGenerator 中 设置模板引擎
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
resources 的templates下新建文件 genreator.properties
#作者
author=wanghaha
#包配置 根据自己项目需求来配置 可随便调整
parent=com.wanghaha
controller=generator.controller
service=generator.service
serviceImpl=generator.service.impl
entity=generatorapi.entity
xml=generator.mapper.xml
mapper=generator.mapper
tables=
#数据源
jdbc.username=root
jdbc.password=1234
jdbc.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
jdbc.drivername=com.mysql.cj.jdbc.Driver
用到的依赖包:
<!--mybatisplus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<!--添加 代码生成器 依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<!--模板引擎 freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency>
<!-- 德鲁伊的启动器-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.22</version>
</dependency>
我是用的是mysql,使用的表是(直接用之前xxl-job官网的表)
CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_desc` varchar(255) NOT NULL,
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`author` varchar(64) DEFAULT NULL COMMENT '作者',
`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
`schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型',
`schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',
`misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',
`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext COMMENT 'GLUE源代码',
`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',
`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',
`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
`trigger_code` int(11) NOT NULL COMMENT '调度-结果',
`trigger_msg` text COMMENT '调度-日志',
`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
`handle_code` int(11) NOT NULL COMMENT '执行-状态',
`handle_msg` text COMMENT '执行-日志',
`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
PRIMARY KEY (`id`),
KEY `I_trigger_time` (`trigger_time`),
KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_log_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',
`running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',
`suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',
`fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_logglue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_id` int(11) NOT NULL COMMENT '任务,主键ID',
`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
`glue_source` mediumtext COMMENT 'GLUE源代码',
`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',
`add_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`registry_group` varchar(50) NOT NULL,
`registry_key` varchar(255) NOT NULL,
`registry_value` varchar(255) NOT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_name` varchar(64) NOT NULL COMMENT '执行器AppName',
`title` varchar(12) NOT NULL COMMENT '执行器名称',
`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',
`address_list` text COMMENT '执行器地址列表,多地址逗号分隔',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '账号',
`password` varchar(50) NOT NULL COMMENT '密码',
`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
PRIMARY KEY (`id`),
UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) NOT NULL COMMENT '锁名称',
PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
此上代码有两个困惑(虽然不影响结果),有大神看到了并解决了还望告知小弟1.149行 templateConfig.setXml(“templates/mapper2.xml”); 为什么我这里使用mapper2.xml.ftl是无效的?(我注释了,所以现在默认用的是mapper.xml.ftl)
2.169行 我想实现所有的controller都继承这个BaseController,但是这个BaseController的导包在哪设置呢?(默认就在当前的目录上,我是直接在模板里写死的,因为项目中的路径也是固定死的)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)