在某些情况下,我们可能需要同一个实体bean对应着多个数据库表,比如,你的数据库表是按照每个月添加一个,但是对应的实体bean并没有改变。这个时候,我们就需要支持表明变换了,否则,难道你每个月改变一下orm映射配置吗?如果每天都换一个表呢?
在EasyDBO上,要做到支持表名变换是很容易的。只需在使用各种数据库操作时添加一个表名称的的变量(按照一定的算法产生),如原来的easyDB.add(object)变为easyDB.add(object, tablename)。
在具体的实现上,我们应该从哪里入手去替换表名呢?看看EasyDBO的源码,保存有数据库表名称的是在DBTable这个类中,其中name就是指数据库表名,利用setter方法,很容易植入数据库表名。但是在哪个时机植入比较合适?当然选取尽可能可以减少重复代码就可以完成的时机。
看看吧,在信息转换为DBTable对象时,再重新植入表名,就可以了。在EasyDB类中,方法private DBTable findTable(Class cls)会从类或对象中获取信息包装成DBTable对象,所以这是关键的地方。private DBObject obj2dbo(Object obj)和其他的方法都直接或者间接调findTable(Class cls)来获取表信息。做一些小改动就可以了,最好是添加一个重载的方法,而不是修改原来的方法。修改添加两个样板,其他方法也差不多是这样:
给出修改后的EasyDB类的源码,在这里下载。