pom.xml文件引入freemarker和jdbc依赖
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.16</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.22</version> </dependency>
模板文件module.ftl, 所在位置classpath下的module中
package cn.code.bean; public class ${myClass.className} { <#list myClass.fieldList as field> //${field.fieldRemarks} private ${field.fieldType} ${field.fieldName}; </#list> <#list myClass.fieldList as field> public ${field.fieldType} get${field.fieldNameUpperFirstLetter}() { return ${field.fieldName}; } public void set${field.fieldNameUpperFirstLetter}(${field.fieldType} ${field.fieldName}) { this.${field.fieldName} = ${field.fieldName}; } </#list> }
属性类Field.class
package cn.code.generate; //属性类 public class Field { //字段名 private String fieldName; //字段类型 private String fieldType; //字段注释 private String fieldRemarks; //字段名首字母大写 private String fieldNameUpperFirstLetter; public String getFieldName() { return fieldName; } public void setFieldName(String fieldName) { this.fieldName = fieldName; } public String getFieldType() { return fieldType; } public void setFieldType(String fieldType) { this.fieldType = fieldType; } public String getFieldRemarks() { return fieldRemarks; } public void setFieldRemarks(String fieldRemarks) { this.fieldRemarks = fieldRemarks; } public String getFieldNameUpperFirstLetter() { return fieldNameUpperFirstLetter; } public void setFieldNameUpperFirstLetter(String fieldNameUpperFirstLetter) { this.fieldNameUpperFirstLetter = fieldNameUpperFirstLetter; } }
MyClass.java
package cn.code.generate; import java.util.List; public class MyClass { //类名 private String className; //字段的集合 private List<Field> fieldList; public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public List<Field> getFieldList() { return fieldList; } public void setFieldList(List<Field> fieldList) { this.fieldList = fieldList; } }
ClassGenerator.class
package cn.code.generate; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class ClassGenerator { public DatabaseMetaData init(){ DatabaseMetaData databaseMetaData = null; try{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://192.168.126.133:3306/itrip"; String user = "root"; String password = "123456"; Connection connection = DriverManager.getConnection(url, user, password); databaseMetaData = connection.getMetaData(); }catch (Exception e){ e.printStackTrace(); } return databaseMetaData; } //根据表名生产出类 public MyClass generateClass(String tableName){ MyClass myClass = new MyClass(); List<Field> fieldList = new ArrayList<Field>(); DatabaseMetaData databaseMetaData = init(); try{ ResultSet rs = databaseMetaData.getColumns(null, "%", tableName, "%"); while(rs.next()){ //列名 String columnName = rs.getString("COLUMN_NAME"); //类型 String typeName = rs.getString("TYPE_NAME"); System.out.println("typeName:" + typeName); //注释 String remarks = rs.getString("REMARKS"); Field field = new Field(); field.setFieldName(columnName); field.setFieldType(columnTypeToFieldType(typeName)); field.setFieldRemarks(remarks); field.setFieldNameUpperFirstLetter(upperFirstLetter(columnName)); fieldList.add(field); } }catch (Exception e){ e.printStackTrace(); } myClass.setClassName(tableNameToClassName(tableName)); myClass.setFieldList(fieldList); return myClass; } //字段类型转换成属性类型 public String columnTypeToFieldType(String columnType){ String fieldType = null; switch (columnType) { case "INT": fieldType = "Integer"; break; case "VARCHAR": fieldType = "String"; break; case "CHAR": fieldType = "String"; break; case "DATE": fieldType = "Date"; break; case "BIGINT": fieldType = "Long"; break; default: fieldType = "String"; break; } return fieldType; } //首字母大写 public String upperFirstLetter(String src){ String firstLetter = src.substring(0, 1).toUpperCase(); String otherLetters = src.substring(1); return firstLetter + otherLetters; } //表名转类名 public String tableNameToClassName(String tableName){ StringBuilder className = new StringBuilder(); //aa_bb_cc AaBbCc String[] split = tableName.split("_"); for (String item : split) { className.append(upperFirstLetter(item)); } return className.toString(); } }
Generator.class
package cn.code.generate; import cn.code.User; import freemarker.template.Configuration; import freemarker.template.Template; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Generator { public static void main(String[] args) throws Exception{ //创建Configuration对象 Configuration configuration = new Configuration(); //设置模板所在目录 String path = Generator.class.getClassLoader().getResource("module").getPath(); configuration.setDirectoryForTemplateLoading(new File(path)); //获取模板 Template template = configuration.getTemplate("class.ftl"); //设置数据并执行 Map map = new HashMap(); ClassGenerator classGenerator = new ClassGenerator(); MyClass myClass = classGenerator.generateClass("user"); map.put("myClass", myClass); Writer writer = new OutputStreamWriter(new FileOutputStream("G:/"+myClass.getClassName()+".java")); template.process(map, writer); } }