Java开发中对象与Xml之间互相转换


    在有些项目的维护过程中,客户需要对某些数据库表进行添加字段,如果你老老实实的不断增加数据库字段,那么维护起来非常困难,同时也大大增加自己的工作量。因此,我采取的是将,新增字段转化成一个xml字符串,将这个xml存储到表中某一个字段中,同时,需要字段的时候解析这个xml字符串就行了,这样完全解决我们的问题,同时大大提高代码的可维护性!实例代码如下!


1、模拟一个实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package csg.entity;
/**
 
 * @author 小夜的传说
 * @2014年6月13日
 * 模拟实体
 */
public class User {
    private String name;//姓名
    private Integer age;//年龄
    private String sex;//性别
    private String profes;//职业
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getProfes() {
        return profes;
    }
    public void setProfes(String profes) {
        this.profes = profes;
    }
    public User(String name, Integer age, String sex, String profes) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.profes = profes;
    }
    public User() {
        super();
    }
     
     
}

2、新建一个转换类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package csg.xml;
 
import com.thoughtworks.xstream.XStream;
/**
 
 * @author 小夜的传说
 * @2014年6月13日
 * 新建转换类
 */
public class MyXStream extends XStream{
    @Override
    public String toXML(Object obj) {
        String dtd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
        return dtd + super.toXML(obj);
    }
 
    @Override
    public Object fromXML(String xml) {
        return super.fromXML(xml);
    }
 
 
}

3、对象转化为xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package csg.main;
 
import csg.entity.User;
import csg.xml.MyXStream;
/**
 
 * @author 小夜的传说
 * @2014年6月13日
 * 对象转化为xml字符串
 */
public class ObjToXml {
    public static void main(String[] args) {
        User user=new User();
        user.setAge(12);
        user.setName("zhangsan");
        user.setProfes("程序员");
        user.setSex("男");
        MyXStream xstream = new MyXStream();
        xstream.alias("user", User.class);//注意你生成的user,那么解析也要以user解析
        String queryXml = xstream.toXML(user);
         
         System.out.println(queryXml);
    }
 
}

Java开发中对象与Xml之间互相转换


    大家应该可以看懂,这个xml是String类型,那么你完全就可以将这个xml直接存储到某一个字段中,例如mysql的text类型字段,oracle的clob字段类型。


4、解析xml到对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package csg.main;
import csg.entity.User;
import csg.xml.MyXStream;
/**
 
 * @author 小夜的传说
 * @2014年6月13日
 * xml解析为对象
 */
public class XmlToObj {
    public static void main(String[] args) {
        String str = "<?xml version='1.0' encoding='UTF-8'?>"
                "<user><name>zhangsan</name><age>12</age><sex>男</sex><profes>程序员</profes></user>";
        MyXStream xstream = new MyXStream();
        xstream.alias("user", User.class);
        User user = (User) xstream.fromXML(str);
        System.out.println(user.getName()+"--"+user.getAge()+"--"+user.getSex()+"--"+user.getProfes());
         
    }
}

Java开发中对象与Xml之间互相转换


    这样,如果你需要新增字段信息,那么完全就可以创建一个Vo作为新增字段的实体对象,通过以上方法将Vo对象转为xml字符串存储到Bo的大字段中去,需要的时候通过Bo.getXXX获取到这个xml字符串,然后转化为Vo对象,通过get,set方法,在页面上Vo.XX就可以取到值!


此方法需要的架包:xpps xstream










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1426165,如需转载请自行联系原作者