欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何通過反射方式生成數(shù)據(jù)庫實體類

 更新時間:2023年12月07日 17:07:06   作者:DegenerateAng  
這篇文章主要介紹了Java如何通過反射方式生成數(shù)據(jù)庫實體類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

如何通過反射生成數(shù)據(jù)庫實體類

我這里使用的數(shù)據(jù)庫是mysql,我需要在java項目中創(chuàng)建數(shù)據(jù)庫所有表的實體類;

下面我就說一下實現(xiàn)過程:

生成數(shù)據(jù)庫實體類步驟

1、創(chuàng)建數(shù)據(jù)庫連接

2、獲取數(shù)據(jù)庫表

3、構(gòu)建StringBuffer緩存

4、獲取數(shù)據(jù)庫表中字段名、字段類型、字段注釋

5、寫入文件

6、關(guān)閉連接、輸入流等等

創(chuàng)建連接路徑

private static String username =root
private static String url=jdbc\:log4jdbc\:mysql\://localhost\:3306/gjj
private static String password=scott
private static String driver=net.sf.log4jdbc.DriverSpy

public static Connection getConnection(){
        Connection con=null;
        try {
            Class.forName(driver);
            con=DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return con;
    }

連接數(shù)據(jù)庫并且調(diào)用獲取數(shù)據(jù)庫方法

private static Connection coon=null;
    public static void main(String[] args) {
        try {
            //建立數(shù)據(jù)連接
            coon=DBUtil.getConnection();

            //調(diào)用方法
            getTableNameByCon(coon);
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    } 

獲取數(shù)據(jù)庫名稱,表名,列屬性,進(jìn)行拼接

public static void getTableNameByCon(Connection con) throws SQLException {
        PrintWriter printWriter=null;
           try {  
           DatabaseMetaData meta = con.getMetaData();  //連接數(shù)據(jù)庫
           ResultSet rs = meta.getTables(null, null, null,new String[] { "TABLE" });//獲取數(shù)據(jù)庫表名
           while (rs.next()) {
             System.out.println("表名:" + rs.getString(3));
             //所需生成實體類的文件路徑
             File tableName=new File("D:/JavaWorkspaces/MyEclipseWeb/2019/src/po/"+rs.getString(3)+".java");
                //輸出
                 Writer writer=new FileWriter(tableName);
                printWriter=new PrintWriter(writer);
                //寫入文件
                 printWriter.println("package po;\r\n");//所在包
                 printWriter.println("public class "+rs.getString(3)+"{");
                 
                 //查詢表sql
                 String sql="select * from "+rs.getString(3);
                 //創(chuàng)建一個語句對象,用于向數(shù)據(jù)庫發(fā)送SQL語句
                 Statement stmt=coon.createStatement();

                 //向數(shù)據(jù)庫發(fā)送SQL語句
                 ResultSet rs1=stmt.executeQuery(sql); 
                 //檢索此ResultSet對象的列的數(shù)量、類型和屬性。
                 ResultSetMetaData rsmd = rs1.getMetaData(); 
                 //ResultSet對象的列數(shù),即表的字段數(shù)
                 int count=rsmd.getColumnCount();
                 for (int i = 1; i <= count; i++) {
                //獲取ResultSet對象列名
                String name = rsmd.getColumnName(i);
                //獲取ResultSet對象列的類型
                String type=rsmd.getColumnTypeName(i);    
                System.out.println(type);
                //首字母小寫
                name=name.substring(0, 1).toLowerCase() + name.substring(1);
                //判斷類型輸出成員變量
                if (type.equals("INT")||type.equals("SMALLINT")) {
                printWriter.println("        private int" +" "+name+";");

                 //datatime我也給string類型,mysql對類型的轉(zhuǎn)換很強(qiáng),可以把string類型轉(zhuǎn)換datatime直接存儲進(jìn)行
                }else if (type.equals("CHAR")||type.equals("VARCHAR")||type.equals("DATETIME")) {
                    printWriter.println("        private String" +" "+name+";");
                }else if (type.equals("BIT")) {
                    printWriter.println("        private boolean" +" "+name+";");
                }else if (type.equals("DOUBLE")) {
                    printWriter.println("        private double" +" "+name+";");
                }else if (type.equals("FLOAT")) {
                    printWriter.println("        private float" +" "+name+";");
                }else {
                    printWriter.println("        private 自行定義" +" "+name+";");
                }
            }
             printWriter.println("}");
             printWriter.flush();//刷新流,必寫
           }
           con.close();  
           } catch (Exception e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();
           }finally{
               //關(guān)閉流
               printWriter.close();

               //關(guān)閉數(shù)據(jù)庫連接
               coon.close();
           }
        }  

下面是運行結(jié)果:

數(shù)據(jù)庫可以看到有個自行定義,故意加的,如果在類型判斷的時候沒有對應(yīng)上的它就直接給個自行定義,讓它報異常就可以知道那個字段出問題了,所以最好就加上;

如果沒有它可以對應(yīng)是的類型它是不會把這個字段寫入文件中,也不會報異常,就不知道有沒有少字段;

注意:不同的數(shù)據(jù)庫獲取的類型可能不一樣,所以只建議參考

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合MongoDB實現(xiàn)文件上傳下載刪除

    SpringBoot整合MongoDB實現(xiàn)文件上傳下載刪除

    這篇文章主要介紹了SpringBoot整合MongoDB實現(xiàn)文件上傳下載刪除的方法,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-05-05
  • Java多線程中的Phaser詳解

    Java多線程中的Phaser詳解

    這篇文章主要介紹了Java多線程中的Phaser詳解,Pahser是一個可以重復(fù)使用的同步屏障,Phaser是按照不同階段執(zhí)行線程的,它本身維護(hù)著一個叫 phase 的成員變量代表當(dāng)前執(zhí)行的階段,需要的朋友可以參考下
    2023-11-11
  • Java Synchronized字節(jié)碼層分析體驗

    Java Synchronized字節(jié)碼層分析體驗

    這篇文章主要介紹了Java Synchronized字節(jié)碼層分析,synchronized關(guān)鍵字解決了多個線程之間的資源同步性,synchronized關(guān)鍵字保證了它修飾的方法或者代碼塊任意時刻只有一個線程在訪問
    2023-04-04
  • Java8 stream 中利用 groupingBy 進(jìn)行多字段分組求和案例

    Java8 stream 中利用 groupingBy 進(jìn)行多字段分組求和案例

    這篇文章主要介紹了Java8 stream 中利用 groupingBy 進(jìn)行多字段分組求和案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java獲取鏈接上的參數(shù)三種方法舉例

    Java獲取鏈接上的參數(shù)三種方法舉例

    在Java中,我們經(jīng)常需要從URL鏈接中獲取參數(shù),下面這篇文章主要給大家介紹了關(guān)于Java如何獲取鏈接上參數(shù)的三種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Spring?Boot?配置文件類型properties?格式與yml?格式

    Spring?Boot?配置文件類型properties?格式與yml?格式

    這篇文章主要介紹了Spring?Boot?配置文件類型properties?格式與yml?格式,文章圍繞主題展開詳細(xì)內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 教你如何輕松學(xué)會Java快慢指針法

    教你如何輕松學(xué)會Java快慢指針法

    要想把搬磚的效率提高,我們肯定是逃不掉數(shù)據(jù)結(jié)構(gòu)和算法知識的,這不,可愛的小編今天就和大家一起學(xué)習(xí)來了,今天給大家分享的是快慢指針,那啥是快慢指針呢,文中有非常詳細(xì)的解釋,需要的朋友可以參考下
    2021-06-06
  • ?java中Thread.sleep()的具體使用

    ?java中Thread.sleep()的具體使用

    本文主要介紹了?java中Thread.sleep()的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Web容器啟動過程中如何執(zhí)行Java類

    Web容器啟動過程中如何執(zhí)行Java類

    這篇文章主要介紹了Web容器啟動過程中如何執(zhí)行Java類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • java WebSocket實現(xiàn)聊天消息推送功能

    java WebSocket實現(xiàn)聊天消息推送功能

    這篇文章主要為大家詳細(xì)介紹了java WebSocket實現(xiàn)聊天消息推送功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評論