站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题如何给我的DAO实现这样的功能?

如何给我的DAO实现这样的功能?

摘要: 如何给我的DAO实现这样的功能?


话说起来可能比较长,但是逻辑很简单,我尽量把它说清楚:

我编写了一个 DAO 包用来封装数据库操作,其中有一个方法:DAO.update(Object obj, String tableName),这个方法的第一个参数 obj 表示要保存的对象,第二个参数 tableName 表示要将该对象保存到的表的名字。这个方法是通过根据表的字段和对象的属性之间的映射关系生成 insert 语句然后执行来实现的。这个实现在逻辑上有点问题,就是当属性的值为 null 的时候该怎么处理。为了方便,我决定在这种情况下忽略相应的字段,即如果 obj 的某个属性值为 null,则生成的 insert 语句中没有该字段的赋值。

现在出现了另外的问题,如果我想主动将某条记录的指定字段改为 null,目前的实现是做不到的。我要如何实现这个方法?

有人说你可以指定一个特殊的值,比如字符串 "NULL",当遇到这个值的时候就生成 “=null”。但问题是如果这个属性是 Date 类型的呢?如果是其他类型的呢?所以我一直想不出什么好的实现方案。在这里希望大家出出主意,谢谢!


写错了写错了,是 update 语句,不是 insert。手误,手误!


我觉得你应该可以参考一下hibernate的思想。
你可以多传进来一个参数,例如,第一个参数为检索得到的对象,第二个为用来更新表的对象,第三个为对应表名。
比较第一个与第二个对象对应属性字段的值,不等则更新。
也可以不修改接口 ,在方法中间加临时变量,得到检索后的对象。


你压根就不应该这么做!

如果是我,就会这样做:要求调用者先把对象从数据库取出来,在这个对象上改,改好了再用这个对象作为参数调用方法。
这样我就不用考虑你担心的问题了。


难道真的没一点商量的余地吗?有没有一个既能让 DAO 选择字段更新,也能让它识别哪些字段要赋 null 的这样一个方案?


难道真的没一点商量的余地吗?有没有一个既能让 DAO 选择字段更新,也能让它识别哪些字段要赋 null 的这样一个方案?
====
有啊,用动态代理对象,如果那个字段被赋值了(包括null),你就记录下来,SQL语句中就包括它。
不过麻烦死你,呵呵


貌似实现起来比较困难啊 ...


你可以写一个自动生成SQL语句的方法,专门用来判断这个字段是否为空,然后加上表,生成一个SQL语句.

不过我建议你可以用HIBERNATE框架构架你的项目,那样的话你说你的问题就不是问题!它是直接对对象进行操作的!


经过考虑,我打算按照 hbwhwang(catmiw的ID已经停用,现在用这个) 的建议。


↑返回目录
前一篇: 如何编写java网络程序,实现 外部机器 访问 一台通过HTTP代理服务器上网的机器。感觉比较复杂:)
后一篇: 使用URL类出现异常的问题