<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tbwshc

    反射機制在JDBC連接中的使用

    1、數據庫當中的表設計



     

    2、對應數據表的實體Bean (id為主鍵)

     

     

     

    Java代碼  
    1. public class EnginConfigVO {   
    2.     int id = 0;   
    3.     int THREADS_COUNT;   
    4.   
    5.     /**  
    6.      * @return the id  
    7.      */  
    8.     public int primaryGetId() {   
    9.         return id;   
    10.     }   
    11.     /**  
    12.      * @param id the id to set  
    13.      */  
    14.     public void primarySetId(int id) {   
    15.         this.id = id;   
    16.     }   
    17.     /**  
    18.      * @return the tHREADS_COUNT  
    19.      */  
    20.     public int getTHREADS_COUNT() {   
    21.         return THREADS_COUNT;   
    22.     }   
    23.   
    24.     /**  
    25.      * @param tHREADS_COUNT the tHREADS_COUNT to set  
    26.      */  
    27.     public void setTHREADS_COUNT(int tHREADS_COUNT) {   
    28.         THREADS_COUNT = tHREADS_COUNT;   
    29.     }   
    30. }  

    由于沒有像hibernate那樣的注解機制,所以只能在主鍵的setter和getter方法上動動手腳primaryGetId() ,primarySetId(int id)

     

    而實體bean的類名在與數據表的匹配上最后多了“vo” 兩個字母,所以在tb下面方法中將這兩個字母剪裁掉。

     

    反射方法: 

    T o 對應的就是實體Bean,這樣的方法當然是寫在DAO層中,供上層的service調用,傳入需要修改的實體Bean

     

     

    Java代碼  
    1. public <T> void updatePropertiesValues(T o) {   
    2.         StringBuilder sd = new StringBuilder("update ");   
    3.         sd.append(o.getClass().getSimpleName().toLowerCase().substring(0, o.getClass().getSimpleName().length()-2)).append(" ");   
    4.         sd.append("set ");   
    5.         StringBuilder id = new StringBuilder("where ");   
    6.         try {   
    7.             for(Method m : o.getClass().getDeclaredMethods()) {   
    8.                 String name = m.getName();   
    9.                 if (name.startsWith("get")) {   
    10.                     sd.append(name.substring(3).toLowerCase()).append("=");   
    11.                     if(m.invoke(o) instanceof String) {   
    12.                         sd.append("'").append(m.invoke(o)).append("', ");   
    13.                     }else {   
    14.                         sd.append(m.invoke(o)).append(", ");   
    15.                     }   
    16.                 }   
    17.                 if(name.startsWith("primaryGet")) {   
    18.                     id.append(name.substring(10).toLowerCase()).append("=");   
    19.                     if(m.invoke(o) instanceof String) {   
    20.                         id.append("'").append(m.invoke(o)).append("';");   
    21.                     }else {   
    22.                         id.append(m.invoke(o)).append(";");   
    23.                     }   
    24.                 }   
    25.             }   
    26.             sd.delete(sd.length()-2, sd.length());   
    27.             sd.append(" ");   
    28.             sd.append(id);   
    29.         } catch (IllegalArgumentException e) {   
    30.             e.printStackTrace();   
    31.         } catch (IllegalAccessException e) {   
    32.             e.printStackTrace();   
    33.         } catch (InvocationTargetException e) {   
    34.             e.printStackTrace();   
    35.         }   
    36.            
    37.         executeTrans(sd.toString());   
    38.            
    39.     }  

     這樣以后便可以拼湊出完整的sql語句,為我們解決了功能相似代碼的冗余。。

     

    另外在查找時,我們還可以利用發射機制,將數據庫返回的resultset 對象包裝成List<T>

    Java代碼  
    1. public static <T> List<T> getObjectsList(ResultSet rs, Class<T> k)   
    2.             throws SQLException {   
    3.         List<T> bl = new ArrayList<T>();   
    4.         if (rs != null) {   
    5.             while (rs.next()) {   
    6. //              System.out.println("result is not null");   
    7.                 T o = null;   
    8.                 try {   
    9.                     o = k.newInstance();   
    10.                     for (Method m : k.getDeclaredMethods()) {   
    11.                         String name = m.getName();   
    12.                         if (name.startsWith("set")) {   
    13. //                          System.out.println(rs.getObject(name.substring(3)).getClass().getName());   
    14.                             m.invoke(o, rs.getObject(name.substring(3)));   
    15.                         }   
    16.                     }   
    17.                     bl.add(o);   
    18.                 } catch (InstantiationException e) {   
    19.                     e.printStackTrace();   
    20.                 } catch (IllegalAccessException e) {   
    21.                     e.printStackTrace();   
    22.                 } catch (IllegalArgumentException e) {   
    23.                     e.printStackTrace();   
    24.                 } catch (InvocationTargetException e) {   
    25.                     e.printStackTrace();   
    26.                 }   
    27.             }   
    28.             return bl;   
    29.         }   
    30.         return null;   
    31.     }  

    這樣,我們就可以從底層直接獲得包裝好的List<T>集合。。不足之處,歡迎大家討論。。 

    posted on 2012-08-03 17:30 chen11-1 閱讀(917) 評論(0)  編輯  收藏

    主站蜘蛛池模板: www永久免费视频| 牛牛在线精品观看免费正| 久久国产乱子伦精品免费一 | 午夜时刻免费入口| 亚洲va在线va天堂成人| 亚洲第一成年免费网站| 亚洲三级高清免费| 国产成人免费永久播放视频平台| 亚洲精品美女久久久久久久| 国产在线不卡免费播放| 深夜免费在线视频| 亚洲av无码专区国产乱码在线观看| 中文字幕乱码一区二区免费| 久久夜色精品国产噜噜亚洲AV| 2021国产精品成人免费视频| 亚洲精品无码不卡在线播放| 国产精品久免费的黄网站| 人妻18毛片a级毛片免费看| 亚洲精品乱码久久久久66| 91成人在线免费视频| 国产91在线|亚洲| 亚洲福利精品电影在线观看| 最新久久免费视频| 亚洲字幕在线观看| 又爽又黄无遮挡高清免费视频| 国产成人无码区免费内射一片色欲 | 亚洲男女一区二区三区| 日本人的色道免费网站| 欧美日韩亚洲精品| 亚洲成AV人片在线观看无| 国产免费爽爽视频在线观看| 亚洲乱码在线视频| avtt亚洲天堂| 国产精品99精品久久免费| 亚洲人配人种jizz| 国产成人亚洲精品影院| 国产精品爱啪在线线免费观看| 在线播放亚洲精品| 亚洲国产精品久久久久| 免费a级毛片大学生免费观看| 青柠影视在线观看免费|