日期:2014-05-17  浏览次数:20738 次

问一下各位,数据访问层对一个表的update操作应该怎么封装比较合理
现在需求是这样的,非常常规,但是我却突然没想到好方法!
就是我想封装对一个表操作的DAL,seelct 、insert、delete都很简单,
但是update我应该怎么封装呢?
假设widget表有这些字段:widget.widName,widget.widTypeId,widget.widPath,widget.widDescribe,widget.widCustomQuery,widget.widPreproccess,widget.widId
我可以这样封装

JScript code

OperaterWidget.prototype.UpdateWidget = function(widget,callback){
    var widUpdate = [widget.widName,widget.widTypeId,widget.widPath,widget.widDescribe,widget.widCustomQuery,widget.widPreproccess,widget.widId];
    sql = "UPDATE widget SET widName = ?,widTypeId = ?,widPath = ?,widDescribe = ?,widCustomQuery = ?,widPreproccess = ? WHERE widId = ?" ;
    dbType.execSQL(sql,widUpdate);
    return this;
}



但是这样封装的结果是我的客户程序如果只想修改部份字段,比如只想修改widget.widPath字段,那么,他就会想只给widget对像的widPath属性赋值,这个时候由于他没有给其它属性赋值,所以其它属性被修改为空字符串,
怎么样才能实现让我的客户程序如果只想修改一个字段就只需要传一个字段进来,其它的按照原来数据库的数据而不是变成空呢?

------解决方案--------------------
一个办法是将字段值先读出来,后修改需要改的,再update,另一个办法是拼接sql语句,根据需要运行不同的sql语句,再就是使用像hibernate或jpa这样的框架或规范,将记录看成对象,将对象看成记录.