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 字段在當前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)處理后,我們就可以既應用Hibernate對象訪問的優(yōu)點,又不損失字符串的靈活性,代碼中應用了Hibernate的select特性及java的反射機制

]]>