Useful scopes and tools for GORM V1
db, err := gorm.Open(
"mysql",
"root:root@tcp(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local&timeout=30s")
if err != nil {
return
}
var data []YourObject
db = db.Table("your_object_table_name").Select("id, name").Where("bz_id = ?", 999)
gormer.ChunkByIDMaxMin(50, db, &data, func() {
for _, item := range data {
print(item.ID, ", ")
}
println("\n")
}, nil)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
type QueryUserListParams struct {
gormer.PageParam
Name string `json:"name"`
}
type QueryUserListResult struct {
gormer.PageResult
List []User
}
var params = QueryUserListParams{}
var data = QueryUserListResult{}
data.PageParam = params.PageParam
db = db.Table("your_object_table_name").Where("bz_id = ?", 999)
data.Scan(db, &data.List)
type QueryUserListParams struct {
gormer.OrderParam
Name string `json:"name"`
}
var params = QueryUserListParams{}
db = db.Table("your_object_table_name").Scopes(params.Order())
auto generate the helper functions for database field
- Install
go install github.com/shockerli/gormer/sql-gen
- Source code
source code of
app/field/fields.go
//go:generate sql-gen
package field
import "app/enum"
//go:sql-gen -f=ALL
type IDX struct {
ID int64 `json:"id" gorm:"column:id"`
}
//go:sql-gen -f=EQ,IN
type DispatchTypeX struct {
DispatchType enum.DispatchType `json:"dispatch_type" sql:"column:dispatch_type"`
}
- Generate code
execute command:
go generate ./...
generate codes to
app/field/fields_gen.go
:
// Code generated by github.com/shockerli/gormer/sql-gen DO NOT EDIT
// Package field SQL build helper functions for field
package field
import (
"github.com/jinzhu/gorm"
"github.com/shockerli/gormer/tmp/enum"
)
// ****************** ID ****************** //
// Eq WHERE id = ?
func (i IDX) Eq(v ...int64) func(db *gorm.DB) *gorm.DB {
if len(v) == 0 {
v = append(v, i.ID)
}
return func(db *gorm.DB) *gorm.DB {
return db.Where("id = ?", v[0])
}
}
// Gt WHERE id > ?
func (i IDX) Gt(v ...int64) func(db *gorm.DB) *gorm.DB {
if len(v) == 0 {
v = append(v, i.ID)
}
return func(db *gorm.DB) *gorm.DB {
return db.Where("id > ?", v[0])
}
}
// ****************** DispatchType ****************** //
// Eq WHERE dispatch_type = ?
func (i DispatchTypeX) Eq(v ...enum.DispatchType) func(db *gorm.DB) *gorm.DB {
if len(v) == 0 {
v = append(v, i.DispatchType)
}
return func(db *gorm.DB) *gorm.DB {
return db.Where("dispatch_type = ?", v[0])
}
}
- Use code
use
Scope()
build where condition
type ObjectItem struct {
field.IDX
field.DispatchTypeX
}
func (ObjectItem) TableName() string {
return "object_item_01"
}
func main() {
m := ObjectItem{}
err := DB().Model(m).Scopes(m.IDX.Eq(1146)).Take(&m).Error
s, _ := json.Marshal(m)
spew.Dump(err, m)
println(string(s), "\n")
json.Unmarshal([]byte(`{"id":999}`), &m)
println(m.DispatchType)
}
parse the enum const and comment, generate helper functions
- Install
go install github.com/shockerli/gormer/enum-gen
- Source code
source code of app/enum/pay_type.go
//go:generate enum-gen
package enum
type PayType uint8
const (
PayTypeQQ PayType = 1 // QQ支付
PayTypeWeiXin PayType = 2 // 微信支付
PayTypeAlipay PayType = 3 // 支付宝
)
- Generate code
execute command: go generate ./...
generate codes to
app/enum/pay_type_gen.go
:
// Code generated by github.com/shockerli/gormer/enum-gen; DO NOT EDIT
// Package enum enum helpers
package enum
// ************ PayType ************ //
var payTypeMap = map[PayType]string{
PayTypeQQ: "QQ支付",
PayTypeWeiXin: "微信支付",
PayTypeAlipay: "支付宝",
}
// Check whether the type is exist
func (t PayType) Check() bool {
_, ok := PayTypeMap()[t]
return ok
}
// Desc return the desc of type
func (t PayType) Desc() string {
return PayTypeMap()[t]
}
// PayTypeMap return all of the types
func PayTypeMap() map[PayType]string {
return payTypeMap
}