Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Fields/FieldsEx字段过滤

  1. Fields 用于指定需要操作的表字段,包括查询字段、写入字段、更新字段等过滤;
  2. FieldsEx 用于例外的字段指定,可用于查询字段、写入字段、更新字段等过滤;

Fields示例

  1. 假如user表有4个字段uid, nickname, passport, password
  2. 查询字段过滤 go // SELECT `uid`,`nickname` FROM `user` ORDER BY `uid` asc db.Table("user").Fields("uid, nickname").Order("uid asc").All()
  3. 写入字段过滤 go m := g.Map{ "uid" : 10000, "nickname" : "John Guo", "passport" : "john", "password" : "123456", } db.Table(table).Fields("nickname,passport,password").Data(m).Insert() // INSERT INTO `user`(`nickname`,`passport`,`password`) VALUES('John Guo','john','123456')

FieldsEx示例

  1. 假如user表有4个字段uid, nickname, passport, password
  2. 查询字段排除 go // SELECT `uid`,`nickname` FROM `user` db.Table("user").FieldsEx("passport, password").All()
  3. 写入字段排除 go m := g.Map{ "uid" : 10000, "nickname" : "John Guo", "passport" : "john", "password" : "123456", } db.Table(table).FieldsEx("uid").Data(m).Insert() // INSERT INTO `user`(`nickname`,`passport`,`password`) VALUES('John Guo','john','123456')

Filter字段过滤

gdb可以自动同步数据表结构到程序缓存中(缓存不过期,直至程序重启/重新部署),并且可以过滤提交参数中不符合表结构的数据项,该特性可以使用Filter方法实现。

...

其中id为不存在的字段,在写入数据时将会被过滤掉,不至于被构造成写入SQL中产生执行错误。

OmitEmpty空值过滤

写入/更新操作

空值会影响于写入/更新操作方法,如Insert, Replace, Update, Save操作。

...

关于omitempty标签与OmitEmpty方法: 1. 针对于struct的空值过滤大家会想到omitempty的标签。该标签常用于json转换的空值过滤,也在某一些第三方的ORM库中用作struct到数据表字段的空值过滤,即当属性为空值时不做转换。 1. omitempty标签与OmitEmpty方法所达到的效果是一样的。在ORM操作中,我们不建议对struct使用omitempty的标签来控制字段的空值过滤,而建议使用OmitEmpty方法来做控制。因为该标签一旦加上之后便绑定到了struct上,没有办法做灵活控制;而通过OmitEmpty方法使得开发者可以选择性地、根据业务场景对struct做空值过滤,操作更加灵活。

数据查询操作

空值也会影响数据查询操作,主要是影响where条件参数。我们可以通过OmitEmpty方法过滤条件参数中的空值。

...