1. 程式人生 > >程式碼自動生成(-)資料庫表字段轉換成java bean

程式碼自動生成(-)資料庫表字段轉換成java bean

最近做系統老做一些相同的工作,就想寫一自動生成程式碼的工具類來方便以後的開法,我從網上整理修改了一些方法感覺還不錯,接下來我還陸續跟新一些
自動生成程式碼的工具類,希望對大家有用。覺得不好輕點噴。
import java.io.BufferedWriter;  
import java.io.File;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.ResultSetMetaData;  
import java.sql.SQLException;  
import java.util.Vector;  
  
public class reflectBean {  
    private Connection connection;  
    private PreparedStatement UserQuery;  
    /*mysql url的連線字串*/  
    private static String url = "jdbc:mysql://127.0.0.1:3306/wechat?useUnicode=true&characterEncoding=UTF-8";  
    //賬號  
    private static String user = "root";  
    //密碼  
    private static String password = "123456";  
    private Vector<String> vector = new Vector<String>();  
    //mysql jdbc的java包驅動字串  
    private String driverClassName = "com.mysql.jdbc.Driver";  
    //資料庫中的表名  
    String table = "orderList";  
    //資料庫的列名稱  
    private String[] colnames; // 列名陣列  
    //列名型別陣列    
    private String[] colTypes;  
    public reflectBean(){  
        try {//驅動註冊  
            Class.forName(driverClassName);  
            if (connection == null || connection.isClosed())  
                //獲得連結  
                connection = DriverManager.getConnection(url, user, password);  
        } catch (ClassNotFoundException ex) {  
                ex.printStackTrace();  
                System.out.println("Oh,not");  
            } catch (SQLException e) {  
                e.printStackTrace();  
                System.out.println("Oh,not");  
            }  
    }  
      
    public Connection getConnection() {  
        return connection;  
    }  
    public void setConnection(Connection connection) {  
        this.connection = connection;  
    }  
  
