您的位置:首页 > 编程语言 > Java开发

java 自动生成实体类工具,遇下划线大写

2015-07-01 15:13 435 查看
package com.common;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.util.Date;

/**

 * Entity Product

 * @author xdliu

 * 日期:2012-10-10

 */

public class MakeEntity {

 

 private String tablename = "cyw_shop_items";//表名

 private String[] colnames; // 列名数组

 private String[] colTypes; //列名类型数组

 private int[] colSizes; //列名大小数组

 private boolean f_util = false; // 是否需要导入包java.util.*

 private boolean f_sql = false; // 是否需要导入包java.sql.*

   

    //数据库连接

  private static final String URL ="数据库所在服务器地址如jdbc:mysql://192.168.0.1/database";

  private static final String name = "账户";

  private static final String password = "密码";

  private static final String DRIVER ="com.mysql.jdbc.Driver";

 /*

  * 构造函数

  */

 public MakeEntity(){

     //创建连接

     Connection con;

  //查要生成实体类的表

     String sql = "select * from " + tablename;

     PreparedStatement pStemt = null;

     try {

      try {

    Class.forName(DRIVER);

   } catch (ClassNotFoundException e1) {

    // TODO Auto-generated catch block

    e1.printStackTrace();

   }

      con = DriverManager.getConnection(URL,name,password);

   pStemt = con.prepareStatement(sql);

   ResultSetMetaData rsmd = pStemt.getMetaData();

   int size = rsmd.getColumnCount(); //统计列

   System.out.println(size);

   colnames = new String[size];

   colTypes = new String[size];

   colSizes = new int[size];

   for (int i = 0; i < size; i++) {

    colnames[i] = rsmd.getColumnName(i + 1);

    colTypes[i] = rsmd.getColumnTypeName(i + 1);

    

    if(colTypes[i].equalsIgnoreCase("datetime")){

     f_util = true;

    }

    if(colTypes[i].equalsIgnoreCase("image") || colTypes[i].equalsIgnoreCase("text")){

     f_sql = true;

    }

    colSizes[i] = rsmd.getColumnDisplaySize(i + 1);

   }

   

   String content = parse(colnames,colTypes,colSizes);

   System.out.println(content);

   try {

    File directory = new File("");

    //System.out.println("绝对路径:"+directory.getAbsolutePath());

    //System.out.println("相对路径:"+directory.getCanonicalPath());

    String path=this.getClass().getResource("").getPath();

    

    System.out.println(path);

    System.out.println("src/?/"+path.substring(path.lastIndexOf("/com/", path.length())) );

    FileWriter fw = new FileWriter(directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initcap(tablename) + ".java");

    PrintWriter pw = new PrintWriter(fw);

    pw.println(content);

    pw.flush();

    pw.close();

   } catch (IOException e) {

    e.printStackTrace();

   }

   

  } catch (SQLException e) {

   e.printStackTrace();

  } finally{

  }

    }

 /**

  * 功能:生成实体类主体代码

  * @param colnames

  * @param colTypes

  * @param colSizes

  * @return

  */

 private String parse(String[] colnames, String[] colTypes, int[] colSizes) {

  StringBuffer sb = new StringBuffer();

  //判断是否导入工具包

  if(f_util){

   sb.append("import java.util.Date;\r\n");

  }

  if(f_sql){

   sb.append("import java.sql.*;\r\n");

  }

  sb.append("package com.common;\r\n");

  sb.append("\r\n");

  //注释部分

  sb.append("   /**\r\n");

  sb.append("    * "+tablename+" 实体类\r\n");

  sb.append("    * "+new Date()+"  Ze Ming\r\n");

  sb.append("    */ \r\n");

  //实体部分

  sb.append("\r\n\r\npublic class " + initcap(tablename) + "{\r\n");

  processAllAttrs(sb);//属性

  processAllMethod(sb);//get set方法

  sb.append("}\r\n");

 

     //System.out.println(sb.toString());

  return sb.toString();

 }

 

 /**

  * 功能:生成所有属性

  * @param sb

  */

 private void processAllAttrs(StringBuffer sb) {

 

  for (int i = 0; i < colnames.length; i++) {

      colnames[i]=replaceUnderlineAndfirstToUpper(colnames[i],"_","");

//          colnames[i].replace("_", "");

   sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n");

  }

 

 }

 /**

  * 替换下划线并让下一个字母大写

  * @param srcStr

  * @param org

  * @param ob

  * @return

  */

 public static String replaceUnderlineAndfirstToUpper(String srcStr,String org,String ob)  

 {  

    String newString = "";  

    int first=0;  

    while(srcStr.indexOf(org)!=-1)  

    {  

     first=srcStr.indexOf(org);  

     if(first!=srcStr.length())  

     {  

      newString=newString+srcStr.substring(0,first)+ob;  

      srcStr=srcStr.substring(first+org.length(),srcStr.length());  

      srcStr=firstCharacterToUpper(srcStr);  

     }  

    }  

    newString=newString+srcStr;  

    return newString;  

 }  

 /**

 * 首字母大写

 *  

 * @param srcStr

 * @return

 */

public static String firstCharacterToUpper(String srcStr) {  

       return srcStr.substring(0, 1).toUpperCase() + srcStr.substring(1);  

    }

 /**

  * 功能:生成所有方法

  * @param sb

  */

 private void processAllMethod(StringBuffer sb) {

 

  for (int i = 0; i < colnames.length; i++) {

   sb.append("\tpublic void set" + initcap(colnames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " +

     colnames[i] + "){\r\n");

   sb.append("\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");

   sb.append("\t}\r\n");

   sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colnames[i]) + "(){\r\n");

   sb.append("\t\treturn " + colnames[i] + ";\r\n");

   sb.append("\t}\r\n");

  }

 

 }

 

 /**

  * 功能:将输入字符串的首字母改成大写

  * @param str

  * @return

  */

 private String initcap(String str) {

  str = replaceUnderlineAndfirstToUpper(str,"_","");

  char[] ch = str.toCharArray();

  if(ch[0] >= 'a' && ch[0] <= 'z'){

   ch[0] = (char)(ch[0] - 32);

  }

 

  return new String(ch);

 }

 /**

  * 功能:获得列的数据类型

  * @param sqlType

  * @return

  */

 private String sqlType2JavaType(String sqlType) {

 

  if(sqlType.equalsIgnoreCase("bit")){

   return "boolean";

  }else if(sqlType.equalsIgnoreCase("tinyint")){

   return "byte";

  }else if(sqlType.equalsIgnoreCase("smallint")){

   return "short";

  }else if(sqlType.equalsIgnoreCase("int")){

   return "int";

  }else if(sqlType.equalsIgnoreCase("bigint")){

   return "long";

  }else if(sqlType.equalsIgnoreCase("float")){

   return "float";

  }else if(sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("numeric")

    || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money")

    || sqlType.equalsIgnoreCase("smallmoney")){

   re
4000
turn "double";

  }else if(sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")

    || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")

    || sqlType.equalsIgnoreCase("text")){

   return "String";

  }else if(sqlType.equalsIgnoreCase("datetime")){

   return "Date";

  }else if(sqlType.equalsIgnoreCase("image")){

   return "Blod";

  }

 

  return null;

 }

 

 /**

  * 出口

  * TODO

  * @param args

  */

 public static void main(String[] args) {

  System.err.println(11);

  new MakeEntity();

 

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: