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);
}
} |
大家应该可以看懂,这个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());
}
} |
这样,如果你需要新增字段信息,那么完全就可以创建一个Vo作为新增字段的实体对象,通过以上方法将Vo对象转为xml字符串存储到Bo的大字段中去,需要的时候通过Bo.getXXX获取到这个xml字符串,然后转化为Vo对象,通过get,set方法,在页面上Vo.XX就可以取到值!
本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1426165,如需转载请自行联系原作者