    public void doAction(){  
        String sql = "select * from "+table;  
        try {  
            PreparedStatement statement = connection.prepareStatement(sql);  
            //獲取資料庫的元資料   
            ResultSetMetaData metadata = statement.getMetaData();  
            //資料庫的欄位個數  
            int len = metadata.getColumnCount();  
            //欄位名稱  
            colnames = new String[len+1];  
            //欄位型別 --->已經轉化為java中的類名稱了  
            colTypes = new String[len+1];  
            for(int i= 1;i<=len;i++){  
                //System.out.println(metadata.getColumnName(i)+":"+metadata.getColumnTypeName(i)+":"+sqlType2JavaType(metadata.getColumnTypeName(i).toLowerCase())+":"+metadata.getColumnDisplaySize(i));  
                //metadata.getColumnDisplaySize(i);  
                colnames[i] = metadata.getColumnName(i); //獲取欄位名稱  
                System.out.println(colnames[i]);
                colTypes[i] = sqlType2JavaType(metadata.getColumnTypeName(i)); //獲取欄位型別   
                System.out.println(metadata.getColumnTypeName(i));
                System.out.println(colTypes[i]);
            }  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
    /* 
     * mysql的欄位型別轉化為java的型別*/  
    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")){    
            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") ||sqlType.equalsIgnoreCase("date")){    
            return "Date";    
        }else if(sqlType.equalsIgnoreCase("image")){    
            return "Blod";    
        }else if(sqlType.equalsIgnoreCase("timestamp")){    
            return "Timestamp";    
        }    
            
        return null;    
    }  
    /*獲取整個類的字串並且輸出為java檔案 
     * */  
    public  StringBuffer getClassStr(){  
        //輸出的類字串  
        StringBuffer str = new StringBuffer("");  
        //獲取表型別和表名的欄位名  
        this.doAction();  
        //校驗  
        if(null == colnames && null == colTypes) return null;  
        //拼接  
        str.append("public class "+GetTuoFeng(table)+" {\r\n");  
        //拼接屬性  
        for(int index=1; index < colnames.length ; index++){  
            str.append(getAttrbuteString(colnames[index],colTypes[index]));  
        }  
        //拼接get,Set方法         
        for(int index=1; index < colnames.length ; index++){  
            str.append(getGetMethodString(colnames[index],colTypes[index]));  
            str.append(getSetMethodString(colnames[index],colTypes[index]));  
        }  
        str.append("}\r\n");  
        //輸出到檔案中  
        File file = new File("E:/mengwx/【原始碼】mysql版本_spring4.0/FHMYSQL/src/com/fh/entity/"+GetTuoFeng(table)+".java");  
        BufferedWriter write = null;  
  
        try {  
            write = new BufferedWriter(new FileWriter(file));  
            write.write(str.toString());  
            write.close();  
        } catch (IOException e) {  
  
            e.printStackTrace();  
            if (write != null)  
                try {  
                    write.close();  
                } catch (IOException e1) {            
                    e1.printStackTrace();  
                }  
        }  
        return str;  
    }  
    /* 
     * 獲取欄位字串*/  
    public StringBuffer getAttrbuteString(String name, String type) {  
        if(!check(name,type)) {  
            System.out.println("類中有屬性或者型別為空");  
            return null;  
        };  
        String format = String.format("    private %s %s;\n\r", new String[]{type,name});  
        return new StringBuffer(format);  
    }  
    /* 
     * 校驗name和type是否合法*/  
    public boolean check(String name, String type) {  
        if("".equals(name) || name == null || name.trim().length() ==0){  
            return false;  
        }  
        if("".equals(type) || type == null || type.trim().length() ==0){  
            return false;  
        }  
        return true;  
          
    }  
    /* 
     * 獲取get方法字串*/  
    private StringBuffer getGetMethodString(String name, String type) {  
        if(!check(name,type)) {  
            System.out.println("類中有屬性或者型別為空");  
            return null;  
        };  
        String Methodname = "get"+GetTuoFeng(name);  
        String format = String.format("    public %s %s(){\n\r", new Object[]{type,Methodname});  
        format += String.format("        return this.%s;\r\n", new Object[]{name});  
        format += "    }\r\n";  
        return new StringBuffer(format);  
    }  
    //將名稱首字元大寫  
    private String GetTuoFeng(String name) {  
        name = name.trim();  
        if(name.length() > 1){  
            name = name.substring(0, 1).toUpperCase()+name.substring(1);  
        }else  
        {  
            name = name.toUpperCase();  
        }  
        return name;  
    }  
    /* 
     * 獲取欄位的get方法字串*/  
    private Object getSetMethodString(String name, String type) {  
        if(!check(name,type)) {  
            System.out.println("類中有屬性或者型別為空");  
            return null;  
        };  
        String Methodname = "set"+GetTuoFeng(name);  
        String format = String.format("    public void %s(%s %s){\n\r", new Object[]{Methodname,type,name});  
        format += String.format("        this.%s = %s;\r\n", new Object[]{name,name});  
        format += "    }\r\n";  
        return new StringBuffer(format);  
    }  
  
    public static void main(String[] args) {  
        reflectBean bean = new reflectBean();  
        System.err.println(bean.getClassStr());  
    }  
      
}  

相關推薦

程式碼自動生成-資料庫表字轉換java bean

最近做系統老做一些相同的工作,就想寫一自動生成程式碼的工具類來方便以後的開法,我從網上整理修改了一些方法感覺還不錯,接下來我還陸續跟新一些自動生成程式碼的工具類,希望對大家有用。覺得不好輕點噴。import java.io.BufferedWriter; import

程式碼自動生成資料庫表字生成mybaties 對映配置檔案**mapper.xml

上一篇寫的是根據資料庫欄位生成java bean,雖然有一些缺陷,但是大家可以根據字的需求進行優化,本篇部落格寫的是根據資料庫表字段生成mybaties 對映配置檔案**mapper.xml,之後還會陸續更新mybaties對應的介面。歡迎大家來點評,指出不足之處。 下面

Mybatis -程式碼自動生成generatorConfig.xml配置資訊詳解

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1

學習中資料庫表字命名規範

原文連結:https://www.cnblogs.com/pangguoming/p/7126512.html   一、資料庫命名規範 採用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上下劃線'_'組成,命名簡潔明確,多個單詞用下劃線'_'分隔,一個專案一個數據

Mybatis最入門---程式碼自動生成generatorConfig.xml配置

第一種方式:通過Main方法執行配置檔案。 -------------------------------------------------------------------------------------------------------------------------------------

Mybatis -程式碼自動生成generatorConfig.xml

對於一個欄位太多的表,如果一個一個的去寫 mapper和pojo太累還容易出錯,可用mybatis的工具處理這些事情 1. 環境: Maven 3.39 Oracle 11g Mybatis 3.4.1 Maven project

程式碼自動生成

