types

package
v0.6.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 20, 2025 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	OrderDirAsc  = "asc"
	OrderDirDesc = "desc"
)

Variables

View Source
var (
	ListOptionAll = ListOption{
		All: true,
	}
	ListOptionDefault = ListOption{}
)

Functions

func DeepCopy added in v0.4.5

func DeepCopy[T any](src T) T

func Page

func Page(m *ORMModel, page, limit int)

分页

func Ptr added in v0.4.9

func Ptr[T any](src T) *T

Types

type BoolORM

type BoolORM int

为了避免识别错误设置Bool类型为int类型

const (
	BoolORMTrue  BoolORM = 1
	BoolORMFalse BoolORM = -1
	// 空字符串
	EmptyStr = "-"
)

type BulkWriteOperation

type BulkWriteOperation struct {
	Type   string // "insert", "update", "delete"
	Data   any
	Where  map[string]any
	Values map[string]any
}

type Cursor added in v0.3.9

type Cursor interface {
	Next() bool
	Decode(v any) error
	Close() error
}

type DBType added in v0.3.5

type DBType string
const (
	MySQL   DBType = "mysql"
	MongoDB DBType = "mongodb"
	SQLite  DBType = "sqlite"
)

type ListOption added in v0.4.5

type ListOption struct {
	Page  int     // 当前页
	Limit int     // 页大小
	All   bool    // 获取所有
	Sort  *Sort   // 大多数情况只有一种查询
	Sorts []*Sort // 复杂查询目前mongo不支持
}

func (ListOption) GetLimit added in v0.4.5

func (l ListOption) GetLimit() int

func (ListOption) GetPage added in v0.4.5

func (l ListOption) GetPage() int

type LogLevel added in v0.4.8

type LogLevel = logger.LogLevel
const (
	LogLevelSilent LogLevel = iota + 1
	LogLevelError
	LogLevelWarn
	LogLevelInfo
)

type MongoBulkWriteOperation

type MongoBulkWriteOperation = mongo.WriteModel

type ORM

type ORM interface {
	// Model用于返回Orm模型 用于之后对模型的操作
	Model(data any) ORMModel
}

type ORMModel

