「手机上网怎么赚钱」 为什么需要过滤字段-冷门项目

本文最后更新于2020年8月12日,已超过48天没有更新,如果文章内容失效,请反馈给我们,谢谢!

摘要

为什么需要过滤字段 例如insert时需要忽略某个特定属性, update时只更新某些属性, 查询时需要跳过大字段等。 FieldFilter/FieldMatcher提...

 

本站长期更新如何网赚以及网赚技巧相关教程

同时本站也是网赚论坛大全,会给大家带来网赚钱最多是什么网相关项目

本站内容好好研究,轻轻松松做出月入过万的副业


正文:

 

为什么需要过滤字段

例如insert时需要忽略某个特定属性, update时只更新某些属性, 查询时需要跳过大字段等。

FieldFilter/FieldMatcher提供细致的过滤选项,包括:

FieldFilter是FieldMatcher的包装,相当于Map

黑名单和白名单,均为正则表达式,匹配是Java属性名!!

ignoreNull/ignoreZero/ignoreDate/ignoreBlankStr对insert(pet)无效,有多参数的insert替代.如何过滤字段

如下代码,将只更新 Pet 的 id 和 name 属性:

// 第二个参数是正则表达式
FieldFilter ff = FieldFilter.create(Pet.class, "^id|name$");
ff.run(new Atom() {
public void run() {
Pet pet = dao.fetch(Pet.class, 24);
pet.setName("ABC");
pet.setNickname("XiaoBai");
dao.update(pet);
}
});
// 或者
Daos.ext(dao, ff).update(pet);

以下代码, 将只查询id和name属性

FieldFilter ff = FieldFilter.create(Pet.class, "^id|name$");
Pet pet = ff.run(new Molecule() {
public void run() {
setObj(dao.fetch(Pet.class, "ABC"));
}
});
// 或者用Daos.ext
Pet pet = Daos.ext(dao, ff).fetch(Pet.class, "ABC");

字段过滤器的原理

字段过滤,不过是要在一个地方记录一下下面两个信息:对什么实体过滤哪些字段

并且它希望 Nutz.Dao 自行能获取到这些信息。当然,ThreadLocal 就是一个很好的选择。实际上,你如果看看 FieldFilter 里面的方法,你其实就能猜到。为了能为多个实体保存字段过滤配置信息,它实际上在ThreadLoacal 里保存了自身的一个实例,同时,它自己有一个私有的 Map, FieldMatcher>字段,具体的,你可以看 FieldFilter 这个类的定义:

public class FieldFilter {
...
private static ThreadLocal FF = new ThreadLocal();
...
private Map, FieldMatcher> map;
...

而且既然在 ThreadLocal 设置了数据,它就不得不考虑如何让你清除这个数据。因此,它的写法也保证了你一定会清掉你的数据了。

FieldFilter ... run(new Atom(){  //

字段过滤器的创建

下面是一个最简单和常用的例子:

FieldFilter.create(Pet.class, "^id|name$").run(new Atom(){
public void run(){
// TODO 你的 DAO 操作代码
}
});

如果你想仅仅让 id 和 name 字段受到匹配,你的正则表达式最好写的严格一些,比如 "^id|name$"当然字段,SQL 的条件部分不会受到字段过滤器的影响

如果你读完上面的介绍,你应该就很了解字段过滤器如何使用了,但是你可能还有个几个小疑问:忽略少数字段

FieldFilter.locked(Pet.class, "^last|age$").run(new Atom(){
public void run(){
// TODO 你的 DAO 操作代码
}
});

忽略空值

FieldFilter.create(Pet.class, true).run(new Atom(){
public void run(){
// TODO 你的 DAO 操作代码
}
});

保留几个字段且忽略空值

FieldFilter.create(Pet.class,"^id|name|age|last$", true).run(new Atom(){
public void run(){
// TODO 你的 DAO 操作代码
}
});

忽略少数字段且忽略空值

FieldFilter.create(Pet.class, null, "^age|last$", true).run(new Atom(){
public void run(){
// TODO 你的 DAO 操作代码
}
});

为多个实体设置字段过滤

FieldFilter.create(Pet.class, true)
.set(Master.class, "^id|name$")
.run(new Atom(){
public void run(){
// TODO 你的 DAO 操作代码
}
});

使用FieldMatcher创建复杂规则

FieldMatcher fm = FieldMatcher.make(actived, locked, ignoreNull,
ignoreZero, ignoreDate,
ignoreId,
ignoreName,
ignorePk);
FieldFilter ff = FieldFilter.create(Pet.class, fm);

无需匿名内部类的写法

从1.b.51开始支持不使用匿名内部类的方法, Daos.ext方法. 该方法有两个变种, 分别支持字段过滤和动态表名.

示例

//原写法
FieldFilter.create(Pet.class, "^id|name$").run(new Atom(){
public void run(){
dao.update(pet); // 这里的pet必须是final
}
});
// 新的写法
Daos.ext(dao, FieldFilter.create(Pet.class, "^id|name$")).update(pet);
// ext方法会返回一个Dao实例,是对原有dao对象的封装

FieldFilter实例及Daos.ext返回的Dao实例,可重复使用,均为线程安全的.

转载请注明:太白网赚平台 » 「手机上网怎么赚钱」 为什么需要过滤字段

自己把自己说服了,是一种理智的胜利;自己把自己感动了,是一种心灵的升华;自己把自己征服了,是一种人生的成熟;自己把自己超越了,是一种发展的成就;自己把自己解脱了,是一种纠结的释怀。挫折使人成熟,失败催化成长,磨难考验品格,不幸铸就坚强。 

网赚58:专注互联网冷门项目,紧跟最新最热创业信息,分享经验心得,揭秘套路,是网赚客的聚集地,主要项目有高回报项目薅羊毛活动。

「手机上网怎么赚钱」 为什么需要过滤字段-冷门项目

好物推荐


网赚58-专注互联网冷门项目
  • 风险提示:本站项目资讯均收集自互联网,投资有风险,各位需谨慎,如有损失,概不负责
  • 一手消息:请加入QQ禁言群,获取最新消息

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: