select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables
where table_schema = (select database()) and table_name = #{tableName}
二.获取表的基础信息 (表的字段,类型等)
select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra from information_schema.columns
where table_name = #{tableName} and table_schema = (select database()) order by ordinal_position
三.根据所得信息渲染实体(自定义各个属性名字生成规则)
public class TableEntity {
//表的名称
private String tableName;
//表的备注
private String comments;
//表的主键
private ColumnEntity pk;
//表的列名(不包含主键)
private List columns;
//类名(第一个字母大写),如:sys_user => SysUser
private String className;
//类名(第一个字母小写),如:sys_user => sysUser
private String classname;
//表的列名(不包含其他日期,只包含建立日期)
private List columnDates;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public ColumnEntity getPk() {
return pk;
}
public void setPk(ColumnEntity pk) {
this.pk = pk;
}
public List getColumns() {
return columns;
}
public void setColumns(List columns) {
this.columns = columns;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
public List getColumnDates() {
return columnDates;
}
public void setColumnDates(List columnDates) {
this.columnDates = columnDates;
}
}
public class ColumnEntity {
//列名
private String columnName;
//列名类型
private String dataType;
//列名备注
private String comments;
//属性名称(第一个字母大写),如:user_name => UserName
private String attrName;
//属性名称(第一个字母小写),如:user_name => userName
private String attrname;
//属性类型
private String attrType;
//auto_increment
private String extra;
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public String getAttrname() {
return attrname;
}
public void setAttrname(String attrname) {
this.attrname = attrname;
}
public String getAttrName() {
return attrName;
}
public void setAttrName(String attrName) {
this.attrName = attrName;
}
public String getAttrType() {
return attrType;
}
public void setAttrType(String attrType) {
this.attrType = attrType;
}
public String getExtra() {
return extra;
}
public void setExtra(String extra) {
this.extra = extra;
}
}
四.运用velocity模板
添加velocity并进行加载和运用,同时用map填充红色自定义字段,生成文件
//设置velocity资源加载器,zip文件
Properties prop = new Properties();
prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
Velocity.init(prop);
Map map = Maps.newHashMap();
map.put("tableName", tableEntity.getTableName());
map.put("comments", tableEntity.getComments());
map.put("className", tableEntity.getClassName());
map.put("classname", tableEntity.getClassname());
// 省略map。需根据自己文档填写map key,value
VelocityContext context = new VelocityContext(map);
ZipOutputStream zip = new ZipOutputStream(outputStream);
Template tpl = Velocity.getTemplate("template/Service.java.vm", "UTF-8"); //你的velocity文件位置
StringWriter sw = new StringWriter();
tpl.merge(context, sw);
ZipEntry zipEntry = new ZipEntry("service" + File.separator + tableEntity.getClassName() + "Service.java"); //你的文件生成路径
zip.putNextEntry(new ZipEntry(zipEntry))
IOUtils.write(sw.toString(), zip, "UTF-8");
IOUtils.closeQuietly(sw);
zip.closeEntry();