在上兩篇文章中講述瞭如何使用freemarker生成程式碼的方法,在第二篇的程式碼中存在幾個ftl格式的檔案,那麼在這篇文章中將貼出來對應的程式碼; 本來是打算在上一篇中完善好直接放上去的,中間因為牽涉到程式碼的變動,以及對應生成mybatis  mapper.xml整合的

實現一個程式碼自動生成:模板引擎Freemarker

目錄 前言 模板引擎FreeMarker 模板引擎是什麼? FreeMarker是什麼? FreeMarker如何使用? 加入依賴 建立Configuratio

hotcss.js如何利用sass自動生成css,快速讓px轉換rem

hotcss配合flexable佈局,可以讓移動端佈局開發更容易。 根據ui設定的字型px不用通過計算自動轉換成rem,遵循視覺一致性原則。在不同大小的螢幕和不同的裝置畫素密度下,讓你的頁面看起來

Word報告自動生成例如 匯出資料庫結構

        將很早之前寫的一個小元件重新整理優化一下,做成一個通用的功能。適用於匯出資料庫的結構(表、欄位等)到Word或將體檢資料自動生成Word版的體檢報告等。程式碼:Github 一、主要需要完成功能: 1. 靈活的配置規則及word樣式設定(文字、表格、

spring boot 整合 mybatis程式碼自動生成

環境簡介:Idea ,JDK8,MAVEN 開工: 第一步建立專案 第二步選擇maven依賴 第三步,補充自己需要用到的maven依賴(通過工具沒法自動完成的) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="

Spring Boot MyBatis程式碼自動生成和輔助外掛

一、簡介 1.1 MyBatis Generator介紹 MyBatis Generator 是MyBatis 官方出品的一款,用來自動生成MyBatis的 mapper、dao、entity 的框架,讓我們省去規律性最強的一部分最基礎的程式碼編寫。 1.2 MyBatis Generator使用 MyBat

mybaits查詢與別名、日誌框架顯示sql語句、物件屬性和資料庫表字不匹配resultMap使用、mysql資料查詢分頁、執行sql和儲存過程、動態SQL語句

主要是各種配置檔案,建議把整個專案搬到自己電腦上慢慢看。 建立maven專案 首先是各種配置檔案: pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

mybatis-generator程式碼快速自動生成已經寫好程式碼給你了

mybatis-generator程式碼快速自動生成: 沒有實習之前寫的MyBatis的Mapping.XML都是手寫的,實習老大教了如何快速利用mybatis-generator程式碼自動生成工具來快速書寫xml,現在分享給大家。 1.首先,我先建立一個stu

程式碼自動生成工具-Csv讀表程式碼自動生成工具

之前提到了自定義的Csv格式的表格讀取的一個工具類CsvReader 這裡我們實現一個可以對任意符合我們人為規定的格式的Csv檔案,自動生成其對應的讀表程式碼 本工具需要boost庫支援,本人用的是1.55.0 這裡首先定義Csv中支援的幾種列型別:FieldType:

maven專案自動生成程式碼mybatis-generator 程式碼自動生成

1.本地安裝maven,配置好環境變數 2.在專案下的jdbc檔案中引用相關mapper外掛:(拷貝以下程式碼,修改相關路徑) jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?

Ibatis程式碼自動生成工具——Abator安裝與應用例項圖解

使用也比較簡單,以下做個例項來介紹: 一、環境準備 我的環境:Eclipse SDK  Version: 3.5.2                JDK1.6                Oracle9i 二、外掛安裝 1、點選"Help>In

[轉]python 程式碼自動生成的方法 程式碼生成器

遇到的問題 工作中遇到這麼一個事,需要寫很多C++的底層資料庫類,但這些類大同小異,無非是增刪改查,如果人工來寫程式碼,既費力又容易出錯;而借用python的程式碼自動生成,可以輕鬆搞定; (類比JAVA中的Hibernate自動生成的資料庫底層操作程式碼

Mybatis最入門---代碼自動生成generatorConfig.xml配置

pack ces war map serial file 用戶名 clip 英文 第一種方式:通過Main方法執行配置文件。 --------------------------------------------------------------------------

【原創】Hibernate自動生成2

成了 OS class 項目重構 alt index AS url 改名 本實戰是博主初次學習Java,分析WCP源碼時,學習HibernateTools部分的實戰,由於初次接觸,難免錯誤,僅供參考,希望批評指正。 開發環境: Eclipse Version: Photo