利用cglib给javabean动态平添属性
发布时间: 2012-08-21 13:00:22 作者: rapoo
利用cglib给javabean动态添加属性
cglib22下载地址:http://115.com/file/anfoloem#cglib.rar
不知道大家有没有遇到过这样的需求 ,就java运行的时候 动态给你java对象添加属性,
?
有的时候 比如你用的是hibernate或者Spring jdbc 来做dao层进行数据库相关的操作的时候,若果是单表的操作的时候 还比较简单 hibernate可直接返回(get,load)你的需要的po,spring3可以用rowmapper的实现类来处理这个操作,这些操作对于大家来说都是熟悉的不能在熟悉了。
、问题:当进行多个表进行连接的操作时候,如:
、现在说说解决方法:你可以在进行查询结果的时候,为你联合查询出来的Object 动态添加你查出来的属性;
下面来说一下具体的代码:
此时需要你需要cglib-nodep-2.2.jar,自己google下载
DynamicBean.java
??
??????????????????????}??????????????????????}??????????????beanMap.put(property,?value);??????}????????????????}????????????????}???????????????BeanGenerator?generator?=??????????????generator.addProperty(key,?(Class)?propertyMap.get(key));????????}??????????????} ?测试类:
??????????????????propertyMap.put(??????????propertyMap.put(??????????propertyMap.put(??????????????????DynamicBean?bean?=???????????????????bean.setValue(??????????bean.setValue(????????????????????System.out.println(??????????System.out.println(??????????System.out.println(??????????????????Object?object?=?bean.getObject();????????????????????Method[]?methods?=?clazz.getDeclaredMethods();??????????????????????System.out.println(methods[i].getName());???????????}??????} ??
在这里在举一个spring jdbc中查询多个表 ,返回一个动态bean的例子:
首先是你在用spring3 jdbc进行查询的时候 这时候你想返回一个对象 此时你一般的做法是:
String?sql=<p>里面我们会用前面的DynamicBean.java</p><p></p><pre?name=
??????????????????????????DynamicBean?dyBean??=????????????????????HashMap?propertyMap?=?????????????????String?column?=?JdbcUtils.lookupColumnName(rsmd,?index);??????????????????String?propertyName?=?JdbcUtils.convertUnderscoreNameToPropertyName(column);??????????????????propertyMap.put(propertyName,?Object.????????????dyBean?=?????????????????String?column?=?JdbcUtils.lookupColumnName(rsmd,?index);??????????????????String?propertyName?=?JdbcUtils.convertUnderscoreNameToPropertyName(column);??????????????????Object?value?=?JdbcUtils.getResultSetValue(rs,?index);??????????????????dyBean.setValue(propertyName,?value);????????????}??????????}????????????????????????}??调用的时候:
String?sql=????????????????????????????????</tr>?</c:forEach>???