DB操作是基于gorm进行封装的,更详细的也可以去 gorm官方查阅。
demo/test/index1 中有 增删改查实例
查询
查一条
query := test1_model.NewQueryBuilder()
result, _ := query.Select("id", "name","goods_id").WhereOp("id", self_db.Equal, 114).QueryOne()
查多条
query := test1_model.NewQueryBuilder()
result, _ := query.Select("id", "name","goods_id").WhereOp("id", self_db.Equal, 114).QueryAll()
更新
query := test1_model.NewQueryBuilder()
query.WhereOp("id", self_db.GreaterThan, 0).Updates(gin.H{"GoodsId":"1"})
删除
query := test1_model.NewQueryBuilder()
query.WhereOp("id", self_db.GreaterThan, 0).Delete(gin.H{"GoodsId":"1"})
使用其它未封装的 gorm 方法
gorm有很多的使用场景和方法,如事务等。model 只封装了常见的增删改查。
getDbConn 获取到 gorm 数据库连接句柄 query 可调出任意 gorm支持的方法
query := test1_model.getDbConn()
时间字段自动维护
创建时间,更新时间自动维护。软删除维护
在具体model文件中修改,这里已 /model/test1_model/model.go 为例
//GetPrimaryKeyField 返回主键ID是哪个字段
func (t Test1) GetPrimaryKeyField() string {
return "Id"
}
//GetIsDelField 返回删除状态是哪个字段
func (t Test1) GetIsDelField() string {
return "deleted"
}
//GetDeleteTimeFiled 返回删除时间是哪个字段
func (t Test1) GetDeleteTimeFiled() string {
return "DeletedTime"
}
//BeforeCreate 创建记录时自动维护 CreatedTime UpdatedTime 两个字段, 这两个字段名 根据自己的表来设置
func (t Test1) BeforeCreate(tx *gorm.DB) error {
if len(tx.Statement.Selects) > 0 {
tx.Statement.Selects = append(tx.Statement.Selects,"CreatedTime","UpdatedTime")
}
tx.Statement.SetColumn("CreatedTime", time.Now().Unix())
tx.Statement.SetColumn("UpdatedTime", time.Now().Unix())
return nil
}
修改 函数中 创建时间,更新时间,删除时间,是否删除 的 字段名。修改成自己表中的对应字段名
注意事项
当在一个函数使用一个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 会清空上次查询的条件。重新组装新的条件