2020-04-01
说明: 初始的代码生成是直接放在boot-war-web项目的
pers.vic.boot.console.generator模块下的, 个人觉得应该抽离成一个starter,更方便集成一些。另:boot-starter-generator 既可以作为starter集成, 也可以下放开
GeneratorApplication.java上的@SpringBootApplication从而独立运行
generator-config.properties
#代码生成器,配置信息#包名generator.packageName=pers.vic.boot.console#模块名generator.moduleName=system#作者generator.author=Vic.xugenerator.email=xuduochoua@163.com#表前缀(类名不会包含表前缀)generator.tablePrefix=t_#实体中忽略的字段(在基类中的字段) 另:列名转换成属性名的时候 is_delete格式会变成delete#generator.ignores=id,is_enable,is_delete,create_time,update_timegenerator.ignores=ID,CREATE_USER_ID,CREATE_TIME,LAST_UPDATE_USER_ID,LAST_UPDATE_TIME,ENABLE_FLAG#需要填充的模板generator.templates[0]=generator/templates/Entity.java.vmgenerator.templates[1]=generator/templates/Mapper.java.vmgenerator.templates[2]=generator/templates/Mapper.xml.vmgenerator.templates[3]=generator/templates/Service.java.vmgenerator.templates[4]=generator/templates/Controller.java.vm#数据类型转换,配置信息:数据库类型->java类型generator.dataTypeConvert.tinyint=Integergenerator.dataTypeConvert.smallint=Inteergenerator.dataTypeConvert.mediumint=Integergenerator.dataTypeConvert.int=Integergenerator.dataTypeConvert.integer=Integergenerator.dataTypeConvert.bigint=Longgenerator.dataTypeConvert.float=Floatgenerator.dataTypeConvert.double=Doublegenerator.dataTypeConvert.decimal=BigDecimalgenerator.dataTypeConvert.bit=Booleangenerator.dataTypeConvert.enum=Stringgenerator.dataTypeConvert.char=Stringgenerator.dataTypeConvert.varchar=Stringgenerator.dataTypeConvert.tinytext=Stringgenerator.dataTypeConvert.text=Stringgenerator.dataTypeConvert.mediumtext=Stringgenerator.dataTypeConvert.longtext=Stringgenerator.dataTypeConvert.date=Dategenerator.dataTypeConvert.time=Dategenerator.dataTypeConvert.datetime=Dategenerator.dataTypeConvert.timestamp=Date
GeneratorAutoconfigiguregenerator.database 数据库类型, 注册不同的GeneratorDao实现类,本项目暂时已经实现了mysql版本的GeneratorDao;dao的对数据库的查询操作使用的是jdbcTemplate
/*** @description: 代码生成starter 入口* @author: Vic.xu* @date: 2020年3月10日 上午10:54:39*/@Configuration@ConditionalOnClass(value = { JdbcTemplate.class })@ConditionalOnWebApplication@ConditionalOnExpression("${generatir.enabled:true}")@EnableConfigurationProperties(GeneratorProperties.class)public class GeneratorAutoconfigigure {/*** 本项目中支持的各个数据库类型*/@Autowiredprivate Collection<GeneratorDao> generatorDaoList;/*** 当前配置的数据库类型 默认MYSQL*/@Value("${generator.database:mysql}")private String database;@Primary@Beanpublic GeneratorDao getGeneratorDao() {DatabaseType type = DatabaseType.getByName(database);Assert.notNull(type, "当前项目未支持" + database + "类型的数据库代码生成");GeneratorDao dao = null;for(GeneratorDao generatorDao : generatorDaoList) {if(type == generatorDao.databaseType()) {dao = generatorDao;break;}}Assert.notNull(dao, "当前项目未实现" + database + "类型的数据库的GeneratorDao");return dao;}}
GeneratorProperties
/*** @description: 附件配置项* @author: Vic.xu* @date: 2019年12月11日 上午9:33:21*/@Configuration@ConfigurationProperties(prefix = GeneratorProperties.GENERATOR_PREFIX)@PropertySource("classpath:config/generator-config.properties")@JsonIgnoreProperties({"beanExpressionResolver"})public class GeneratorProperties implements Serializable{private static final long serialVersionUID = 1L;public static final String GENERATOR_PREFIX = "generator";@Value("${generator.database:mysql}")private String database;/*** 包名*/private String packageName;/*** 包名*/private String moduleName;/*** 作者*/private String author;/***/private String email;/*** 表前缀 若存在则生成的实体名会去掉前缀*/private String tablePrefix;/*** 实体中忽略的表字段*/private Set<String> ignores;/*** 大文本类型的数据库数据格式,不应该出现在列表页*/private Set<String> textTypes;/*** 需要填充的数据模板*/private List<String> templates;/*** 数据类型转换 数据库类型--> java 类型*/private Map<String, String> dataTypeConvert;@Overridepublic String toString() {return "GeneratorProperties [packageName=" + packageName + ",\n moduleName=" + moduleName + ",\n author=" + author+ ",\n email=" + email + ",\n tablePrefix=" + tablePrefix + ",\n ignores=" + ignores + ",\n templates="+ templates + ",\n dataTypeConvert=" + dataTypeConvert + "]";}public String getPackageName() {return packageName;}public String getModuleName() {return moduleName;}public String getAuthor() {return author;}public String getEmail() {return email;}public String getTablePrefix() {return tablePrefix;}public Set<String> getIgnores() {return ignores;}public List<String> getTemplates() {return templates;}public Map<String, String> getDataTypeConvert() {return dataTypeConvert;}public void setPackageName(String packageName) {this.packageName = packageName;}public void setModuleName(String moduleName) {this.moduleName = moduleName;}public void setAuthor(String author) {this.author = author;}public void setEmail(String email) {this.email = email;}public void setTablePrefix(String tablePrefix) {this.tablePrefix = tablePrefix;}public void setIgnores(Set<String> ignores) {this.ignores = ignores;}public void setTemplates(List<String> templates) {this.templates = templates;}public void setDataTypeConvert(Map<String, String> dataTypeConvert) {this.dataTypeConvert = dataTypeConvert;}/*** @return the database*/public String getDatabase() {return database;}/*** @param database the database to set*/public void setDatabase(String database) {this.database = database;}/*** @return the textTypes*/public Set<String> getTextTypes() {return textTypes;}/*** @param textTypes the textTypes to set*/public void setTextTypes(Set<String> textTypes) {this.textTypes = textTypes;}}
GeneratorTest暂时生成的zip中的文件是放在一个文件夹下,并未分包,可根据需要修改此逻辑
//查询当前数据库的表列表public void list() {}// 某个表的详情public void detail() {}// 导出某个或者多个表生成的public void export() {}
实体依赖BaseEntity等
public class DevelopPlan extends BaseEntity {}
mybatis的xml,包含页面列查询,详情查询,新增,修改,删除等基本操作,参见BaseMapper接口
mapper:依赖BaseMapper
public interface DevelopPlanMapper extends BaseMapper<DevelopPlan> {}
service依赖BaseService
@Servicepublic class DevelopPlanService extends BaseService<DevelopPlanMapper, DevelopPlan>{}
controller依赖BaseController
@RestController@RequestMapping("/develop/plan")public class DevelopPlanController extends BaseController<DevelopPlanService, DevelopPlan>{}
thymeleaf编写,简单内置页面导出功能后台管理地址:console.xuqiudong.cc
本项目主要生成的模板包括:mapper,mapper.xml, service, controller, 以及前端的list.html和form.html, 可以根据吱声需要 重写generator.templates下的模板文件