jfinal 在save时,过滤Record多余字段

比如我们有一些Map<String, Object>  map,里面字段很多。在使用Db.save()时,把map转为record,可以把多余的字段自动过滤吗?

评论区

zzutligang

2022-06-28 17:02

好像并不会,因为Record根本不知道你的表里有哪些字段。你通过Record的put,把一个map对象放进去,不是表字段的,也不会过滤掉。

杜福忠

2022-06-28 17:15

需要使用高版本JF的 Model

或者自己扩展一个RecordKit 工具类,提前存储好对应表字段,然后实现一个剔除功能即可

jfinal爱好者22

2022-06-29 09:18

@杜福忠 Model里面是没有属性的,只有set,get方法。再做剔除功能时,获取Model所有set或者get的所有方法名,把set,get去掉,再考虑驼峰命名,就能得到所有表字段。在和保存是的model所有字段做筛选。就可以剔除多余的字段。这个思路可以吗?

杜福忠

2022-06-29 09:49

@jfinal爱好者22 new MyModel()._setOrPut( map ).save()

zzutligang

2022-06-29 18:01

@杜福忠 这个new MyModel()._setOrPut( map ).save(),会把不是表字段的也放进去的。

杜福忠

2022-06-29 18:14

@zzutligang .save() 生成SQL的时候会自动过滤,不会放入数据库。
Model对象有没有多余字段无所谓,临时对象。
如果想知道哪些是保留字段,可以调用 CPI.getModifyFlag( myModel ) 获取到

JFinal

2022-06-29 18:18

为啥不用 model.keep(...) 与 model.remove(...)

jfinal爱好者22

2022-06-30 08:49

@JFinal 不是那个意思,波总。就是model里面有很多字段,但是数据库只有固定的字段,想要封装一个方法,可以在Db.save时,自动把model多余的字段剔除掉,这样保存时,不会报错。

BigSnake1989

2022-07-11 17:53

@jfinal爱好者22 感觉你这样偏离了model的设计,baseModel 里面的设数据库字段一一对应,不需要做修改,model,可扩展查询的字段,不应该有set之类的,这样就不会进入到数据库了