读书人

利用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的实现类来处理这个操作,这些操作对于大家来说都是熟悉的不能在熟悉了。

利用cglib给javabean动态平添属性、问题:当进行多个表进行连接的操作时候,如:

  • 、现在说说解决方法:

    你可以在进行查询结果的时候,为你联合查询出来的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>??

    ?

  • 读书人网 >编程

    热点推荐