1. 程式人生 > >數據庫表直接生成Java實體類

數據庫表直接生成Java實體類

dep script urn rac getclass direct time unicode auto

代碼如下:

package com.nagios.info.entity;


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.chinaoly.utils.DateFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
 * @author cunxp
 * @Description
 * @date 2018-01-09 下午4:34
 */


public class CodeProduct {
    private String packageOutPath = "com.nagios.info.entity";//指定實體生成所在包的路徑
    private static String authorName = "cunxp";//作者名字
    private String tablename = "nagios_hoststatus";//表名

    //數據庫連接
    private static final String URL ="jdbc:mysql://192.168.16.84:3306/nagios?useUnicode=true&characterEncoding=UTF8";
    private static final String NAME = "root";
    private static final String PASS = "chinaoly";
    private static final String DRIVER ="com.mysql.jdbc.Driver";



    /*
     * 構造函數
     */
    public CodeProduct(){
        //創建連接
        Connection con;
        //查要生成實體類的表
        String sql = "show full columns from " + tablename;
        PreparedStatement pStemt = null;
        try {
            try {
                Class.forName(DRIVER);
            } catch (ClassNotFoundException e1) {
                e1.printStackTrace();
            }
            con = DriverManager.getConnection(URL,NAME,PASS);
            pStemt = con.prepareStatement(sql);
            ResultSet rs = pStemt.executeQuery();
            List<ColumnEntity> list=new ArrayList<>();
            while (rs.next()){
                ColumnEntity ce=new ColumnEntity();
                ce.setName(rs.getString("Field"));
                String type = rs.getString("Type");
                ce.setDataType(parseType(type));
                list.add(ce);
            }
            String content = parse(list);

            try {
                File directory = new File("");
                String path=this.getClass().getResource("").getPath();
                //System.out.println(path);
//              String outputPath = directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initcap(tablename) + ".java";
                String outputPath = directory.getAbsolutePath()+ "/src/main/java/"+this.packageOutPath.replace(".", "/")+"/"+replaceUnderlineAndfirstToUpper(tablename.toLowerCase(),"_","")+".java";
                File file=new File(outputPath);
                System.out.println("----------->"+outputPath);
                if(!file.exists()){
                    file.createNewFile();
                }
                FileWriter fw = new FileWriter(outputPath);
                PrintWriter pw = new PrintWriter(fw);
                pw.println(content);
                pw.flush();
                pw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
//          try {
//              con.close();
//          } catch (SQLException e) {
//              // TODO Auto-generated catch block
//              e.printStackTrace();
//          }
        }
    }


    private String parse(List<ColumnEntity> list) {
        StringBuffer sb = new StringBuffer();
        sb.append("package " + this.packageOutPath + ";\r\n");
        //tablename=replaceUnderlineAndfirstToUpper(tablename.toLowerCase(),"_","");
        importPackage(sb,this.packageOutPath+"."+initcap(tablename));
        //註釋部分
        infoMsg(sb,tablename+"實體類");
        //實體部分
        sb.append("@Entity\r\n");
        sb.append("@Table(name = \""+tablename+"\")\r\n");
        sb.append("public class " + replaceUnderlineAndfirstToUpper(tablename.toLowerCase(),"_","")
                +" implements Serializable"+"{\r\n");
        sb.append("\tprivate static final long serialVersionUID = 1L;\r\n");
        sb.append("\r\n");
        addElement(sb,list);
        sb.append("}\r\n");

        return sb.toString();
    }
    /**
     * 導入包
     *@title
     *@date 2014-10-17
     *@author ZhengYunfei
     * @param sb
     */
    public static void importPackage(StringBuffer sb,String tablename){
        sb.append("\r\n");
        sb.append("import javax.persistence.Column;\r\n");
        sb.append("import javax.persistence.Entity;\r\n");
        sb.append("import javax.persistence.Id;\r\n");
        sb.append("import javax.persistence.Table;\r\n");
        sb.append("import java.io.Serializable;\r\n");
        sb.append("import java.util.Date;\r\n");
        sb.append("\r\n");
    }


    public static void addElement(StringBuffer sb,List<ColumnEntity> list){
        for (ColumnEntity ce:list) {
            sb.append("\t@Column(name = \""+ce.getName()+"\")\r\n");
            sb.append("\tprivate "+ce.getDataType()+" "+ce.getName()+";\r\n");
            sb.append("\r\n");
        }
    }
    /**
     * 自動生成註釋
     *@title
     *@date 2014-10-17
     *@author ZhengYunfei
     */
    public static void infoMsg(StringBuffer sb,String msg){
        sb.append("/**\r\n");
        sb.append("*@author "+authorName+"\r\n");
        sb.append("*@Description "+msg+"\r\n");
        sb.append("*@date "+ DateFormatUtil.getStringByDate()+"\r\n");
        sb.append("*/\r\n");
        sb.append("\r\n");
    }
    /**
     * 首字母大寫
     *
     * @param srcStr
     * @return
     */
    public static String firstCharacterToUpper(String srcStr) {
        return srcStr.substring(0, 1).toUpperCase() + srcStr.substring(1);
    }
    /**
     * 替換字符串並讓它的下一個字母為大寫
     * @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=firstCharacterToUpper(newString+srcStr);
        return newString;
    }


    /**
     * 功能:將輸入字符串的首字母改成大寫
     * @param str
     * @return
     */
    private static 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);
    }

    private static String parseType(String type) {
        if(type.toLowerCase().contains("int")){
            return "Integer";
        }
        if(type.toLowerCase().contains("varchar")){
            return "String";
        }
        if(type.toLowerCase().contains("datetime")){
            return "Date";
        }
        if(type.toLowerCase().contains("text")){
            return "String";
        }
        if(type.toLowerCase().contains("double")){
            return "Double";
        }
        return null;
    }

    private class ColumnEntity{
        private String name;
        private String dataType;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getDataType() {
            return dataType;
        }

        public void setDataType(String dataType) {
            this.dataType = dataType;
        }
    }

    /**
     * 出口
     * TODO
     * @param args
     */
    public static void main(String[] args) {

        new CodeProduct();

    }
}

  參考鏈接  參考博客中生成的其實是serviceimpl文件不是實體類,不過可以參考。

數據庫表直接生成Java實體類