调用​Model.update时,希望指定字段不更新。

调用Model.update时,希望指定字段不更新。

比如:Model.update("status,addTime,addUserId")

这样更新时希望跳过status,addTime,addUserId三个字段。

评论区

錢勢惘導

2019-04-11 16:15

Model.remove("status","addTime","addUserId")

perlin

2019-04-11 16:21

@錢勢惘導 谢谢!还有个问题。这样移除后,getStr("status")就获取不到值了?

杜福忠

2019-04-11 16:24

Model.put() 方法是不会更新 到数据库的。
Model.set() 的字段会被标记,跟新时会写入数据库

perlin

2019-04-11 16:35

@杜福忠 User user = getBean(User .class,"");
这个是使用的set吧。就是一些service里方法希望控制一些字段不能随意修改。
否则可能有漏洞,前台通过F12改了不能改的值。

杜福忠

2019-04-11 16:48

这样的话, User user = getBean(User .class,"");
service里用新建对象 new User()._setAttrs(user).remove(xxxx)或者keep保留些参数

perlin

2019-04-11 16:55

/***
* 指定字段不更新
* @param removeModifyFlag 例如:"status,addTime,addUserId"
* @return
*/
public boolean update(String removeModifyFlag){
removeModifyFlag = removeModifyFlag == null ? "" : removeModifyFlag;
Set modifyFlag = getModifyFlag();
Set tempSet = new HashSet();
String strs [] = removeModifyFlag.split(",");
for (String str : strs) {
if(modifyFlag.contains(str)){
tempSet.add(str);
modifyFlag.remove(str);
}
}
boolean result = this.update();
modifyFlag.remove(tempSet);
return result;
}

perlin

2019-04-11 16:55

@杜福忠 getModifyFlag()关键就是这个方法不可以继承很无语

錢勢惘導

2019-04-11 16:59

@perlin remove了就拿不到了

perlin

2019-04-11 16:59

@杜福忠 谢谢!这种方法还可以。

perlin

2019-04-11 17:27

/***
* 指定字段不更新. 表中没有addTime字段也不会报错,会直接忽略。
* @param removeModifyFlag 例如:"status,addTime,addUserId"
* @return
*/
public boolean update(String removeModifyAttrs){
Table table = TableMapping.me().getTable(getUsefulClass());
removeModifyAttrs = removeModifyAttrs == null ? "" : removeModifyAttrs;
Map tempAttrs = new HashMap();
String removeModifyAttrArr [] = removeModifyAttrs.split(",");
for (String removeAttr : removeModifyAttrArr) {
if (table.hasColumnLabel(removeAttr)) {
Object objVal = this.get(removeAttr);
this.remove(removeAttr);
tempAttrs.put(removeAttr, objVal);
}
}
boolean result = this.update();
this._setAttrs(tempAttrs);
return result;
}

perlin

2019-04-11 17:28

谢谢大家了!通过继承Model类实现了。还是这样用着方便。

JFinal

2019-04-11 22:23

补充一下,getModifyFlag() 方法可以通过下面方法实现同样的效果:
CPI.getModifyFlag(...);

再者 model 中还有 keep、remove 方法可以决定数据的去留