快速开发 生成实体类(一)

首先将连接各种数据库的jar包放进项目中
这里写图片描述
这里写图片描述
一 Mysql数据库连接类
package cn.jbit.entity;

import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.text.SimpleDateFormat;

public class GenEntityMysql {

private String packageOutPath = "cn.jbit.entity";//指定实体生成所在包的路径  
private String authorName = "任锯东";//作者名字  
private String tablename = "book";//数据库表名  
private String[] colnames; // 列名数组  
private String[] colTypes; //列名类型数组  
private int[] colSizes; //列名大小数组  
private boolean f_util = false; // 是否需要导入包java.util.*  
private boolean f_sql = false; // 是否需要导入包java.sql.*  

//Mysql数据库连接
private static final String driver = "com.mysql.jdbc.Driver";// 数据库驱动字符串
private static final String url = "jdbc:mysql://localhost:3306/struts2?useUnicode=true&characterEncoding=utf8";// 连接URL字符串 student指mysql里新建数据库名
private static final String user = "root";// 数据库用户名
private static final String password = "root";// 用户密码
private Connection conn=null;
private PreparedStatement pstmt=null;
private ResultSet rs=null;
//创建数据库连接
public Connection getConnection(){

    try {
        Class.forName(driver);
        conn = DriverManager.getConnection(url, user, password);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
    return conn;
}
//关闭数据库连接
public void closeAll(ResultSet rs,PreparedStatement pstmt,Connection conn){

    try {
        if(rs!=null){
            rs.close();
        }
        if(pstmt!=null){
            pstmt.close();
        }
        if(conn!=null){
            conn.close();
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
}
/* 
 * 构造函数 
 */  
public GenEntityMysql(){

    try { 
        //打开数据库连接 
        conn = getConnection();
        String sql = "select * from " + tablename;  
        pstmt = conn.prepareStatement(sql);  
        rs = pstmt.executeQuery();
        ResultSetMetaData rsmd = rs.getMetaData();  
        int size = rsmd.getColumnCount();   //统计列  
        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);  

        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("/cn/", path.length())) );  
            // String outputPath = directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initcap(tablename) + ".java";  
            String outputPath = directory.getAbsolutePath()+ "/src/"+this.packageOutPath.replace(".", "/")+"/"+initcap(tablename) + ".java";  
            FileWriter fw = new FileWriter(outputPath);  
            PrintWriter pw = new PrintWriter(fw);  
            pw.println(content);  
            pw.flush();  
            pw.close();  
        } catch (Exception e) {  
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
            e.printStackTrace();  
        }  

    } catch (Exception e) {  
        // TODO Auto-generated catch block
        System.out.println(e.getMessage());
        e.printStackTrace();  
    } finally{  
        closeAll(rs, pstmt, conn);//关闭数据库连接 
    }  
}  

/** 
 * 功能:生成实体类主体代码 
 * @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 " + this.packageOutPath + ";\r\n");  
    sb.append("\r\n");  
    //注释部分
    sb.append("/**\r\n");
    sb.append(" * "+"@author "+this.authorName+"  "+initcap(tablename)+"实体(Entity)类\r\n");
    sb.append(" * "+"@date "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis())+"\r\n");
    sb.append(" */");
    //实体部分
    sb.append("\r\npublic class " + initcap(tablename) + "{\r\n");
    sb.append("\r\n");
    processAllAttrs(sb);//属性
    sb.append("\r\n");
    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++) {  
        sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n");  
    }  

}  

/** 
 * 功能:生成所有方法 
 * @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) {  

    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 "Integer";  
    }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")){  
        return "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 "String";  
}  

/** 
 * 出口 
 * TODO 
 * @param args 
 */  
public static void main(String[] args) {
    // TODO Auto-generated method stub

    long startTime = System.currentTimeMillis();//开始时间  返回以毫秒为单位的当前时间。注意,当返回值的时间单位是毫秒时,值的粒度取决于底层操作系统,并且粒度可能更大。
    System.out.println("------->>>开始时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(startTime));
    new GenEntityMysql();  
    long endTime = System.currentTimeMillis();//结束时间
    System.out.println("------->>>结束时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(startTime));
    long execTime=endTime-startTime;
    System.out.println("------->>>所用时间:"+execTime+" ms");
}  

}
“`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战神丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值