狂奔 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 杨一 阅读(488) 评论(0)  编辑  收藏 所属分类: Java EE


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

公告

本人在blogjava上发表的文章及随笔除特别声明外均为原创或翻译,作品受知识产权法保护并被授权遵从 知识分享协议:署名-非商业性使用-相同方式共享 欢迎转载,请在转载时注明作者姓名(杨一)及出处(www.blogjava.net/yangyi)
/////////////////////////////////////////
我的访问者

常用链接

留言簿(5)

随笔分类(55)

随笔档案(55)

相册

Java

其他技术

生活

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

自强不息


用心 - 珍惜时间,勇于创造