根据属性名称,请问如何动态匹配java类的set方法

[code="java"]


张三
18
……


LILY
18
……

……

[/code]

[code="java"]
public calss Users{
private String username;
private Integer age;
……
public void setUsername(String username){
this.username=username;
}
public String getUsername(){
return username;
}
……
}

[/code]
读取xml内容后,将数据存储到数据库中。因为xml的节点名称与我的Users类属性名称是一致的,请问我该如何实现动态的将节点值与Users的set方法将匹配。因为属性很多,不想一个一个set方法去写。
有人告诉我用java反射,我可以获取Users的所有set方法,但后续该怎样执行这个set方法就有点迷糊了,请知道的朋友给一段较为详细的代码,在此表示非常感谢!

[code="java"] Users user = new Users();
Field f = Users.class.getDeclaredField("username");

    f.setAccessible(true);
    f.set(user, "wwwwwwwwww");

    f = Users.class.getDeclaredField("age");
    f.setAccessible(true);
    f.set(user, 111111111);[/code]

用Castor引擎,很简单,可参考我以前用的例子
http://lerous.iteye.com/blog/250335

你将xml内容数据库的表结构是不是这样??
username |age
-------------------|--------------
张三 18
LILY 18

让后你的需求是要吧数据库中的数据取出来,复制给Users的属性???

你不用那样做,你不就是想把XML里边的数据,都一次性放到数据中去是吧!你看下这样思路能不能满足你的要求!
第一:首先你把XML解析,到对应的Map 其中key:username
value: age 。然后你循环这个MAP,这样应该可以了!以下代码:

解析XML 代码:
public static Map parse3Res(String str){
Map retmap = new HashMap();
try {
Document doc = DocumentHelper.parseText(Document4jUtils.inverseLn(str));
Element outputEl = doc.getRootElement();
for (Iterator iterator = outputEl.elementIterator(); iterator.hasNext();){
Element element = (Element) iterator.next();
if(element.getName().trim().equals("item_user")){
for (Iterator childEl = element.elementIterator(); childEl.hasNext();) {
Element child = (Element) childEl.next();
retmap.put(child.getName().trim(),child.getText().trim());
}
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
return retmap;
}

测试代码:

String str="<?xml version='1.0' encoding='GBK'?>张三18张四项55";
Map map=Document4jUtils.parse3Res(str);
for(Map.Entry entry:map.entrySet()){
System.out.println("Key:"+entry.getKey()+" value:"+entry.getValue());
User user=new User()
user. setUsername(entry.getKey());

user.setAge(entry.getValue());
//保存到数据中,批量自己考虑下
}

其中保存数据我没有测试,解析XML 测试了结果如下:

Key:username value:张四项
Key:age value:55

哦我理解错了,xmlbeans很方便啊 [url]http://xmlbeans.apache.org/[/url]
[code="java"]
File xmlFile = new File("c:\employees.xml");

// Bind the instance to the generated XMLBeans types.
EmployeesDocument empDoc =
EmployeesDocument.Factory.parse(xmlFile);

// Get and print pieces of the XML instance.
Employees emps = empDoc.getEmployees();
Employee[] empArray = emps.getEmployeeArray();
for (int i = 0; i < empArray.length; i++)
{
System.out.println(empArray[i]);
}

[/code]

提供以下思路吧,
[code="java"]
User user = new User();
user.getClass().getMethod(setMethodName, parameterTypes).invoke(user, setValue);
[/code]

setMethodName:就是你的set方法名,比如setUsername
parameterTypes:应该是参数类型吧
user 就是你要操作的类对象
setValue 就是你要set的值

不过感觉还是很麻烦的吧,因为set的值的类型不一样,可能还要判断
你试试
parameterType 这个 填args
Class[] args = new Class[]{Object.class};

希望有用吧