DB操作是基于gorm进行封装的,更详细的也可以去 gorm官方查阅。

demo/test/index1 中有 增删改查实例

查询

查一条

  1. query := test1_model.NewQueryBuilder()
  2. result, _ := query.Select("id", "name","goods_id").WhereOp("id", self_db.Equal, 114).QueryOne()

查多条

  1. query := test1_model.NewQueryBuilder()
  2. result, _ := query.Select("id", "name","goods_id").WhereOp("id", self_db.Equal, 114).QueryAll()

更新

  1. query := test1_model.NewQueryBuilder()
  2. query.WhereOp("id", self_db.GreaterThan, 0).Updates(gin.H{"GoodsId":"1"})

删除

  1. query := test1_model.NewQueryBuilder()
  2. query.WhereOp("id", self_db.GreaterThan, 0).Delete(gin.H{"GoodsId":"1"})

使用其它未封装的 gorm 方法

gorm有很多的使用场景和方法,如事务等。model 只封装了常见的增删改查。

getDbConn 获取到 gorm 数据库连接句柄 query 可调出任意 gorm支持的方法

  1. query := test1_model.getDbConn()

时间字段自动维护

创建时间,更新时间自动维护。软删除维护

在具体model文件中修改,这里已 /model/test1_model/model.go 为例

  1. //GetPrimaryKeyField 返回主键ID是哪个字段
  2. func (t Test1) GetPrimaryKeyField() string {
  3. return "Id"
  4. }
  5. //GetIsDelField 返回删除状态是哪个字段
  6. func (t Test1) GetIsDelField() string {
  7. return "deleted"
  8. }
  9. //GetDeleteTimeFiled 返回删除时间是哪个字段
  10. func (t Test1) GetDeleteTimeFiled() string {
  11. return "DeletedTime"
  12. }
  13. //BeforeCreate 创建记录时自动维护 CreatedTime UpdatedTime 两个字段, 这两个字段名 根据自己的表来设置
  14. func (t Test1) BeforeCreate(tx *gorm.DB) error {
  15. if len(tx.Statement.Selects) > 0 {
  16. tx.Statement.Selects = append(tx.Statement.Selects,"CreatedTime","UpdatedTime")
  17. }
  18. tx.Statement.SetColumn("CreatedTime", time.Now().Unix())
  19. tx.Statement.SetColumn("UpdatedTime", time.Now().Unix())
  20. return nil
  21. }

修改 函数中 创建时间,更新时间,删除时间,是否删除 的 字段名。修改成自己表中的对应字段名

注意事项

当在一个函数使用一个query查询时,第二次query需要获取新的,如

query := test1_model.NewQueryBuilder()
result, _ := query.Select("id", "name","goods_id").WhereOp("id", self_db.Equal, 114).QueryOne()

query.WithNew().WhereOp("id", self_db.GreaterThan, 0).Updates(gin.H{"GoodsId":"1"})

WithNew 会清空上次查询的条件。重新组装新的条件