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 楊一. 版權所有. 保留所有權利