前段时间我在使用hibernate的时候突然想到一个问题:我经常要对数据库中某条记录中的某个字段读取后进行判断,一般正规的操作流程是先使用session.get方法读取这条记录,并将其保存进一个hibernate实体中,然后从实体中获取我所需要的字段进行比较。
但是如果操作实在是繁琐,于是我在想如何能写一个通用方法,可以直接读取我所需某个表中的某个字段。但是当初尝试了几种方法都无法实现。最麻烦的地方是,因为我在调用该方法前该方法是不知道我需要实现的实体是哪个,也不知道获取的字段是哪个,也就是说程序需要动态的调用某个类和某个方法。后面由于工作比较紧张这个问题就搁置下来了。
就在昨天我了解了下java的反射机制,它能够将传统的编译时所做的工作放到运行时处理。利用这个技术我发现可以很容易的解决我当初那个问题。
我举个例子:假如我要通过hibernate从user表中读取name字段,传统做法是
//......
User user = session.get(User.class,user.getId());
String name =user.getName();
//.......
这样做的麻烦在于如果我要读取Class表中的ClassName字段的话,那所有的代码都得从写,代码的复用率就很低了。
现在我们采用java的反射技术写一个通用方法来解决这个问题
//.....
/**
* @param clazz类,serializable主键,methodName方法名
* @return 字段的值
* @throws Exception
*/
public Object findHQLByField(Class cla
利用java反射机制实现动态向下转型
最新推荐文章于 2022-07-26 00:20:58 发布