type ORMModel interface {

	// 设置表或集合 可以传入带有TableName() string 方法的对象 也可以传入具体字符串
	TableName(table any) ORMModel

	// 插入数据
	// 返回错误
	// 传入的必须是结构体指针才可以修改原始数据
	Create(data any) (string, error)

	// 插入数据
	// 等同Create
	Insert(data any) error

	// 更新或插入数据
	// 返回错误
	// 传入的必须是结构体指针才可以修改原始数据
	// 输入Where(&User{Name:"test"}).Save(&User{Value:"123"})
	// 当User表中的Name有test数据时,则修改该数据的Value为 123
	// 当User表中的Name没有test数据时,则插入该数据 User{Name:"test",Value:"123"}
	// 支持传入Save(map[string]any{"name":"123"}) 进行构建
	Save(data any, value ...any) error

	// 更新或插入数据
	// 等同Save
	Upsert(data any, value ...any) error

	// 更新
	// 返回错误 考虑更新可能更新多条 不返回ID
	// 传入的必须是结构体指针才可以修改原始数据
	// Update(&User{ID:123}) 会生成 UPDATE User SET ID = 123
	// Update("ID",123) 也会生成 UPDATE User SET ID = 123
	// Update(map[string]any{"ID":"123"}) 也会生成 UPDATE User SET ID = 123
	Update(data any, value ...any) error

	// 批量写入
	// 在mongo中datas为[]MongoBulkWriteOperation
	// 在sql中datas为[]BulkWriteOperation
	// order为写入是否是有序 mongo中使用无序可以提高性能
	BulkWrite(datas any, order bool) error

	// 事务
	// 事务中要使用sessionModel 进行操作 返回error不为 nil 时则会进行回滚
	Session(transactionFunc func(sessionModel Session) error) error

	// 上下文
	GetContext() context.Context
	SetContext(ctx context.Context) ORMModel

	// 删除
	// 传入Delete(&User{ID:123}) 就是删除ID为123的数据
	// 也可以直接Where(&User{ID:123}).Delete()
	Delete(data ...any) error

	// 查询数据
	// 会根据限制条件生成查询函数
	// 具体查询执行需要在查询函数中进行
	Find() ORMQuery

	// 清除过滤条件
	Reset() ORMModel
	ResetFilter() ORMModel

	// 过滤条件
	// Where只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// Where(&User{ID:123}) 会生成 WHERE User.ID = 123
	// Where("ID",123) 也会生成 WHERE User.ID = 123
	// Where(map[string]any{"ID":"123"}) 也会生成 WHERE User.ID = 123
	Where(condition any, value ...any) ORMModel

	// Equal等同Where
	Equal(key any, value ...any) ORMModel

	// WhereIs传入 key和value 根据生成表达式
	// WhereIs允许用户直接操作gorm或者mongo的opList
	// 如果数据库是gorm的则可以传入gorm的语法如 WhereIs("where user = ?","123")
	// 如果数据库是mongo的则可以传入mongo的语法如 WhereIs("user",bson.M{"$eq":123})
	// 在非必要的情况下不建议使用WhereIs
	WhereIs(key string, value any) ORMModel

	// WhereNot只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// WhereNot(&User{ID:123}) 会生成 WHERE User.ID <> 123
	// WhereNot("ID",123) 也会生成 WHERE User.ID <> 123
	// WhereNot(map[string]any{"ID":"123"}) 也会生成 WHERE User.ID <> 123
	WhereNot(condition any, value ...any) ORMModel

	// Not等同WhereNot
	Not(condition any, value ...any) ORMModel

	// WhereGt只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// WhereGt(&User{ID:123}) 会生成 WHERE User.ID > 123
	// WhereGt("ID",123) 也会生成 WHERE User.ID > 123
	// WhereGt(map[string]any{"ID":"123"}) 也会生成 WHERE User.ID > 123
	WhereGt(condition any, value ...any) ORMModel

	// Gt等同WhereGt
	Gt(condition any, value ...any) ORMModel

	// WhereLt只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// WhereLt(&User{ID:123}) 会生成 WHERE User.ID < 123
	// WhereLt("ID",123) 也会生成 WHERE User.ID < 123
	// WhereLt(map[string]any{"ID":"123"}) 也会生成 WHERE User.ID < 123
	WhereLt(condition any, value ...any) ORMModel

	// WhereLt等同WhereLt
	Lt(condition any, value ...any) ORMModel

	// WhereGte只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// WhereGte(&User{ID:123}) 会生成 WHERE User.ID >= 123
	// WhereGte("ID",123) 也会生成 WHERE User.ID >= 123
	// WhereGte(map[string]any{"ID":"123"}) 也会生成 WHERE User.ID >= 123
	WhereGte(condition any, value ...any) ORMModel

	// Gte等同WhereGte
	Gte(condition any, value ...any) ORMModel

	// WhereLte只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// WhereLte(&User{ID:123}) 会生成 WHERE User.ID <= 123
	// WhereLte("ID",123) 也会生成 WHERE User.ID <= 123
	// WhereLte(map[string]any{"ID":"123"}) 也会生成 WHERE User.ID <= 123
	WhereLte(condition any, value ...any) ORMModel

	// Lte等同WhereLte
	Lte(condition any, value ...any) ORMModel

	// WhereOr只能传入结构体
	// 会根据每个结构体的赋值情况进行查询
	// Where(&User{ID:12}).WhereOr(&User{ID:123}) 会生成 WHERE User.ID = 12 OR User.ID = 123
	// Where("ID",12).WhereOr("ID",123) 也会生成 WHERE User.ID = 12 OR User.ID = 123
	// Where(map[string]any{"ID":"12"}).WhereOr(map[string]any{"ID":"123"}) 也会生成 WHERE User.ID = 12 OR User.ID = 123
	WhereOr(condition any, value ...any) ORMModel

	// Or等同WhereOr
	Or(condition any, value ...any) ORMModel

	// 模糊查询
	// 输入WhereLike(&User{Name:"test"})
	// 会生成 WHERE User.Name LIKE "%test%"
	// 输入WhereLike("Name","_test%")
	// 会生成 WHERE User.Name LIKE "_test%"
	// Mongo则会使用$regex
	// 使用结构体默认使用primitive.Regex{Pattern: "test", Options: "i"}
	WhereLike(condition any, value ...any) ORMModel

	// 模糊查询
	// 等同WhereLike
	Like(condition any, value ...any) ORMModel

	// 限制查询的数量
	Limit(limit int) ORMModel

	// 跳过查询个数
	// 传入3 则会跳过前3个结果从第4个结果开始取
	// 需要配合Limit使用
	Offset(offset int) ORMModel

	// 正序
	// 传入结构体会根据结构体第一个有值的对象进行正序排序
	// 如传入Asc(&User{ID:1}) 就会根据User.ID进行排序 ID值不会处理但是要排序的必须有值 且只会根据第一个有值对象进行排序
	Asc(condition any) ORMModel

	// 逆序
	// 传入结构体会根据结构体第一个有值的对象进行倒序排序
	// 如传入Desc(&User{ID:1}) 就会根据User.ID进行排序 ID值不会处理但是要排序的必须有值 且只会根据第一个有值对象进行排序
	Desc(condition any) ORMModel

	// 分页
	Page(page, limit int) ORMModel

	// 查询匹配到的一条数据
	One(data any) error

	// 查询全部数据
	All(data any) error

	// 返回查询个数
	Count() int64

	// 游标
	// 在查询大量数据时可以减少内存占用
	// 使用时需要及时使用Close 避免内存泄漏
	Cursor() (Cursor, error)
}

