ITPub博客

首页 > 应用开发 > Java > 单表增删改查界面的模板

单表增删改查界面的模板

原创 Java 作者:壹頁書 时间:2015-11-13 20:34:55 0 删除 编辑
最近有个事情比较搞笑.
客户端研发比较托大.测试环境的数据录入,他们居然不管.让需求录入数据.
需求也很苦闷.
正所谓当仁不让,这点事情对于本猫来说不算困难.

使用freemaker 2.3.23
(2.2.8这个版本会出现各种奇怪的错误)

JAVA代码
主要是获取数据库中表的元数据,包括所有的字段名称和类型,以及主键的信息.删除和更新要依靠主键信息.
  1. package org.sqlserver;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6. import java.sql.Connection;  
  7. import java.sql.DatabaseMetaData;  
  8. import java.sql.DriverManager;  
  9. import java.sql.ResultSet;  
  10. import java.sql.SQLException;  
  11. import java.util.ArrayList;  
  12. import java.util.HashMap;  
  13. import java.util.List;  
  14. import java.util.Map;  
  15.   
  16. import freemarker.template.Configuration;  
  17. import freemarker.template.Template;  
  18. import freemarker.template.TemplateException;  
  19.   
  20. public class Main {  
  21.   
  22.     public static void main(String[] args) throws IOException, TemplateException, SQLException, ClassNotFoundException {  
  23.   
  24.         String catalog = "boss";  
  25.         String schema = "dbo";  
  26.         String table = "t_group_effect_range_fireworks";  
  27.         String basepackage = "org.sqlserver";  
  28.         String className = "EffectFireWorks";  
  29.   
  30.         String basepath = Main.class.getClass().getResource("/").getPath();  
  31.         basepath = basepath.replaceAll("build/classes/", "");  
  32.   
  33.         Template javaTemp = getTemplate("ManagerTemplate.ftl");  
  34.         Template htmlTemp = getTemplate("HTMLTemplate.ftl");  
  35.         List list = getMetadata(catalog, schema, table);  
  36.         List primaryKey = getPrimaryKey(list);  
  37.         Map rootMap = new HashMap();  
  38.         rootMap.put("package", basepackage + "." + className.toLowerCase());  
  39.         rootMap.put("classname", className);  
  40.         rootMap.put("tablename", catalog + "." + schema + "." + table);  
  41.         rootMap.put("primaryKey", primaryKey);  
  42.         rootMap.put("keys", list);  
  43.         String targetJavaDir = basepath + "src/" + basepackage.replaceAll("\\.", "/") + "\\" + className.toLowerCase()  
  44.                 + "/";  
  45.         new File(targetJavaDir).mkdirs();  
  46.         FileWriter writer = new FileWriter(targetJavaDir + className + ".java");  
  47.         javaTemp.process(rootMap, writer);  
  48.         writer.flush();  
  49.         writer.close();  
  50.   
  51.         writer = new FileWriter(basepath + "WebContent/" + className.toLowerCase() + ".html");  
  52.         htmlTemp.process(rootMap, writer);  
  53.         writer.flush();  
  54.         writer.close();  
  55.     }  
  56.   
  57.     public static Template getTemplate(String name) throws IOException {  
  58.         Configuration cfg = new Configuration();  
  59.         cfg.setDirectoryForTemplateLoading(new File(Main.class.getClass().getResource("/").getPath()));  
  60.         Template temp = cfg.getTemplate(name);  
  61.         temp.setEncoding("utf-8");  
  62.         return temp;  
  63.     }  
  64.   
  65.     private static List getPrimaryKey(List list) {  
  66.         List primaryKey = new ArrayList();  
  67.         for (Column c : list) {  
  68.             if (c.isPrimaryKey()) {  
  69.                 primaryKey.add(c);  
  70.             }  
  71.         }  
  72.         return primaryKey;  
  73.     }  
  74.   
  75.     private static List getMetadata(String catalog, String schema, String tableName)  
  76.             throws ClassNotFoundException, SQLException {  
  77.         Connection con = getConnection();  
  78.         DatabaseMetaData m = con.getMetaData();  
  79.           
  80.         ResultSet rs = m.getColumns(catalog, schema, tableName, null);  
  81.         List list = new ArrayList();  
  82.         while (rs.next()) {  
  83.             Column col = new Column();  
  84.             col.setName(rs.getString("COLUMN_NAME"));  
  85.             col.setType(rs.getString("TYPE_NAME"));  
  86.             list.add(col);  
  87.         }  
  88.         rs.close();  
  89.         rs = m.getPrimaryKeys(catalog, schema, tableName);  
  90.         while (rs.next()) {  
  91.             String primarykeyColumn = rs.getString("COLUMN_NAME");  
  92.             for (Column col : list) {  
  93.                 if (primarykeyColumn.equals(col.getName())) {  
  94.                     col.setPrimaryKey(true);  
  95.                 }  
  96.             }  
  97.         }  
  98.         rs.close();  
  99.         return list;  
  100.     }  
  101.   
  102.     private static Connection getConnection() throws SQLException, ClassNotFoundException {  
  103.         String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  
  104.         String dbURL = "jdbc:sqlserver://127.0.0.1:3306;DatabaseName=roomdb";  
  105.         String userName = "sa";  
  106.         String userPwd = "sa";  
  107.         Class.forName(driverName);  
  108.         Connection dbConn = DriverManager.getConnection(dbURL, userName, userPwd);  
  109.         dbConn.setAutoCommit(false);  
  110.         return dbConn;  
  111.     }  
  112. }  

ITPUB对于泛型显示不出来,所以上面的代码,会报错.
需要修改为List《Column》

封装元数据的类
  1. package org.sqlserver;  
  2.   
  3. public class Column {  
  4.     private String name = "";  
  5.     private String type = "";  
  6.     private boolean isPrimaryKey = false;  
  7.   
  8.     @Override  
  9.     public String toString() {  
  10.         return this.name + "," + this.type + "," + this.isPrimaryKey;  
  11.     }  
  12.   
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.   
  17.     public void setName(String name) {  
  18.         this.name = name;  
  19.     }  
  20.   
  21.     public String getType() {  
  22.         return type;  
  23.     }  
  24.   
  25.     public void setType(String type) {  
  26.         this.type = type;  
  27.     }  
  28.   
  29.     public boolean isPrimaryKey() {  
  30.         return isPrimaryKey;  
  31.     }  
  32.   
  33.     public void setPrimaryKey(boolean isPrimaryKey) {  
  34.         this.isPrimaryKey = isPrimaryKey;  
  35.     }  
  36.   
  37. }  


Servlet的模板 ManagerTemplate.ftl
HTML的模板  HTMLTemplate.ftl
HTMLTemplate.zip


界面使用了jQuery和EasyUI
也是第一次使用freemaker
模板生成之后,直接刷新Eclipse运行即可.
当然文字方面,可能还需要做细节的微调.
不过可以保证一个新建的表,10分钟之内,就可以有一个带简单增删改查的界面.


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1837431/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339995