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.xu
generator.email=xuduochoua@163.com
#表前缀(类名不会包含表前缀)
generator.tablePrefix=t_
#实体中忽略的字段(在基类中的字段) 另:列名转换成属性名的时候 is_delete格式会变成delete
#generator.ignores=id,is_enable,is_delete,create_time,update_time
generator.ignores=ID,CREATE_USER_ID,CREATE_TIME,LAST_UPDATE_USER_ID,LAST_UPDATE_TIME,ENABLE_FLAG
#需要填充的模板
generator.templates[0]=generator/templates/Entity.java.vm
generator.templates[1]=generator/templates/Mapper.java.vm
generator.templates[2]=generator/templates/Mapper.xml.vm
generator.templates[3]=generator/templates/Service.java.vm
generator.templates[4]=generator/templates/Controller.java.vm
#数据类型转换,配置信息:数据库类型->java类型
generator.dataTypeConvert.tinyint=Integer
generator.dataTypeConvert.smallint=Inteer
generator.dataTypeConvert.mediumint=Integer
generator.dataTypeConvert.int=Integer
generator.dataTypeConvert.integer=Integer
generator.dataTypeConvert.bigint=Long
generator.dataTypeConvert.float=Float
generator.dataTypeConvert.double=Double
generator.dataTypeConvert.decimal=BigDecimal
generator.dataTypeConvert.bit=Boolean
generator.dataTypeConvert.enum=String
generator.dataTypeConvert.char=String
generator.dataTypeConvert.varchar=String
generator.dataTypeConvert.tinytext=String
generator.dataTypeConvert.text=String
generator.dataTypeConvert.mediumtext=String
generator.dataTypeConvert.longtext=String
generator.dataTypeConvert.date=Date
generator.dataTypeConvert.time=Date
generator.dataTypeConvert.datetime=Date
generator.dataTypeConvert.timestamp=Date
GeneratorAutoconfigigure
generator.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 {
/**
* 本项目中支持的各个数据库类型
*/
@Autowired
private Collection<GeneratorDao> generatorDaoList;
/**
* 当前配置的数据库类型 默认MYSQL
*/
@Value("${generator.database:mysql}")
private String database;
@Primary
@Bean
public 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;
@Override
public 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
@Service
public 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下的模板文件