狂奔 lion

          自強不息

          如何應用Hibernate在運行期獲取屬性的值

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

          /**
           * 獲取指定bean的指定字段的值
           
          */
          public class BeanUtils {
              
          private BeanUtils(){}
              
              
          /**
               * 根據beanName和列名字獲取hql語句
               * 
          @param beanName
               * 
          @param columnNames
               * 
          @return 以list形式返回數據的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 獲取到的域對象
               * 
          @param fieldName 欲獲取值的字段名
               * 
          @return 字段在當前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);
              }
          }
          按照已經處理后,我們就可以既應用Hibernate對象訪問的優點,又不損失字符串的靈活性,代碼中應用了Hibernate的select特性及java的反射機制


           @2008 楊一. 版權所有. 保留所有權利

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

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

          導航

          公告

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

          常用鏈接

          留言簿(5)

          隨筆分類(55)

          隨筆檔案(55)

          相冊

          Java

          其他技術

          生活

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          自強不息


          用心 - 珍惜時間,勇于創造
          主站蜘蛛池模板: 二连浩特市| 永德县| 方山县| 康保县| 呈贡县| 剑阁县| 平和县| 浪卡子县| 辉县市| 定西市| 正蓝旗| 嘉禾县| 万州区| 集贤县| 蚌埠市| 颍上县| 翁源县| 章丘市| 淮南市| 衡阳县| 全南县| 大同市| 河间市| 合水县| 岳西县| 莒南县| 芮城县| 宽城| 宁津县| 三穗县| 涪陵区| 三江| 灌云县| 来宾市| 西畴县| 北川| 汽车| 高密市| 扬中市| 康平县| 凌源市|