隨筆-35  評論-97  文章-0  trackbacks-0

          在某些情況下,我們可能需要同一個實體bean對應著多個數據庫表,比如,你的數據庫表是按照每個月添加一個,但是對應的實體bean并沒有改變。這個時候,我們就需要支持表明變換了,否則,難道你每個月改變一下orm映射配置嗎?如果每天都換一個表呢?

          在EasyDBO上,要做到支持表名變換是很容易的。只需在使用各種數據庫操作時添加一個表名稱的的變量(按照一定的算法產生),如原來的easyDB.add(object)變為easyDB.add(object, tablename)。

          在具體的實現上,我們應該從哪里入手去替換表名呢?看看EasyDBO的源碼,保存有數據庫表名稱的是在DBTable這個類中,其中name就是指數據庫表名,利用setter方法,很容易植入數據庫表名。但是在哪個時機植入比較合適?當然選取盡可能可以減少重復代碼就可以完成的時機。

          看看吧,在信息轉換為DBTable對象時,再重新植入表名,就可以了。在EasyDB類中,方法private DBTable findTable(Class cls)會從類或對象中獲取信息包裝成DBTable對象,所以這是關鍵的地方。private DBObject obj2dbo(Object obj)和其他的方法都直接或者間接調findTable(Class cls)來獲取表信息。做一些小改動就可以了,最好是添加一個重載的方法,而不是修改原來的方法。修改添加兩個樣板,其他方法也差不多是這樣:

              private DBTable findTable(Class cls, String tableName)
              
          {
                  
          if(!StringUtils.hasText(tableName)){
                      
          return findTable(cls);
                  }

                  DBTable table 
          = this.mapping.findTable(cls);
                  table.setName(tableName);
                  
          return table;
              }


              
          private DBObject obj2dbo(Object obj, String tableName)
              
          {
                  
          if(!StringUtils.hasText(tableName)){
                      
          return obj2dbo(obj);
                  }

                  
          /**
                   * 若obj本來就是泛數據表DBOjbect對象,則直接返回
                   
          */

                  
          if(obj.getClass() == DBObject.class)
                  
          {
                      
          return (DBObject)obj;
                  }

                  DBTable table 
          = findTable(obj.getClass(),tableName);
                  DBObject dbo 
          = new DBObject(table);
                  dbo.setValue(obj2dboMap(obj, table));
                  dbo.setIdValue(dbo.get(table.getId()));
                  
          return dbo;
              }

          給出修改后的EasyDB類的源碼,在這里下載。

           

          posted on 2007-07-06 10:42 三告習習 閱讀(968) 評論(2)  編輯  收藏 所屬分類: easyJF-projects

          評論:
          # re: [EasyDBO] EasyDBO添加支持數據庫表名(表結構不變)變換功能 2007-07-16 20:53 | 小雨
          這個方法還真好用,以前沒這樣用過。  回復  更多評論
            
          # re: [EasyDBO] EasyDBO添加支持數據庫表名(表結構不變)變換功能 2007-07-16 21:09 | 三告習習
          @小雨
          呵呵,過獎咯
          因為需要,湊用一下而已

            回復  更多評論
            
          主站蜘蛛池模板: 罗甸县| 兴隆县| 宁津县| 呼伦贝尔市| 大竹县| 九台市| 咸丰县| 阜康市| 略阳县| 岗巴县| 伊宁市| 安西县| 阳东县| 怀集县| 晋城| 砚山县| 巴林左旗| 南和县| 孝感市| 邢台市| 隆子县| 绥芬河市| 伊金霍洛旗| 平利县| 张家口市| 商丘市| 吴川市| 汉沽区| 即墨市| 泾源县| 阿合奇县| 高淳县| 卢氏县| 安仁县| 南乐县| 会昌县| 全南县| 大城县| 略阳县| 昌乐县| 乌拉特后旗|