动态表单: beanUtil
动态表单: beanUtil | ![]() |
|
在apache.org有一个project:common-beanutil,非常好的一个操作javabean的工具类库.它可以拷贝-复制bean的属性,也可以生成dyna Bean. 在动态表单中,我需要从xml定义文件中生成table DDL和每个table对应的javabean.我能从html文件直接生成定义好的表单定义xml文件.然后利用这个xml文件生成ddl和dynabean. 我创建了一个Builder类,Builder类负责生成table ddl和dynaBean: publilc interface Builder { public String buildCreatedDDL(String[] systemId) throws SQLException; public String buildDroppableDDL(String[] systemId) throws SQLException; public DynaBean buildDynaBean(String[] systemId) throws SQLException; } 在Builder的实现中,我使用Xml pull parser来对xml文件进行解释.ddl和bean其实结构是一致的.我之所以需要bean,也就是与持久层对应起来,简化对数据库的操作.生成ddl其实只是一种实现方式,我也可以直接生成hbm.xml文件,然后通过hibernate来生成数据库模式. beanUtil在生成dyanbean起了重要的作用,表的每个字段对应bean的一个属性dyna properties,dynaClass中可以存储这些属性,然后通过dynaClass.newInstance可以生成dynaBean: List list = new ArrayList(); public void processStartElement() { //处理每一个element String name = xpp.getName(); if ("text".equals(name)) list.add(new DynaProperties(tableName,String.class)); } 我想,生成hbm.xml来创建数据库模式应该是一种更好的方式,这样有以下两大优点: 1)充分利用了hibernate强大的O/R mapping功能 2)省去了创建ddl时必需的table's field type的转化工作 当然Builder接口需要适当的改变.只是我现在还不知道,hibernate是否一定需要entity与hbm.xml对应?采用dyna entity能否与hibernate集成?这还需要继续探索. |