mybatis有代码生成器,mybatis-generator,pom引用配置生成位置即可,这个不是重点,网上一搜一大堆,这里不表。为啥呢,不通用,好多公司有自己的编码规范,封装了一些基础组件,不得不按照公司的规范来,那么freemarker就有用武之地了,下面咱们来介绍一下哈。
freemarker需要引用pom依赖:
org.freemarker freemarker2.3.16
编写模板:
entity.flt
package ${packageName}; public class ${className} { <#list attrs as attr> #list> private ${attr.columnType} ${attr.columnName}; <#list attrs as attr> public ${attr.columnType} get${attr.columnName?cap_first}(){ return ${attr.columnName}; } public void set${attr.columnName?cap_first}(${attr}.columnType) ${attr.columnName}{ this.${attr.columnName} = ${attr.columnName}; } #list> }
模板tips:
<#noparse>#noparse>包围起来的部分不会被解析
辅助类:
package com.neo.newDemo.helper; public class ColumnInfo { private String dbColumnName; private String columnName; private String columnType; private String dbColumnType; private String columnComment; public String getDbColumnName() { return dbColumnName; } public void setDbColumnName(String dbColumnName) { this.dbColumnName = dbColumnName; } public String getColumnName() { return columnName; } public void setColumnName(String columnName) { this.columnName = columnName; } public String getColumnType() { return columnType; } public void setColumnType(String columnType) { this.columnType = columnType; } public String getDbColumnType() { return dbColumnType; } public void setDbColumnType(String dbColumnType) { this.dbColumnType = dbColumnType; } public String getColumnComment() { return columnComment; } public void setColumnComment(String columnComment) { this.columnComment = columnComment; } public ColumnInfo(String dbColumnName, String columnName, String columnType, String dbColumnType, String columnComment) { this.dbColumnName = dbColumnName; this.columnName = columnName; this.columnType = columnType; this.dbColumnType = dbColumnType; this.columnComment = columnComment; } }
主类:
package com.neo.newDemo.helper; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateExceptionHandler; import org.springframework.util.StringUtils; import java.io.*; import java.sql.*; import java.util.*; public class AmazingClass { private static final String CLASS_NAME = "Amazing"; private static final String TABLE_NAME = "amazing_info"; private static final String LOCAL_TEMPLATE_PATH = "/Users/neo/document/new_demo/src/main/resources/templates"; private static final String TEMPLATE_NAME = "entity.flt"; private static final String PACKAGE_NAME = "com/neo/newDemo"; private static final String AUTHOR = "neo"; private static final String FILE_TO_PATH = "/Users/neo/document/new_demo/src/main/java/com/neo/newDemo/entity"; private static MaptypeNameMap = new HashMap (){{ put("VARCHAR2","String"); put("DATE","Date"); put("NUMBER","Integer"); }}; public static void main(String[] args) { generate(); } private static void generate(){ if(!StringUtils.hasLength(CLASS_NAME) || !StringUtils.hasLength(TABLE_NAME)){ return; } if(CLASS_NAME.indexOf(",")>0){ String[] classNameArr = CLASS_NAME.split(","); String[] tableNameArr = TABLE_NAME.split(","); for(int i = 0;i getColumnList(String tableName){ Properties info = new Properties(); info.put("user","username"); info.put("password","123456"); info.put("remarksReporting","true"); String oracleUrl = "jdbc:oracle:thin:@ip:port:dbName"; String mysql = "jdbc:mysql://ip:port/dbName"; try { Connection connection = DriverManager.getConnection(mysql, info); DatabasemetaData metaData = connection.getmetaData(); ResultSet columns = metaData.getColumns(null, null, tableName, null); List columnInfoList = new ArrayList<>(); while(columns.next()){ String columnName = columns.getString("COLUMN_NAME").toLowerCase(); String typeName = columns.getString("TYPE_NAME").toLowerCase(); String remarks = columns.getString("REMARKS")==null?"":columns.getString("TYPE_NAME").toLowerCase(); ColumnInfo columnInfo = new ColumnInfo(columnName, replaceUpderlineToUpper(columnName,"_",""), typeNameMap.get(typeName), typeName, remarks); } } catch (Exception e) { e.printStackTrace(); } return null; } private static String replaceUpderlineToUpper(String columnName, String regex, String replacement) { if(!StringUtils.hasLength(columnName)){ return columnName; } String newString = ""; int first; while(columnName.indexOf(regex)!=-1){ first = columnName.indexOf(regex); if(first != columnName.length()){ newString = newString + columnName.substring(0, first) + replacement; columnName = columnName.substring(first + regex.length()); columnName = firstCharacterToUpper(columnName); } } newString = newString + columnName; return newString; } private static String firstCharacterToUpper(String str){return str.substring(0,1).toUpperCase() + str.substring(1);} private static void gen(List list, String className){ Configuration cfg = new Configuration(); try { cfg.setDirectoryForTemplateLoading (new File(LOCAL_TEMPLATE_PATH)); cfg.setDefaultEncoding("UTF-8"); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); Template template = cfg.getTemplate(TEMPLATE_NAME); Map root = new HashMap<>(); root.put ("packageName", PACKAGE_NAME); root.put ("className", className); root.put ("author", AUTHOR); root.put ("attrs" ,list); File dir = new File (FILE_TO_PATH); if (dir.exists()){ dir.mkdirs(); } OutputStream fos = new FileOutputStream(new File(dir, className+". java")) ; Writer out = new OutputStreamWriter(fos); template.process (root, out); fos.flush(); fos.close(); System.out.println("success"); } catch (Exception e) { e.printStackTrace(); } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)