狂奔 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

          其他技術

          生活

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          自強不息


          用心 - 珍惜時間,勇于創造
          主站蜘蛛池模板: 霍邱县| 云浮市| 石阡县| 临江市| 锦屏县| 临夏县| 登封市| 佛学| 江川县| 连江县| 铜梁县| 镇沅| 招远市| 山西省| 砀山县| 连江县| 巨野县| 息烽县| 石门县| 博客| 醴陵市| 孝感市| 龙岩市| 栖霞市| 高唐县| 奉贤区| 喀喇沁旗| 富锦市| 家居| 宜阳县| 顺昌县| 兴海县| 广元市| 宿松县| 噶尔县| 文化| 桂平市| 秦安县| 巢湖市| 枣阳市| 惠东县|