话说起来可能比较长,但是逻辑很简单,我尽量把它说清楚:我编写了一个 DAO 包用来封装数据库操作,其中有一个方法:DAO.update(Object obj, String tableName),这个方法的第一个参数 obj 表示要保存的对象,第二个参数 tableName 表示要将该对象保存到的表的名字。这个方法是通过根据表的字段和对象的属性之间的映射关系生成 insert 语句然后执行来实现的。这个实现在逻辑上有点问题,就是当属性的值为 null 的时候该怎么处理。为了方便,我决定在这种情况下忽略相应的字段,即如果 obj 的某个属性值为 null,则生成的 insert 语句中没有该字段的赋值。现在出现了另外的问题,如果我想主动将某条记录的指定字段改为 null,目前的实现是做不到的。我要如何实现这个方法?有人说你可以指定一个特殊的值,比如字符串 "NULL",当遇到这个值的时候就生成 “=null”。但问题是如果这个属性是 Date 类型的呢?如果是其他类型的呢?所以我一直想不出什么好的实现方案。在这里希望大家出出主意,谢谢!
你可以多传进来一个参数,例如,第一个参数为检索得到的对象,第二个为用来更新表的对象,第三个为对应表名。
比较第一个与第二个对象对应属性字段的值,不等则更新。
也可以不修改接口 ,在方法中间加临时变量,得到检索后的对象。
====
有啊,用动态代理对象,如果那个字段被赋值了(包括null),你就记录下来,SQL语句中就包括它。
不过麻烦死你,呵呵