数据库储存不确定实体

相信在项目开发当中都曾经遇到过,有某些要储蓄到数据库当中的实体字段是不确定的,可能会动态变化,或者多个类型的字段同时存在或同时不存在,那创建数据库字段时,因为实体的字段不能确定,数据库的字段也就不能确定.

例子:

笔者参与开发的一个招生系统当中,每个课程都有各自的入学要求,而入学要求需要被保存到数据库当中被课程引用,但入学要求的实体是不确定的,入学要求可能是面试分数大于某个数字,亦可能是是否通过4级英语,那将是一个布尔类型的字段,而在进行某个操作时需要校验该申请人是否满足他申请课程的入学要求.

由于以上的需求,入学要求需要被保存到数据库,但数据库中没办法设立相应的字段保存所有的入学要求信息,所以项目当中我们抽象出多个入学要求的实体,将实体转换成XML的形式来保存到数据库中

public class XmlConverter {
	private XmlConverter() {}
	
	public static String toXml(Object obj) {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		XMLEncoder encoder = new XMLEncoder(out);
		encoder.writeObject(obj);
		encoder.close();
		String xml = out.toString().trim();
		return xml;
	}
	
	public static Object fromXml(String xml) {
		ByteArrayInputStream in;
		try {
			in = new ByteArrayInputStream(xml.trim().getBytes("UTF-8"));
			XMLDecoder decoder = new XMLDecoder(in);
			Object obj = decoder.readObject();
			return obj;
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		return null;
	}

    public static void main(String[] args) {
        Test test = new Test();
        test.setId("1");
        test.setUsername("Hello");
        test.setPassword("World");

        String xml = XmlConverter.toXml(test);
        System.out.println(xml);

        Test test1 = (Test) XmlConverter.fromXml(xml);
        System.out.println("--------id:" + test1.getId());
        System.out.println("--------name:" + test1.getUsername());
        System.out.println("--------password:" + test1.getPassword());
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_45" class="java.beans.XMLDecoder">
	<object class="com.accentrix.vtc.apm.domain.Test">
		<void property="id">
			<string>1</string>
		</void>
		<void property="password">
			<string>World</string>
		</void>
		<void property="username">
			<string>Hello</string>
		</void>
	</object>
</java>

以上是通过toXml方法返回的xml样式,简简单单的两个方法就解决了数据库保存不确定字段的问题,如读者有更好的方法希望能指点一二,谢谢

相关推荐