type ORMQuery added in v0.5.2

type ORMQuery interface {
	// 查询匹配到的一条数据
	One(data any) error
	// 查询全部数据
	All(data any) error
	// 返回查询个数
	Count() int64
	// 删除查询结果
	Delete() error
	// 游标
	Cursor() (Cursor, error)
}

type OrderDir added in v0.4.9

type OrderDir = string

type OrderedMap added in v0.4.9

type OrderedMap struct {
	// contains filtered or unexported fields
}

OrderedMap 并发安全的有序 map

func NewOrderedMap added in v0.4.9

func NewOrderedMap() *OrderedMap

NewOrderedMap 创建一个新的 OrderedMap

func (*OrderedMap) Delete added in v0.4.9

func (om *OrderedMap) Delete(key string)

Delete 删除指定键

func (*OrderedMap) Load added in v0.4.9

func (om *OrderedMap) Load(key string) (value interface{}, ok bool)

Load 获取键对应的值

func (*OrderedMap) Range added in v0.4.9

func (om *OrderedMap) Range(fn func(key string, value interface{}) bool)

Range 按照插入顺序遍历所有键值对

func (*OrderedMap) Store added in v0.4.9

func (om *OrderedMap) Store(key string, value interface{})

Store 存储键值对

type Session added in v0.3.7

type Session interface {
	ORMModel
	Commit() error
	Rollback() error
}

type Sort added in v0.4.9

type Sort struct {
	Key  any // 支持结构体 也支持字符串
	Mode OrderDir
}

type WhereMode added in v0.4.7

type WhereMode int
const (
	WhereIs WhereMode = iota
	WhereNot
	WhereGt
	WhereLt
	WhereOr
	OrderAsc
	OrderDesc
	WhereGte
	WhereLte
	WhereLike
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL