`

freemaker自动生成源代码

阅读更多

自己写了一个自动生成源代码的工具,代码自动生成,以及一个完整项目的成功实践,还在继续完善当中,采用freemaker配置模板,可以根据自己的需要生成自己想要的代码

 

先来看看怎么使用,很简单

先配置config.xml 配置设置模板路径,以及项目生成路径,可以自己定义

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <xml-body>  
  3.  <code>  
  4.   <projectpath>D:/vobuilder/vobuilder</projectpath>  
  5.      
  6.   <model>com.hyj.model</model>  
  7.   <action>com.hyj.action</action>  
  8.   <dao>com.hyj.dao</dao>  
  9.   <daoimpl>com.hyj.dao.jdbc</daoimpl>  
  10.   <service>com.hyj.service</service>  
  11.   <serviceimpl>com.hyj.service.impl</serviceimpl>    
  12.   <jsp>/freemarker/jsp</jsp>  
  13.       
  14.  </code>  
  15. </xml-body>  
<?xml version="1.0" encoding="UTF-8"?>
<xml-body>
 <code>
  <projectpath>D:/vobuilder/vobuilder</projectpath>
  
  <model>com.hyj.model</model>
  <action>com.hyj.action</action>
  <dao>com.hyj.dao</dao>
  <daoimpl>com.hyj.dao.jdbc</daoimpl>
  <service>com.hyj.service</service>
  <serviceimpl>com.hyj.service.impl</serviceimpl> 
  <jsp>/freemarker/jsp</jsp>
   
 </code>
</xml-body>

 

 

 

Java代码 复制代码 收藏代码
  1. CodeGenerator cg = new CodeGenerator();   
  2. cg.generate("tableName");   
  3.   
  4. //这样就生成了所有项目的文件  
CodeGenerator cg = new CodeGenerator();
cg.generate("tableName");

//这样就生成了所有项目的文件

  

 

 1.生成代码的引擎

 

Java代码 复制代码 收藏代码
  1. package com.hyj.util;   
  2.   
  3. import java.io.File;   
  4. import java.io.FileOutputStream;   
  5. import java.io.IOException;   
  6. import java.io.OutputStreamWriter;   
  7. import java.io.Writer;   
  8. import java.sql.Connection;   
  9. import java.util.Map;   
  10.   
  11. import org.apache.log4j.LogManager;   
  12. import org.apache.log4j.Logger;   
  13.   
  14. import com.szxhdz.util.Factory;   
  15.   
  16. import freemarker.template.Configuration;   
  17. import freemarker.template.DefaultObjectWrapper;   
  18. import freemarker.template.Template;   
  19. import freemarker.template.TemplateException;   
  20.   
  21. public abstract class AbstractEngine {   
  22.   
  23.  protected static Logger logger = LogManager.getLogger(AbstractEngine.class);   
  24.   
  25.  protected static Connection con;   
  26.   
  27.  protected static Configuration cfg;   
  28.   
  29.  public AbstractEngine(String templatePath) {   
  30.   con = Factory.getConnection();   
  31.   try {   
  32.    cfg = new Configuration();   
  33.    cfg.setDefaultEncoding("gb2312");   
  34.    cfg.setDirectoryForTemplateLoading(new File(templatePath));   
  35.    cfg.setObjectWrapper(new DefaultObjectWrapper());   
  36.   } catch (Exception e) {   
  37.    e.printStackTrace();   
  38.   }   
  39.  }   
  40.   
  41.  public static void create(String ftlTemplate, Map contents, String savePath,   
  42.    String saveFilename) {   
  43.   try {   
  44.    Template temp = cfg.getTemplate(ftlTemplate);   
  45.    logger.info("generate file " + saveFilename + "  in path "  
  46.      + savePath);   
  47.    File file = new File(savePath);   
  48.    if (!file.exists()) {   
  49.     file.mkdirs();   
  50.    }   
  51.    Writer out = new OutputStreamWriter(new FileOutputStream(savePath   
  52.      + "/" + saveFilename), "gb2312");   
  53.    temp.process(contents, out);   
  54.    out.flush();   
  55.   } catch (IOException e) {   
  56.    e.printStackTrace();   
  57.   } catch (TemplateException e1) {   
  58.    e1.printStackTrace();   
  59.   }   
  60.  }   
  61. }  
package com.hyj.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.sql.Connection;
import java.util.Map;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import com.szxhdz.util.Factory;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public abstract class AbstractEngine {

 protected static Logger logger = LogManager.getLogger(AbstractEngine.class);

 protected static Connection con;

 protected static Configuration cfg;

 public AbstractEngine(String templatePath) {
  con = Factory.getConnection();
  try {
   cfg = new Configuration();
   cfg.setDefaultEncoding("gb2312");
   cfg.setDirectoryForTemplateLoading(new File(templatePath));
   cfg.setObjectWrapper(new DefaultObjectWrapper());
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public static void create(String ftlTemplate, Map contents, String savePath,
   String saveFilename) {
  try {
   Template temp = cfg.getTemplate(ftlTemplate);
   logger.info("generate file " + saveFilename + "  in path "
     + savePath);
   File file = new File(savePath);
   if (!file.exists()) {
    file.mkdirs();
   }
   Writer out = new OutputStreamWriter(new FileOutputStream(savePath
     + "/" + saveFilename), "gb2312");
   temp.process(contents, out);
   out.flush();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (TemplateException e1) {
   e1.printStackTrace();
  }
 }
}

 

2。生成代码的实现类

 

Java代码 复制代码 收藏代码
  1. package com.hyj.util;   
  2.   
  3. import java.sql.SQLException;   
  4. import java.util.ArrayList;   
  5. import java.util.HashMap;   
  6. import java.util.Iterator;   
  7. import java.util.List;   
  8. import java.util.Map;   
  9.   
  10. import com.hyj.util.JDBCUtil.Column;   
  11. import com.szxhdz.util.SystemConstant;   
  12.   
  13. public class CodeGenerator extends AbstractEngine implements Creater{   
  14.     private static final String BASE_PATH = SystemConstant.getProperty("code.projectpath");   
  15.   
  16.     private static final String PACKAGE_PATH = "/src/com/hyj/";   
  17.   
  18.     private static final String JAVA_CODE_GENERATOR_PATH = BASE_PATH   
  19.             + PACKAGE_PATH;   
  20.   
  21.     private static final String TEMPLATE_PATH = BASE_PATH   
  22.             + "/freemarker/template";   
  23.   
  24.     public CodeGenerator() {   
  25.         super(TEMPLATE_PATH);   
  26.     }   
  27.   
  28.     public CodeGenerator(String templatePath) {   
  29.         super(templatePath);   
  30.     }   
  31.   
  32.     public void generatorJSP(String table) {   
  33.         try {   
  34.             List priList = JDBCUtil   
  35.             .getPrimaryKeyColumns(con, nullnull, table);   
  36.             Column pk = (Column) priList.get(0);   
  37.             Map params = new HashMap();   
  38.             params.put("table", table);   
  39.             params.put("columnList", JDBCUtil.getTableColumns(con, nullnull,   
  40.                     table));   
  41.             params.put("pk", pk);   
  42.             create("add.ftl", params, BASE_PATH + "/freemarker/jsp", table   
  43.                     .toLowerCase().replaceAll("_""")   
  44.                     + "_add.jsp");   
  45.   
  46.         } catch (Exception e) {   
  47.             e.printStackTrace();   
  48.         }   
  49.     }   
  50.   
  51.     public void generaorAll() {   
  52.         List tbList = null;   
  53.         try {   
  54.             tbList = JDBCUtil.getTables(con, null"FTFJ_WEB"null);   
  55.             for (Iterator iter = tbList.iterator(); iter.hasNext();) {   
  56.                 String table = (String) iter.next();   
  57.                 generatorJSP(table);   
  58.             }   
  59.         } catch (SQLException e) {   
  60.             e.printStackTrace();   
  61.         }   
  62.     }   
  63.   
  64.     public void generateModel(String table) {   
  65.         try {   
  66.             Map params = new HashMap();   
  67.             params.put("table", table);   
  68.             params.put("columnList", JDBCUtil.getTableColumns(con, nullnull,   
  69.                     table));   
  70.             create("bean.ftl", params, JAVA_CODE_GENERATOR_PATH + "model",   
  71.                     table.substring(01).toUpperCase()   
  72.                             + table.toLowerCase().replaceAll("_""")   
  73.                                     .substring(1) + ".java");   
  74.         } catch (Exception e) {   
  75.             e.printStackTrace();   
  76.         }   
  77.     }   
  78.   
  79.     public void generatorModels() {   
  80.         List tbList = null;   
  81.         try {   
  82.             tbList = JDBCUtil.getTables(con, null"FTFJ_WEB"null);   
  83.             for (Iterator iter = tbList.iterator(); iter.hasNext();) {   
  84.                 String table = (String) iter.next();   
  85.                 generateModel(table);   
  86.             }   
  87.         } catch (SQLException e) {   
  88.             e.printStackTrace();   
  89.         }   
  90.     }   
  91.   
  92.     public void generateDao(String tableName) {   
  93.         try {   
  94.             List priList = JDBCUtil   
  95.                     .getPrimaryKeyColumns(con, nullnull, tableName);   
  96.             Column pk = (Column) priList.get(0);   
  97.             Map params = new HashMap();   
  98.             params.put("tableName", tableName);   
  99.             params.put("columnList", JDBCUtil.getTableColumns(con, nullnull,   
  100.                     tableName));   
  101.             params.put("pk", pk);   
  102.             create("dao.ftl", params, BASE_PATH +"/src/"+ SystemConstant.getProperty("code.dao").replace(".","/"),"I"+ tableName   
  103.                     .substring(01).toUpperCase()   
  104.                     + tableName.substring(1,tableName.length()).toLowerCase()   
  105.                             .replaceAll("_""") + "Dao.java");   
  106.         } catch (Exception e) {   
  107.             e.printStackTrace();   
  108.         }   
  109.     }   
  110.     public void generateDaoImpl(String table) {   
  111.         try {   
  112.             List priList = JDBCUtil   
  113.                     .getPrimaryKeyColumns(con, nullnull, table);   
  114.             Column pk = (Column) priList.get(0);   
  115.             Map params = new HashMap();   
  116.             params.put("table", table);   
  117.             params.put("columnList", JDBCUtil.getTableColumns(con, nullnull,   
  118.                     table));   
  119.             params.put("pk", pk);   
  120.             create("daoimpl.ftl", params, JAVA_CODE_GENERATOR_PATH + "dao/jdbc", table   
  121.                     .substring(01).toUpperCase()   
  122.                     + table.substring(1, table.length()).toLowerCase()   
  123.                             .replaceAll("_""") + "Dao.java");   
  124.         } catch (Exception e) {   
  125.             e.printStackTrace();   
  126.         }   
  127.     }   
  128.   
  129.     public void generateSql() {   
  130.   
  131.         List tbList = null;   
  132.         List ls = new ArrayList();   
  133.         try {   
  134.             tbList = JDBCUtil.getTables(con, nullnullnull);   
  135.             Map params = new HashMap();   
  136.   
  137.             for (Iterator iter = tbList.iterator(); iter.hasNext();) {   
  138.                 String table = (String) iter.next();   
  139.                 List columnlist = JDBCUtil.getTableColumns(con, nullnull,   
  140.                         table);   
  141.                 Column pk = (Column) JDBCUtil.getPrimaryKeyColumns(con, null,   
  142.                         null, table).get(0);   
  143.                 SqlBean sqlbean = new SqlBean();   
  144.                 sqlbean.setColumnList(columnlist);   
  145.                 sqlbean.setPk(pk);   
  146.                 sqlbean.setTable(table);   
  147.                 ls.add(sqlbean);   
  148.             }   
  149.             params.put("ls", ls);   
  150.             create("db.ftl", params, JAVA_CODE_GENERATOR_PATH + "sql""db.sql");   
  151.         } catch (SQLException e) {   
  152.             e.printStackTrace();   
  153.         }   
  154.     }   
  155.   
  156.     public void generateAction(String table) {   
  157.         try {   
  158.   
  159.             Map params = new HashMap();   
  160.   
  161.             List columnlist = JDBCUtil.getTableColumns(con, nullnull, table);   
  162.             params.put("columnlist", columnlist);   
  163.             params.put("table", table);   
  164.             params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, nullnull,   
  165.                     table).get(0));   
  166.             create("action.ftl", params, JAVA_CODE_GENERATOR_PATH + "action",   
  167.                     table.substring(01).toUpperCase()   
  168.                             + table.substring(1).toLowerCase().replaceAll("_",   
  169.                                     "") + "Action.java");   
  170.         } catch (Exception e) {   
  171.             e.printStackTrace();   
  172.         }   
  173.     }   
  174.   
  175.     public void generateList(String table) {   
  176.         try {   
  177.   
  178.             Map params = new HashMap();   
  179.   
  180.             List columnlist = JDBCUtil.getTableColumns(con, nullnull, table);   
  181.             params.put("columnlist", columnlist);   
  182.             params.put("table", table);   
  183.             params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, nullnull,   
  184.                     table).get(0));   
  185.             create("list.ftl", params, BASE_PATH + "/freemarker/jsp", table   
  186.                     .toLowerCase().replaceAll("_""")   
  187.                     + "_list.jsp");   
  188.         } catch (Exception e) {   
  189.             e.printStackTrace();   
  190.         }   
  191.     }   
  192.   
  193.     public void generateXwork(String table) {   
  194.         try {   
  195.   
  196.             Map params = new HashMap();   
  197.   
  198.             List columnlist = JDBCUtil.getTableColumns(con, nullnull, table);   
  199.             params.put("columnlist", columnlist);   
  200.             params.put("table", table);   
  201.             params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, nullnull,   
  202.                     table).get(0));   
  203.             create("xwork.ftl", params, JAVA_CODE_GENERATOR_PATH, "xwork-"  
  204.                     + table.toLowerCase().replaceAll("_""") + ".xml");   
  205.         } catch (Exception e) {   
  206.             e.printStackTrace();   
  207.         }   
  208.     }   
  209.   
  210.     public void generateApplicationContext() {   
  211.         List tbList = null;   
  212.         List tableList = new ArrayList();   
  213.         try {   
  214.             tbList = JDBCUtil.getTables(con, nullnullnull);   
  215.             for (Iterator iter = tbList.iterator(); iter.hasNext();) {   
  216.                 String table = (String) iter.next();   
  217.                 tableList.add(table);   
  218.             }   
  219.             Map params = new HashMap();   
  220.             params.put("tableList", tableList);   
  221.             create("applicationContext.ftl", params, JAVA_CODE_GENERATOR_PATH,   
  222.                     "applicationContext.xml");   
  223.         } catch (SQLException e) {   
  224.             e.printStackTrace();   
  225.         } catch (Exception e) {   
  226.             e.printStackTrace();   
  227.         }   
  228.     }   
  229.   
  230.     public void generateValidation(String table) {   
  231.         try {   
  232.             Map params = new HashMap();   
  233.             List columnlist = JDBCUtil.getTableColumns(con, nullnull, table);   
  234.             params.put("columnlist", columnlist);   
  235.             params.put("table", table);   
  236.             params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, nullnull,table).get(0));   
  237.             create("validation.ftl", params, JAVA_CODE_GENERATOR_PATH + "action",table.substring(0,1).toUpperCase()+table.substring(1).toLowerCase().replaceAll("_""") + "Action-validation.xml");   
  238.         } catch (Exception e) {   
  239.             e.printStackTrace();   
  240.         }   
  241.     }   
  242.     public void generateValidation_properties(String table) {   
  243.         try {   
  244.             Map params = new HashMap();   
  245.             List columnlist = JDBCUtil.getTableColumns(con, nullnull, table);   
  246.             params.put("columnlist", columnlist);   
  247.             params.put("table", table);   
  248.             params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, nullnull,table).get(0));   
  249.             create("validation_properties.ftl", params, JAVA_CODE_GENERATOR_PATH + "action",table.substring(0,1).toUpperCase()+table.substring(1).toLowerCase().replaceAll("_""") + "Action.properties");   
  250.         } catch (Exception e) {   
  251.             e.printStackTrace();   
  252.         }   
  253.     }   
  254.   
  255.   
  256.     public void generateService(String tableName) {   
  257.         try {   
  258.             Map params = new HashMap();   
  259.             List columnlist = JDBCUtil.getTableColumns(con, nullnull, tableName);   
  260.             params.put("columnlist", columnlist);   
  261.             params.put("tableName", tableName);   
  262.             params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, nullnull,tableName).get(0));   
  263.             create("service.ftl", params, BASE_PATH+"/src/" + SystemConstant.getProperty("code.service").replace(".","/"),"I"+tableName.substring(0,1).toUpperCase()+tableName.substring(1).toLowerCase().replaceAll("_""") + "Service.java");   
  264.         } catch (Exception e) {   
  265.             e.printStackTrace();   
  266.         }   
  267.            
  268.     }   
  269.   
  270.     public void generateServiceImpl(String tableName) {   
  271.         try {   
  272.             Map params = new HashMap();   
  273.             List columnlist = JDBCUtil.getTableColumns(con, nullnull, tableName);   
  274.             params.put("columnlist", columnlist);   
  275.             params.put("tableName", tableName);   
  276.             params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, nullnull,tableName).get(0));   
  277.             create("serviceimpl.ftl", params, BASE_PATH+"/src/" + SystemConstant.getProperty("code.serviceimpl").replace(".","/"),tableName.substring(0,1).toUpperCase()+tableName.substring(1).toLowerCase().replaceAll("_""") + "Service.java");   
  278.         } catch (Exception e) {   
  279.             e.printStackTrace();   
  280.         }   
  281.            
  282.     }   
  283.     public void generate(String tableName){   
  284.         generateAction(tableName);   
  285.         generateApplicationContext();   
  286.         generateDao(tableName);   
  287.         generateDaoImpl(tableName);   
  288.         generateList(tableName);   
  289.         generateModel(tableName);   
  290.         generateXwork(tableName);   
  291.         generatorJSP(tableName);   
  292.         generateValidation(tableName);   
  293.         generateValidation_properties(tableName);   
  294.         generateService(tableName);   
  295.         generateServiceImpl(tableName);   
  296.     }   
  297.        
  298.     public static void main(String[] args) {   
  299.         CodeGenerator generator = new CodeGenerator();   
  300.     //  generator.generateDao("ADV_POSITION");   
  301.         //generator.generateAction("ADV_POSITION");   
  302.         generator.generatorJSP("ADV_POSITION");   
  303.     }   
  304.   
  305.        
  306.   
  307. }  
package com.hyj.util;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.hyj.util.JDBCUtil.Column;
import com.szxhdz.util.SystemConstant;

public class CodeGenerator extends AbstractEngine implements Creater{
	private static final String BASE_PATH = SystemConstant.getProperty("code.projectpath");

	private static final String PACKAGE_PATH = "/src/com/hyj/";

	private static final String JAVA_CODE_GENERATOR_PATH = BASE_PATH
			+ PACKAGE_PATH;

	private static final String TEMPLATE_PATH = BASE_PATH
			+ "/freemarker/template";

	public CodeGenerator() {
		super(TEMPLATE_PATH);
	}

	public CodeGenerator(String templatePath) {
		super(templatePath);
	}

	public void generatorJSP(String table) {
		try {
			List priList = JDBCUtil
			.getPrimaryKeyColumns(con, null, null, table);
			Column pk = (Column) priList.get(0);
			Map params = new HashMap();
			params.put("table", table);
			params.put("columnList", JDBCUtil.getTableColumns(con, null, null,
					table));
			params.put("pk", pk);
			create("add.ftl", params, BASE_PATH + "/freemarker/jsp", table
					.toLowerCase().replaceAll("_", "")
					+ "_add.jsp");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void generaorAll() {
		List tbList = null;
		try {
			tbList = JDBCUtil.getTables(con, null, "FTFJ_WEB", null);
			for (Iterator iter = tbList.iterator(); iter.hasNext();) {
				String table = (String) iter.next();
				generatorJSP(table);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void generateModel(String table) {
		try {
			Map params = new HashMap();
			params.put("table", table);
			params.put("columnList", JDBCUtil.getTableColumns(con, null, null,
					table));
			create("bean.ftl", params, JAVA_CODE_GENERATOR_PATH + "model",
					table.substring(0, 1).toUpperCase()
							+ table.toLowerCase().replaceAll("_", "")
									.substring(1) + ".java");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void generatorModels() {
		List tbList = null;
		try {
			tbList = JDBCUtil.getTables(con, null, "FTFJ_WEB", null);
			for (Iterator iter = tbList.iterator(); iter.hasNext();) {
				String table = (String) iter.next();
				generateModel(table);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void generateDao(String tableName) {
		try {
			List priList = JDBCUtil
					.getPrimaryKeyColumns(con, null, null, tableName);
			Column pk = (Column) priList.get(0);
			Map params = new HashMap();
			params.put("tableName", tableName);
			params.put("columnList", JDBCUtil.getTableColumns(con, null, null,
					tableName));
			params.put("pk", pk);
			create("dao.ftl", params, BASE_PATH +"/src/"+ SystemConstant.getProperty("code.dao").replace(".","/"),"I"+ tableName
					.substring(0, 1).toUpperCase()
					+ tableName.substring(1,tableName.length()).toLowerCase()
							.replaceAll("_", "") + "Dao.java");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void generateDaoImpl(String table) {
		try {
			List priList = JDBCUtil
					.getPrimaryKeyColumns(con, null, null, table);
			Column pk = (Column) priList.get(0);
			Map params = new HashMap();
			params.put("table", table);
			params.put("columnList", JDBCUtil.getTableColumns(con, null, null,
					table));
			params.put("pk", pk);
			create("daoimpl.ftl", params, JAVA_CODE_GENERATOR_PATH + "dao/jdbc", table
					.substring(0, 1).toUpperCase()
					+ table.substring(1, table.length()).toLowerCase()
							.replaceAll("_", "") + "Dao.java");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void generateSql() {

		List tbList = null;
		List ls = new ArrayList();
		try {
			tbList = JDBCUtil.getTables(con, null, null, null);
			Map params = new HashMap();

			for (Iterator iter = tbList.iterator(); iter.hasNext();) {
				String table = (String) iter.next();
				List columnlist = JDBCUtil.getTableColumns(con, null, null,
						table);
				Column pk = (Column) JDBCUtil.getPrimaryKeyColumns(con, null,
						null, table).get(0);
				SqlBean sqlbean = new SqlBean();
				sqlbean.setColumnList(columnlist);
				sqlbean.setPk(pk);
				sqlbean.setTable(table);
				ls.add(sqlbean);
			}
			params.put("ls", ls);
			create("db.ftl", params, JAVA_CODE_GENERATOR_PATH + "sql", "db.sql");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void generateAction(String table) {
		try {

			Map params = new HashMap();

			List columnlist = JDBCUtil.getTableColumns(con, null, null, table);
			params.put("columnlist", columnlist);
			params.put("table", table);
			params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, null, null,
					table).get(0));
			create("action.ftl", params, JAVA_CODE_GENERATOR_PATH + "action",
					table.substring(0, 1).toUpperCase()
							+ table.substring(1).toLowerCase().replaceAll("_",
									"") + "Action.java");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void generateList(String table) {
		try {

			Map params = new HashMap();

			List columnlist = JDBCUtil.getTableColumns(con, null, null, table);
			params.put("columnlist", columnlist);
			params.put("table", table);
			params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, null, null,
					table).get(0));
			create("list.ftl", params, BASE_PATH + "/freemarker/jsp", table
					.toLowerCase().replaceAll("_", "")
					+ "_list.jsp");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void generateXwork(String table) {
		try {

			Map params = new HashMap();

			List columnlist = JDBCUtil.getTableColumns(con, null, null, table);
			params.put("columnlist", columnlist);
			params.put("table", table);
			params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, null, null,
					table).get(0));
			create("xwork.ftl", params, JAVA_CODE_GENERATOR_PATH, "xwork-"
					+ table.toLowerCase().replaceAll("_", "") + ".xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void generateApplicationContext() {
		List tbList = null;
		List tableList = new ArrayList();
		try {
			tbList = JDBCUtil.getTables(con, null, null, null);
			for (Iterator iter = tbList.iterator(); iter.hasNext();) {
				String table = (String) iter.next();
				tableList.add(table);
			}
			Map params = new HashMap();
			params.put("tableList", tableList);
			create("applicationContext.ftl", params, JAVA_CODE_GENERATOR_PATH,
					"applicationContext.xml");
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void generateValidation(String table) {
		try {
			Map params = new HashMap();
			List columnlist = JDBCUtil.getTableColumns(con, null, null, table);
			params.put("columnlist", columnlist);
			params.put("table", table);
			params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, null, null,table).get(0));
			create("validation.ftl", params, JAVA_CODE_GENERATOR_PATH + "action",table.substring(0,1).toUpperCase()+table.substring(1).toLowerCase().replaceAll("_", "") + "Action-validation.xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void generateValidation_properties(String table) {
		try {
			Map params = new HashMap();
			List columnlist = JDBCUtil.getTableColumns(con, null, null, table);
			params.put("columnlist", columnlist);
			params.put("table", table);
			params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, null, null,table).get(0));
			create("validation_properties.ftl", params, JAVA_CODE_GENERATOR_PATH + "action",table.substring(0,1).toUpperCase()+table.substring(1).toLowerCase().replaceAll("_", "") + "Action.properties");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	public void generateService(String tableName) {
		try {
			Map params = new HashMap();
			List columnlist = JDBCUtil.getTableColumns(con, null, null, tableName);
			params.put("columnlist", columnlist);
			params.put("tableName", tableName);
			params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, null, null,tableName).get(0));
			create("service.ftl", params, BASE_PATH+"/src/" + SystemConstant.getProperty("code.service").replace(".","/"),"I"+tableName.substring(0,1).toUpperCase()+tableName.substring(1).toLowerCase().replaceAll("_", "") + "Service.java");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	public void generateServiceImpl(String tableName) {
		try {
			Map params = new HashMap();
			List columnlist = JDBCUtil.getTableColumns(con, null, null, tableName);
			params.put("columnlist", columnlist);
			params.put("tableName", tableName);
			params.put("pk", JDBCUtil.getPrimaryKeyColumns(con, null, null,tableName).get(0));
			create("serviceimpl.ftl", params, BASE_PATH+"/src/" + SystemConstant.getProperty("code.serviceimpl").replace(".","/"),tableName.substring(0,1).toUpperCase()+tableName.substring(1).toLowerCase().replaceAll("_", "") + "Service.java");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	public void generate(String tableName){
		generateAction(tableName);
		generateApplicationContext();
		generateDao(tableName);
	    generateDaoImpl(tableName);
		generateList(tableName);
		generateModel(tableName);
		generateXwork(tableName);
		generatorJSP(tableName);
		generateValidation(tableName);
		generateValidation_properties(tableName);
		generateService(tableName);
		generateServiceImpl(tableName);
	}
	
	public static void main(String[] args) {
		CodeGenerator generator = new CodeGenerator();
	//	generator.generateDao("ADV_POSITION");
		//generator.generateAction("ADV_POSITION");
		generator.generatorJSP("ADV_POSITION");
	}

	

}

 

 3。下面是jdbc底层操作类

Java代码 复制代码 收藏代码
  1. /*  
  2.  * JDBCUtil.java  
  3.  *  
  4.  * Created on November 9, 2002, 4:27 PM  
  5.  */  
  6.   
  7. package com.hyj.util;   
  8. import java.sql.Connection;   
  9. import java.sql.DatabaseMetaData;   
  10. import java.sql.ResultSet;   
  11. import java.sql.SQLException;   
  12. import java.sql.Types;   
  13. import java.util.HashMap;   
  14. import java.util.HashSet;   
  15. import java.util.LinkedList;   
  16. import java.util.List;   
  17. import java.util.Map;   
  18. import java.util.Set;   
  19.   
  20. import net.sf.hibernate.Hibernate;   
  21. import net.sf.hibernate.type.NullableType;   
  22.   
  23. import org.apache.commons.logging.Log;   
  24. import org.apache.commons.logging.LogFactory;   
  25.   
  26. /**  
  27.  *  
  28.  * @author  Administrator  
  29.  */  
  30. public class JDBCUtil {   
  31.     private static final Log logger = LogFactory.getLog(JDBCUtil.class);   
  32.     public static class Column {   
  33.         public String name;   
  34.         public int sqlType;   
  35.         public int sqlColumnLength;   
  36.         public int sqlDecimalLength;   
  37.         public boolean sqlNotNull;   
  38.         public boolean sqlReadOnly;   
  39.         public NullableType hibernateType;   
  40.         public Class javaType;   
  41.         public String sqlTypeName;   
  42.         public String defalutValue;   
  43.         public boolean equals(Object o) {   
  44.             boolean rv = false;   
  45.             if (o != null && o instanceof JDBCUtil.Column) {   
  46.                 rv = (name.equals(((JDBCUtil.Column)o).name));   
  47.             }   
  48.             return rv;   
  49.         }   
  50.         public int hashCode() {   
  51.             return (name != null) ? name.hashCode() : 0;   
  52.         }   
  53.         public String getName() {   
  54.             return name;   
  55.         }   
  56.         public void setName(String name) {   
  57.             this.name = name;   
  58.         }   
  59.         public NullableType getHibernateType() {   
  60.             return hibernateType;   
  61.         }   
  62.         public void setHibernateType(NullableType hibernateType) {   
  63.             this.hibernateType = hibernateType;   
  64.         }   
  65.         public Class getJavaType() {   
  66.             return javaType;   
  67.         }   
  68.         public void setJavaType(Class javaType) {   
  69.             this.javaType = javaType;   
  70.         }   
  71.         public int getSqlColumnLength() {   
  72.             return sqlColumnLength;   
  73.         }   
  74.         public void setSqlColumnLength(int sqlColumnLength) {   
  75.             this.sqlColumnLength = sqlColumnLength;   
  76.         }   
  77.         public int getSqlDecimalLength() {   
  78.             return sqlDecimalLength;   
  79.         }   
  80.         public void setSqlDecimalLength(int sqlDecimalLength) {   
  81.             this.sqlDecimalLength = sqlDecimalLength;   
  82.         }   
  83.         public boolean isSqlNotNull() {   
  84.             return sqlNotNull;   
  85.         }   
  86.         public void setSqlNotNull(boolean sqlNotNull) {   
  87.             this.sqlNotNull = sqlNotNull;   
  88.         }   
  89.         public boolean isSqlReadOnly() {   
  90.             return sqlReadOnly;   
  91.         }   
  92.         public void setSqlReadOnly(boolean sqlReadOnly) {   
  93.             this.sqlReadOnly = sqlReadOnly;   
  94.         }   
  95.         public int getSqlType() {   
  96.             return sqlType;   
  97.         }   
  98.         public void setSqlType(int sqlType) {   
  99.             this.sqlType = sqlType;   
  100.         }   
  101.         public String getSqlTypeName() {   
  102.             return sqlTypeName;   
  103.         }   
  104.         public void setSqlTypeName(String sqlTypeName) {   
  105.             this.sqlTypeName = sqlTypeName;   
  106.         }   
  107.         public String getDefalutValue() {   
  108.             return defalutValue;   
  109.         }   
  110.         public void setDefalutValue(String defalutValue) {   
  111.             this.defalutValue = defalutValue;   
  112.         }   
  113.            
  114.            
  115.     };   
  116.        
  117.     public static List getCatalogs(Connection c) throws SQLException {   
  118.         DatabaseMetaData dmd = c.getMetaData();   
  119.         ResultSet rs = null;   
  120.         try {   
  121.             rs = dmd.getCatalogs();   
  122.             List l = new LinkedList();   
  123.             while (rs.next()) {   
  124.                 l.add(rs.getString(1));   
  125.             }   
  126.             return l;   
  127.         }   
  128.         finally {   
  129.             if (rs != null) rs.close();   
  130.         }   
  131.     }   
  132.        
  133.     public static Map getSchemas(Connection c) throws SQLException {   
  134.         DatabaseMetaData dmd = c.getMetaData();   
  135.         ResultSet rs = null;   
  136.         try {   
  137.             rs = dmd.getSchemas();   
  138.             Map map = new HashMap();   
  139.             List l;   
  140.             while (rs.next()) {   
  141.                 String schema = rs.getString(1);   
  142.                 String catalog = null;   
  143.                 if (rs.getMetaData().getColumnCount() > 1) {   
  144.                     catalog = rs.getString(2);   
  145.                 };   
  146.                 l = (List)map.get(catalog);   
  147.                 if (l == null) {   
  148.                     l = new LinkedList();   
  149.                     map.put(catalog, l);   
  150.                 }   
  151.                 l.add(schema);   
  152.             }   
  153.             return map;   
  154.         }   
  155.         finally {   
  156.             if (rs != null) rs.close();   
  157.         }   
  158.     }   
  159.        
  160.     public static List getTables(Connection c, String catalog, String schema, String tablePattern) throws SQLException {   
  161.         logger.debug("catalog='" + catalog + "'");   
  162.         logger.debug("schema='" + schema + "'");   
  163.         logger.debug("table='" + tablePattern + "'");   
  164.         DatabaseMetaData dmd = c.getMetaData();   
  165.         ResultSet rs = null;   
  166.         try {   
  167.             rs = dmd.getTables(catalog, schema, tablePattern, new String[] {"TABLE""VIEW""SYNONYM""ALIAS"} );   
  168.             List l= new LinkedList();   
  169.             while (rs.next()) {   
  170.                 l.add(rs.getString(3));   
  171.             }   
  172.             return l;   
  173.         }   
  174.         finally {   
  175.             if (rs != null) rs.close();   
  176.         }   
  177.     }   
  178.        
  179.     public static Set getForeignKeyColumns(Connection c, String catalog, String schema, String table) throws SQLException {   
  180.         logger.debug("catalog='" + catalog + "'");   
  181.         logger.debug("schema='" + schema + "'");   
  182.         logger.debug("table='" + table + "'");   
  183.         DatabaseMetaData dmd = c.getMetaData();   
  184.         ResultSet rs = null;   
  185.         try {   
  186.             rs = dmd.getImportedKeys(catalog, schema, table);   
  187.             HashSet columns = new HashSet();   
  188.             while (rs.next()) {   
  189.                 columns.add(rs.getString(8));   
  190.             }   
  191.             return columns;   
  192.         }   
  193.         finally {   
  194.             if (rs != null) rs.close();   
  195.         }   
  196.     }   
  197.        
  198.     public static List getPrimaryKeyColumns(Connection c, String catalog, String schema, String table) throws SQLException {   
  199.         logger.debug("catalog='" + catalog + "'");   
  200.         logger.debug("schema='" + schema + "'");   
  201.         logger.debug("table='" + table + "'");   
  202.         DatabaseMetaData dmd = c.getMetaData();   
  203.         ResultSet rs = null;   
  204.         try {   
  205.             rs = dmd.getPrimaryKeys(catalog, schema, table);   
  206.                
  207.             List pkColumns = new LinkedList();;   
  208.             while (rs.next()) {   
  209.                 List tmp = getTableColumns(c, catalog, schema, table, rs.getString(4));   
  210.                 Column pkColumn = (Column)tmp.get(0);   
  211.                 pkColumns.add(pkColumn);   
  212.             }   
  213.             return pkColumns;   
  214.         }   
  215.         finally {   
  216.             if (rs != null) rs.close();   
  217.         }   
  218.     }   
  219.        
  220.     public static List getTableColumns(Connection c, String catalog, String schema, String table) throws SQLException  {   
  221.         return getTableColumns(c, catalog, schema, table, null);   
  222.     }   
  223.        
  224.     public static List getTableColumns(Connection c, String catalog, String schema, String table, String columnPattern) throws SQLException {   
  225.         logger.debug("catalog='" + catalog + "'");   
  226.         logger.debug("schema='" + schema + "'");   
  227.         logger.debug("table='" + table + "'");   
  228.         logger.debug("column='" + columnPattern+ "'");   
  229.         DatabaseMetaData dmd = c.getMetaData();   
  230.         ResultSet rs = null;   
  231.         try {   
  232.             rs = dmd.getColumns(catalog, schema, table, columnPattern);   
  233.             List columns = new LinkedList();   
  234.             while (rs.next()) {   
  235.                 JDBCUtil.Column aCol = new JDBCUtil.Column();   
  236.                 aCol.sqlTypeName = rs.getString(6);   
  237.                 aCol.defalutValue = rs.getString(13);   
  238.                 aCol.name = rs.getString(4);   
  239.                 aCol.sqlType = rs.getShort(5);   
  240.                 aCol.sqlColumnLength=rs.getInt(7);   
  241.                 aCol.sqlDecimalLength=rs.getInt(9);   
  242.                 aCol.sqlNotNull = ("NO".equals(rs.getString(18)));   
  243.                 aCol.hibernateType = getHibernateType(   
  244.                     aCol.sqlType,   
  245.                     aCol.sqlColumnLength,   
  246.                     aCol.sqlDecimalLength   
  247.                 );   
  248.                 aCol.javaType = getJavaType(   
  249.                     aCol.sqlType,   
  250.                     aCol.sqlColumnLength,   
  251.                     aCol.sqlDecimalLength   
  252.                 );   
  253.                 columns.add(aCol);   
  254.             }   
  255.             return columns;   
  256.         }   
  257.         finally {   
  258.             if (rs != null) rs.close();   
  259.         }   
  260.            
  261.     }   
  262.        
  263.     public static NullableType getHibernateType(int sqlType, int columnSize, int decimalDigits) {   
  264.         logger.debug("sqlType=" + sqlType);   
  265.         logger.debug("columnSize=" + columnSize);   
  266.         logger.debug("decimalDigits=" + decimalDigits);   
  267.         NullableType rv=Hibernate.SERIALIZABLE;   
  268.         if (sqlType == Types.CHAR || sqlType == Types.VARCHAR) {   
  269.             rv = Hibernate.STRING;   
  270.         }   
  271.         else if (sqlType == Types.FLOAT || sqlType == Types.REAL) {   
  272.             rv = Hibernate.FLOAT;   
  273.         }   
  274.         else if (sqlType == Types.INTEGER) {   
  275.             rv = Hibernate.INTEGER;   
  276.         }   
  277.         else if (sqlType == Types.DOUBLE) {   
  278.             rv = Hibernate.DOUBLE;   
  279.         }   
  280.         else if (sqlType == Types.DATE) {   
  281.             rv = Hibernate.DATE;   
  282.         }   
  283.         else if (sqlType == Types.TIMESTAMP) {   
  284.             rv = Hibernate.TIMESTAMP;   
  285.         }   
  286.         else if (sqlType == Types.TIME) {   
  287.             rv = Hibernate.TIME;   
  288.         }   
  289.         // commented to support JDK version < 1.4   
  290.         /*      else if (sqlType == Types.BOOLEAN) {  
  291.             rv = Hibernate.BOOLEAN;  
  292.         } */  
  293.         else if (sqlType == Types.SMALLINT) {   
  294.             rv = Hibernate.SHORT;   
  295.         }   
  296.         else if (sqlType == Types.BIT) {   
  297.             rv = Hibernate.BYTE;   
  298.         }   
  299.         else if (sqlType == Types.BIGINT) {   
  300.             rv = Hibernate.LONG;   
  301.         }   
  302.         else if (sqlType == Types.NUMERIC || sqlType == Types.DECIMAL) {   
  303.             if (decimalDigits == 0) {   
  304.                 if (columnSize == 1) {   
  305.                     rv = Hibernate.BYTE;   
  306.                 }   
  307.                 else if (columnSize < 5) {   
  308.                     rv = Hibernate.SHORT;   
  309.                 }   
  310.                 else if (columnSize < 10) {   
  311.                     rv = Hibernate.INTEGER;   
  312.                 }   
  313.                 else {   
  314.                     rv = Hibernate.LONG;   
  315.                 }   
  316.             }   
  317.             else {   
  318.                 if (columnSize < 9) {   
  319.                     rv = Hibernate.FLOAT;   
  320.                 }   
  321.                 else {   
  322.                     rv = Hibernate.DOUBLE;   
  323.                 }   
  324.             }   
  325.         }   
  326.         return rv;   
  327.     }   
  328.        
  329.     public static Class getJavaType(int sqlType, int columnSize, int decimalDigits) {   
  330.         logger.debug("sqlType=" + sqlType);   
  331.         logger.debug("columnSize=" + columnSize);   
  332.         logger.debug("decimalDigits=" + decimalDigits);   
  333.         Class rv=String.class;   
  334.         if (sqlType == Types.CHAR || sqlType == Types.VARCHAR) {   
  335.             rv = String.class;   
  336.         }   
  337.         else if (sqlType == Types.FLOAT || sqlType == Types.REAL) {   
  338.             rv = Float.class;   
  339.         }   
  340.         else if (sqlType == Types.INTEGER) {   
  341.             rv = Integer.class;   
  342.         }   
  343.         else if (sqlType == Types.DOUBLE) {   
  344.             rv = Double.class;   
  345.         }   
  346.         else if (sqlType == Types.DATE) {   
  347.             //rv = java.util.Date.class;   
  348.             rv = String.class;   
  349.         }   
  350.         else if (sqlType == Types.TIMESTAMP) {   
  351.             //rv = java.util.Date.class;   
  352.             rv = String.class;   
  353.         }   
  354.         else if (sqlType == Types.TIME) {   
  355.             //rv = java.util.Date.class;   
  356.             rv = String.class;   
  357.         }   
  358.         // commented to support JDK version < 1.4   
  359.         /*      else if (sqlType == Types.BOOLEAN) {  
  360.             rv = Boolean.class;  
  361.         } */  
  362.         else if (sqlType == Types.SMALLINT) {   
  363.             rv = Short.class;   
  364.         }   
  365.         else if (sqlType == Types.BIT) {   
  366. //          rv = Byte.class;   
  367.             rv = Integer.class;   
  368.         }   
  369.         else if (sqlType == Types.BIGINT) {   
  370.             rv = Long.class;   
  371.         }   
  372.         else if (sqlType == Types.NUMERIC || sqlType == Types.DECIMAL) {   
  373.             if (decimalDigits == 0) {   
  374.                 if (columnSize == 1) {   
  375. //                  rv = Byte.class;   
  376.                     rv=  Integer.class;   
  377.                 }   
  378.                 else if (columnSize < 5) {   
  379.                     rv = Short.class;   
  380.                 }   
  381.                 else if (columnSize < 10) {   
  382.                     rv = Integer.class;   
  383.                 }   
  384.                 else {   
  385.                     rv = Long.class;   
  386.                 }   
  387.             }   
  388.             else {   
  389.                 if (columnSize < 9) {   
  390.                     rv = Float.class;   
  391.                 }   
  392.                 else {   
  393.                     rv = Double.class;   
  394.                 }   
  395.             }   
  396.         }   
  397.         return rv;   
  398.     }   
  399.   
  400. }  
/*
 * JDBCUtil.java
 *
 * Created on November 9, 2002, 4:27 PM
 */

package com.hyj.util;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.hibernate.Hibernate;
import net.sf.hibernate.type.NullableType;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 *
 * @author  Administrator
 */
public class JDBCUtil {
	private static final Log logger = LogFactory.getLog(JDBCUtil.class);
	public static class Column {
		public String name;
		public int sqlType;
		public int sqlColumnLength;
		public int sqlDecimalLength;
		public boolean sqlNotNull;
		public boolean sqlReadOnly;
		public NullableType hibernateType;
		public Class javaType;
		public String sqlTypeName;
		public String defalutValue;
		public boolean equals(Object o) {
			boolean rv = false;
			if (o != null && o instanceof JDBCUtil.Column) {
				rv = (name.equals(((JDBCUtil.Column)o).name));
			}
			return rv;
		}
		public int hashCode() {
			return (name != null) ? name.hashCode() : 0;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public NullableType getHibernateType() {
			return hibernateType;
		}
		public void setHibernateType(NullableType hibernateType) {
			this.hibernateType = hibernateType;
		}
		public Class getJavaType() {
			return javaType;
		}
		public void setJavaType(Class javaType) {
			this.javaType = javaType;
		}
		public int getSqlColumnLength() {
			return sqlColumnLength;
		}
		public void setSqlColumnLength(int sqlColumnLength) {
			this.sqlColumnLength = sqlColumnLength;
		}
		public int getSqlDecimalLength() {
			return sqlDecimalLength;
		}
		public void setSqlDecimalLength(int sqlDecimalLength) {
			this.sqlDecimalLength = sqlDecimalLength;
		}
		public boolean isSqlNotNull() {
			return sqlNotNull;
		}
		public void setSqlNotNull(boolean sqlNotNull) {
			this.sqlNotNull = sqlNotNull;
		}
		public boolean isSqlReadOnly() {
			return sqlReadOnly;
		}
		public void setSqlReadOnly(boolean sqlReadOnly) {
			this.sqlReadOnly = sqlReadOnly;
		}
		public int getSqlType() {
			return sqlType;
		}
		public void setSqlType(int sqlType) {
			this.sqlType = sqlType;
		}
		public String getSqlTypeName() {
			return sqlTypeName;
		}
		public void setSqlTypeName(String sqlTypeName) {
			this.sqlTypeName = sqlTypeName;
		}
		public String getDefalutValue() {
			return defalutValue;
		}
		public void setDefalutValue(String defalutValue) {
			this.defalutValue = defalutValue;
		}
		
		
	};
	
	public static List getCatalogs(Connection c) throws SQLException {
		DatabaseMetaData dmd = c.getMetaData();
		ResultSet rs = null;
		try {
			rs = dmd.getCatalogs();
			List l = new LinkedList();
			while (rs.next()) {
				l.add(rs.getString(1));
			}
			return l;
		}
		finally {
			if (rs != null) rs.close();
		}
	}
	
	public static Map getSchemas(Connection c) throws SQLException {
		DatabaseMetaData dmd = c.getMetaData();
		ResultSet rs = null;
		try {
			rs = dmd.getSchemas();
			Map map = new HashMap();
			List l;
			while (rs.next()) {
				String schema = rs.getString(1);
				String catalog = null;
				if (rs.getMetaData().getColumnCount() > 1) {
					catalog = rs.getString(2);
				};
				l = (List)map.get(catalog);
				if (l == null) {
					l = new LinkedList();
					map.put(catalog, l);
				}
				l.add(schema);
			}
			return map;
		}
		finally {
			if (rs != null) rs.close();
		}
	}
	
	public static List getTables(Connection c, String catalog, String schema, String tablePattern) throws SQLException {
		logger.debug("catalog='" + catalog + "'");
		logger.debug("schema='" + schema + "'");
		logger.debug("table='" + tablePattern + "'");
		DatabaseMetaData dmd = c.getMetaData();
		ResultSet rs = null;
		try {
			rs = dmd.getTables(catalog, schema, tablePattern, new String[] {"TABLE", "VIEW", "SYNONYM", "ALIAS"} );
			List l= new LinkedList();
			while (rs.next()) {
				l.add(rs.getString(3));
			}
			return l;
		}
		finally {
			if (rs != null) rs.close();
		}
	}
	
	public static Set getForeignKeyColumns(Connection c, String catalog, String schema, String table) throws SQLException {
		logger.debug("catalog='" + catalog + "'");
		logger.debug("schema='" + schema + "'");
		logger.debug("table='" + table + "'");
		DatabaseMetaData dmd = c.getMetaData();
		ResultSet rs = null;
		try {
			rs = dmd.getImportedKeys(catalog, schema, table);
			HashSet columns = new HashSet();
			while (rs.next()) {
				columns.add(rs.getString(8));
			}
			return columns;
		}
		finally {
			if (rs != null) rs.close();
		}
	}
	
	public static List getPrimaryKeyColumns(Connection c, String catalog, String schema, String table) throws SQLException {
		logger.debug("catalog='" + catalog + "'");
		logger.debug("schema='" + schema + "'");
		logger.debug("table='" + table + "'");
		DatabaseMetaData dmd = c.getMetaData();
		ResultSet rs = null;
		try {
			rs = dmd.getPrimaryKeys(catalog, schema, table);
			
			List pkColumns = new LinkedList();;
			while (rs.next()) {
				List tmp = getTableColumns(c, catalog, schema, table, rs.getString(4));
				Column pkColumn = (Column)tmp.get(0);
				pkColumns.add(pkColumn);
			}
			return pkColumns;
		}
		finally {
			if (rs != null) rs.close();
		}
	}
	
	public static List getTableColumns(Connection c, String catalog, String schema, String table) throws SQLException  {
		return getTableColumns(c, catalog, schema, table, null);
	}
	
	public static List getTableColumns(Connection c, String catalog, String schema, String table, String columnPattern) throws SQLException {
		logger.debug("catalog='" + catalog + "'");
		logger.debug("schema='" + schema + "'");
		logger.debug("table='" + table + "'");
		logger.debug("column='" + columnPattern+ "'");
		DatabaseMetaData dmd = c.getMetaData();
		ResultSet rs = null;
		try {
			rs = dmd.getColumns(catalog, schema, table, columnPattern);
			List columns = new LinkedList();
			while (rs.next()) {
				JDBCUtil.Column aCol = new JDBCUtil.Column();
				aCol.sqlTypeName = rs.getString(6);
				aCol.defalutValue = rs.getString(13);
				aCol.name = rs.getString(4);
				aCol.sqlType = rs.getShort(5);
				aCol.sqlColumnLength=rs.getInt(7);
				aCol.sqlDecimalLength=rs.getInt(9);
				aCol.sqlNotNull = ("NO".equals(rs.getString(18)));
				aCol.hibernateType = getHibernateType(
					aCol.sqlType,
					aCol.sqlColumnLength,
					aCol.sqlDecimalLength
				);
				aCol.javaType = getJavaType(
					aCol.sqlType,
					aCol.sqlColumnLength,
					aCol.sqlDecimalLength
				);
				columns.add(aCol);
			}
			return columns;
		}
		finally {
			if (rs != null) rs.close();
		}
		
	}
	
	public static NullableType getHibernateType(int sqlType, int columnSize, int decimalDigits) {
		logger.debug("sqlType=" + sqlType);
		logger.debug("columnSize=" + columnSize);
		logger.debug("decimalDigits=" + decimalDigits);
		NullableType rv=Hibernate.SERIALIZABLE;
		if (sqlType == Types.CHAR || sqlType == Types.VARCHAR) {
			rv = Hibernate.STRING;
		}
		else if (sqlType == Types.FLOAT || sqlType == Types.REAL) {
			rv = Hibernate.FLOAT;
		}
		else if (sqlType == Types.INTEGER) {
			rv = Hibernate.INTEGER;
		}
		else if (sqlType == Types.DOUBLE) {
			rv = Hibernate.DOUBLE;
		}
		else if (sqlType == Types.DATE) {
			rv = Hibernate.DATE;
		}
		else if (sqlType == Types.TIMESTAMP) {
			rv = Hibernate.TIMESTAMP;
		}
		else if (sqlType == Types.TIME) {
			rv = Hibernate.TIME;
		}
		// commented to support JDK version < 1.4
		/*      else if (sqlType == Types.BOOLEAN) {
			rv = Hibernate.BOOLEAN;
		} */
		else if (sqlType == Types.SMALLINT) {
			rv = Hibernate.SHORT;
		}
		else if (sqlType == Types.BIT) {
			rv = Hibernate.BYTE;
		}
		else if (sqlType == Types.BIGINT) {
			rv = Hibernate.LONG;
		}
		else if (sqlType == Types.NUMERIC || sqlType == Types.DECIMAL) {
			if (decimalDigits == 0) {
				if (columnSize == 1) {
					rv = Hibernate.BYTE;
				}
				else if (columnSize < 5) {
					rv = Hibernate.SHORT;
				}
				else if (columnSize < 10) {
					rv = Hibernate.INTEGER;
				}
				else {
					rv = Hibernate.LONG;
				}
			}
			else {
				if (columnSize < 9) {
					rv = Hibernate.FLOAT;
				}
				else {
					rv = Hibernate.DOUBLE;
				}
			}
		}
		return rv;
	}
	
	public static Class getJavaType(int sqlType, int columnSize, int decimalDigits) {
		logger.debug("sqlType=" + sqlType);
		logger.debug("columnSize=" + columnSize);
		logger.debug("decimalDigits=" + decimalDigits);
		Class rv=String.class;
		if (sqlType == Types.CHAR || sqlType == Types.VARCHAR) {
			rv = String.class;
		}
		else if (sqlType == Types.FLOAT || sqlType == Types.REAL) {
			rv = Float.class;
		}
		else if (sqlType == Types.INTEGER) {
			rv = Integer.class;
		}
		else if (sqlType == Types.DOUBLE) {
			rv = Double.class;
		}
		else if (sqlType == Types.DATE) {
			//rv = java.util.Date.class;
			rv = String.class;
		}
		else if (sqlType == Types.TIMESTAMP) {
			//rv = java.util.Date.class;
			rv = String.class;
		}
		else if (sqlType == Types.TIME) {
			//rv = java.util.Date.class;
			rv = String.class;
		}
		// commented to support JDK version < 1.4
		/*      else if (sqlType == Types.BOOLEAN) {
			rv = Boolean.class;
		} */
		else if (sqlType == Types.SMALLINT) {
			rv = Short.class;
		}
		else if (sqlType == Types.BIT) {
//			rv = Byte.class;
			rv = Integer.class;
		}
		else if (sqlType == Types.BIGINT) {
			rv = Long.class;
		}
		else if (sqlType == Types.NUMERIC || sqlType == Types.DECIMAL) {
			if (decimalDigits == 0) {
				if (columnSize == 1) {
//					rv = Byte.class;
					rv=  Integer.class;
				}
				else if (columnSize < 5) {
					rv = Short.class;
				}
				else if (columnSize < 10) {
					rv = Integer.class;
				}
				else {
					rv = Long.class;
				}
			}
			else {
				if (columnSize < 9) {
					rv = Float.class;
				}
				else {
					rv = Double.class;
				}
			}
		}
		return rv;
	}

}






 

 

 

分享到:
评论
1 楼 smilease 2016-06-09  
帮大忙了,非常感谢

相关推荐

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    开发者可以创建模板文件,定义类的结构和内容,然后Freemarker会根据提供的数据模型填充这些模板,生成最终的Java源代码。 2. **DTO(Data Transfer Object)**: DTO是一种设计模式,用于在不同系统或层之间传递...

    使用freemarker模版引擎自动生成java项目源代码.zip

    本项目以"使用FreeMarker模版引擎自动生成Java项目源代码"为主题,旨在展示如何利用FreeMarker自动化生成Java项目的源代码,以减少手动编写重复代码的工作量。 【描述】"Java项目源码" 这个项目包含的是使用...

    Java FreeMarker+Maven实现代码自动生成

    在Java项目中,FreeMarker 可以用来生成XML、HTML、Java源代码等。 1. **配置FreeMarker**:首先,你需要在你的Maven项目中添加FreeMarker的依赖。在`pom.xml`文件中,添加如下依赖: ```xml &lt;groupId&gt;org....

    基于Freemarker代码生成程序

    最后,运行代码生成程序,它将根据数据库表的结构和你选择的模板自动生成对应的源代码文件。 在压缩包文件"iiwii_generate"中,可能包含了以下内容: 1. Freemarker模板文件:这些文件定义了生成的类的结构和格式。...

    基于freemarker的JAVA代码生成工具

    "基于Freemarker的JAVA代码生成工具"就是这样一种实用的工具,它能够根据数据库中的表结构自动生成相应的Java源代码。 **Freemarker简介** Freemarker是一个强大的模板引擎,它支持动态语言,常用于生成HTML页面...

    Java代码自动生成 freemarker

    - **生成代码**:处理后的模板将生成最终的Java源代码,可以写入到文件系统,或者直接保存在内存中。 3. **提高代码质量** - **可读性**:FreeMarker模板使得代码生成逻辑与业务逻辑分离,代码更易读,因为模板...

    基于Freemarker模板的代码生成器工具

    在数据库表结构变化时,自动生成对应的Java实体类;还可以用于生成API文档、测试用例等。 总结,基于Freemarker模板的代码生成器工具是提升开发效率的有效手段,它结合了Freemarker的强大表达能力和Java的灵活性,...

    Java freemarker 模板生成word动态表格

    8. **src**:这个目录通常包含了Java源代码和FreeMarker模板文件。源代码中会有一个Java类负责处理数据模型,加载模板,以及生成Word文档。而模板文件(.ftl)则位于`src/main/resources`目录下,其中定义了Word文档...

    freemarker生成doc方案.pdf(内附代码下载地址)

    Freemarker是一个基于Java的模板引擎,可以用来生成文本输出(包括HTML网页、配置文件、源代码等)。它使用一种“模板+数据”的方式生成最终结果,因此特别适合于生成动态文档。Freemarker本身不依赖于外部框架,...

    代码自动生成

    代码自动生成是一个重要的软件开发技术,它通过自动化的方式根据预定义的规范或模板生成源代码,从而提高开发效率,减少人为错误。在IT行业中,代码自动生成被广泛应用于各种场景,如数据库映射代码、界面生成、框架...

    java 代码生成器(java开发,附加源代码)

    Java代码生成器是一种工具,它能够自动生成符合特定规范或模式的Java源代码,从而提高开发效率,减少重复性工作。这种工具通常基于模板引擎,允许开发者定义模板,然后根据输入的数据生成相应的代码片段。在Java开发...

    freemarker+itext生成PDF

    `src`则包含了源代码,可能包含了模板文件(`.ftl`)和Java代码,用于实现上述步骤。 为了实际操作,你需要理解FreeMarker的模板语言,比如 `${}` 用于输出变量,`&lt;#if&gt;` 和 `&lt;#foreach&gt;` 用于条件和循环等。同时,...

    j2ee代码生成器源代码

    6. **模板引擎**:代码生成器会使用模板引擎(如FreeMarker或Velocity)来动态生成源代码。模板文件定义了代码的结构和格式,可以通过修改模板来自定义生成的代码风格。 7. **配置和参数设置**:用户可以通过配置...

    freemaker代码生成工具

    2. 自动化代码生成:通过Freemarker,开发者可以创建一套模板,模板中定义了代码结构和格式,然后只需提供数据源,工具就能自动生成相应的代码。例如,对于`javabean`,可以设置字段名、类型、getter和setter方法等...

    java+Freemarker生成word

    在企业级应用中,这种技术尤其有用,因为它允许开发者根据数据库或其他数据源中的信息自动生成Word文档,无需手动编写。 Java是面向对象的编程语言,而Freemarker则是一个模板引擎,它主要用于生成文本输出,如HTML...

    autoCode java 项目代码 自动生成

    这涉及到Java反射机制、数据库操作(JDBC或者ORM框架如MyBatis)、以及可能的模板引擎技术(如FreeMarker或Velocity)来动态生成源代码。 在压缩包子文件的文件名"generate_code"中,我们可以推测它可能包含的是...

    自动生成代码

    1. **模板引擎**:例如Apache的FreeMarker或Velocity,它们允许开发者编写模板文件,然后用这些模板生成实际的源代码。模板文件包含了可替换的占位符,这些占位符会被运行时的数据替换。这种方式灵活且易于维护。 2...

Global site tag (gtag.js) - Google Analytics