狂奔 lion

          自強(qiáng)不息

          如何應(yīng)用Hibernate在運(yùn)行期獲取屬性的值

          Hibernate根據(jù)配置文件從數(shù)據(jù)庫中把關(guān)系型的數(shù)據(jù)以對象的形式挖掘出來,那么假如我有一個Table控件,可以放置展現(xiàn)任何的表結(jié)構(gòu),如何在運(yùn)行期做到把數(shù)據(jù)載入呢?Hibernate已經(jīng)把數(shù)據(jù)讀成對象的形式,就注定沒有JDBC一般靈活,為次可以通過編寫如下的兩個工具方法來實現(xiàn):
          import java.lang.reflect.Method;

          /**
           * 獲取指定bean的指定字段的值
           
          */
          public class BeanUtils {
              
          private BeanUtils(){}
              
              
          /**
               * 根據(jù)beanName和列名字獲取hql語句
               * 
          @param beanName
               * 
          @param columnNames
               * 
          @return 以list形式返回數(shù)據(jù)的hql語句
               
          */
              
          public static String getHql(String beanName, String[] columnNames){
                  StringBuffer sb 
          = new StringBuffer();
                  sb.append(
          "select new list(");
                  StringBuffer columnString 
          = new StringBuffer();
                  
          for(int i=0,len=columnNames.length;i<len;i++){
                      columnString.append(
          ",");
                      columnString.append(columnNames[i]);
                  }
                  sb.append(columnString.substring(
          1));
                  sb.append(
          ") from ");
                  
          if(Character.isUpperCase(beanName.charAt(0)))
                      sb.append(beanName);
                  
          else
                      sb.append(upperFirstChar(beanName));
                  
          return sb.toString();
              }
              
          /**
               * 
          @param bean 獲取到的域?qū)ο?br />      * @param fieldName 欲獲取值的字段名
               * 
          @return 字段在當(dāng)前bean封裝下的值
               
          */
              
          public static Object getFieldByName(Object bean, String fieldName){
                  
          try {
                      Method m 
          = bean.getClass().getMethod("get"+upperFirstChar(fieldName), null);
                      
          return m.invoke(bean, null);
                  } 
          catch (Exception e) {
                      e.printStackTrace();
                  }
                  
          return null;
              }
              
          private static String upperFirstChar(String orig){
                  
          return Character.toUpperCase(orig.charAt(0)) + orig.substring(1);
              }
          }
          按照已經(jīng)處理后,我們就可以既應(yīng)用Hibernate對象訪問的優(yōu)點(diǎn),又不損失字符串的靈活性,代碼中應(yīng)用了Hibernate的select特性及java的反射機(jī)制


           @2008 楊一. 版權(quán)所有. 保留所有權(quán)利

          posted on 2006-08-04 13:39 楊一 閱讀(514) 評論(0)  編輯  收藏 所屬分類: Java EE

          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          公告

          本人在blogjava上發(fā)表的文章及隨筆除特別聲明外均為原創(chuàng)或翻譯,作品受知識產(chǎn)權(quán)法保護(hù)并被授權(quán)遵從 知識分享協(xié)議:署名-非商業(yè)性使用-相同方式共享 歡迎轉(zhuǎn)載,請在轉(zhuǎn)載時注明作者姓名(楊一)及出處(www.aygfsteel.com/yangyi)
          /////////////////////////////////////////
          我的訪問者

          常用鏈接

          留言簿(5)

          隨筆分類(55)

          隨筆檔案(55)

          相冊

          Java

          其他技術(shù)

          生活

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          自強(qiáng)不息


          用心 - 珍惜時間,勇于創(chuàng)造
          主站蜘蛛池模板: 布尔津县| 松原市| 城固县| 崇州市| 鹤峰县| 安康市| 铁岭县| 安阳市| 宝丰县| 防城港市| 巴东县| 焦作市| 铜山县| 南郑县| 监利县| 遂昌县| 唐山市| 沂源县| 化隆| 恩平市| 邢台县| 沂水县| 康乐县| 泰安市| 巴楚县| 山阴县| 武平县| 方城县| 成都市| 台南县| 营口市| 临邑县| 临海市| 安化县| 义乌市| 舒兰市| 江华| 凌云县| 郑州市| 浮山县| 本溪|