【web开发】☆★之Obj与Xml之间互相转换


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


1、模拟一个实体类

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、新建一个转换类

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

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);
	}

}

wKioL1Oa38_wO1hnAALp_Keuv88433.jpg


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


4、解析xml到对象

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());
		
	}
}

wKiom1Oa4bTRfiMjAAMEK_x2tAM308.jpg


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


此方法需要的架包:xpps xstream



以上代码都是经本人测试之后拷贝出来直接可以使用!

有问题,请举手!


微信公众号:IT_Online


职场动态,技术咨询,招聘信息,请拿出手机扫这里!

wKiom1Oa4l-gjFuaAADCmaK-BRc805.jpg