jfinal 有没有对象拷贝

类似BeanUtils.copyProperties(dest, orig);

评论区

杜福忠

2017-04-25 19:46

如果是拷贝model属性的话: model_1._setAttrs(model_2)

fmpoffice

2017-12-26 09:34

@杜福忠 如果某个属性字段不需要复制呢?

杜福忠

2017-12-26 15:17

@fmpoffice
总结一下几个常用的:
model.remove("attrs1","attrs2");// 删除 多个键, 适用与删除少量不要的值。底层使用的是 map的remove

model.keep("attrs1","attrs2");// 保留需要的键, 适用与删除大量不要的值。底层使用的是 新建一个map拷贝值

model.put(model);//拷贝,不能写入数据库,可拷贝所有的键值。 底层使用的是 map的putAll

model._setAttrs(model);//拷贝,能写入数据库,只能拷贝数据库的键值(如果有其他字段,会抛出ActiveRecordException)。底层使用的是for (Entry e : attrs.entrySet()) set(e.getKey(), e.getValue());

杜福忠

2017-12-26 15:20

@fmpoffice 这四个组合拳, 可用于你任何业务。
根据业务选择最佳的搭配方式

fmpoffice

2018-07-25 07:58

@杜福忠 再请教一下:我用db.user(db2).find另一个数据源返回的Record,想把本地的数据源abc对拷Record里面的字段,我之前使用put是可以的,可是我把本地的数据源增加了一个字段,put之前通过r.set("新增字段","xxxx"); 然后再put过去,就不好使了!请问什么问题呢?

杜福忠

2018-07-25 17:46

Db.user(db2).find 得到的 Record r,
直接 r.set("新增字段","xxxx");
再Db.user(abc).save("表名", r);
就可以了~

cs3230524

2019-11-09 18:25

@杜福忠 请问下,两个model,属性有差异。我怎么把属性 A和属性B 的交集属性 的值赋值给属性 B呢。。一个一个 put,好傻啊

杜福忠

2019-11-10 18:13

@cs3230524
在ModelB类里面 建个类似的方法:
public M _setMyAttrs(M model) {
return (M)_setMyAttrs(CPI.getAttrs(model));
}
public M _setMyAttrs(Map<String, Object> attrs) {
Table table = CPI.getTable(this);
for (Entry<String, Object> e : attrs.entrySet())
if(table != null && table.hasColumnLabel(e.getKey()))
set(e.getKey(), e.getValue());
return (M)this;
}
然后调用BModel modelB = new BModel()._setMyAttrs(modelA对象);
如果有很多这样的业务,可以单独建立一个 ModelKit ,里面大致也是和上面一样原理,把两个Model对象都穿入进去,进行操作。
手写,未测

热门反馈

扫码入社