一 概述
myBatis和myBatisplus中都有代码生成器,这里简单介绍myBatisplus中的代码生成器简单实现与使用!
二 代码生成器的实现
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/generator-code/src/main/java");
gc.setAuthor("author"); //设置生成作者
gc.setFileOverride(true);
gc.setOpen(false);
// 通用名称
gc.setEntityName("%sEntity");
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://ip:3306/dbname?allowMultiQueries=true");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("username");
dsc.setPassword("password");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.zhixuezhe.mybatisplus/generator");
pc.setServiceImpl(pc.getService());
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
//策略配置
StrategyConfig strategy = new StrategyConfig();
//下划线命名规则
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setSkipView(true);
//strategy.setEntityTableFieldAnnotationEnable(true);
//所有生成的entity所继承的父entity
strategy.setSuperEntityClass("com.***.entity.base.BaseEntity");
//父entity中存在的字段
strategy.setSuperEntityColumns("id", "del_flag", "update_time", "create_time", "version");
//所有生成的Controller所继承的Controller
strategy.setSuperControllerClass("com.***.controller.BaseController");
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
//生成除某个表在内所对的代码
strategy.setExclude("");
//生成单表对应的代码
strategy.setInclude("tableName");
//生成多表对应的代码
strategy.setInclude("tableName1","tableName1","tableName1");
mpg.setStrategy(strategy);
//设置模板引擎
//mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
三 实际使用效果
BaseEntity
@Data
public class BaseEntity {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Integer id;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private LocalDateTime createTime;
/**
* 最后更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private LocalDateTime updateTime;
/**
* 最新版本
*/
@TableField(fill = FieldFill.INSERT_UPDATE, update = "%s+1")
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
@Version
private Integer version;
/**
* 删除标记(0-否,1-是)
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Boolean delFlag;
}
生成的Entity
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("address")
public class PrintAddressEntity extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 手机号码
*/
private String phone;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 区
*/
private String area;
}
controller,service,mapper,xml等文件也会自动生成好,大家可以自己试试。某些细节原理待后续有空再认真学习分析一下。待续。。。