增删查改接口
定义
GoooQo提供接口DataAccess
用于增删查改操作,提供接口TxDataAccess
用于事务操作。
package core
type DataAccess[E Entity] interface {
Get(ctx context.Context, id any) (*E, error)
Delete(ctx context.Context, id any) (int64, error)
Query(ctx context.Context, query Query) ([]E, error)
Count(ctx context.Context, query Query) (int64, error)
DeleteByQuery(ctx context.Context, query Query) (int64, error)
Page(ctx context.Context, query Query) (PageList[E], error)
Create(ctx context.Context, entity *E) (int64, error)
CreateMulti(ctx context.Context, entities []E) (int64, error)
Update(ctx context.Context, entity E) (int64, error)
Patch(ctx context.Context, entity E) (int64, error)
PatchByQuery(ctx context.Context, entity E, query Query) (int64, error)
}
type TxDataAccess[E Entity] interface {
TransactionManager
DataAccess[E]
}
创建事务管理器后,我们可以为每个实体创建一个TxDataAccess
:
userDataAccess := rdb.NewTxDataAccess[UserEntity](tm)
对于Entity
的定义,请参考:
对于Query
的定义,请参考:
示例
以下接口调用示例基于此查询对象:
type UserQuery struct {
PageQuery
ScoreLt *int
MemoNull *bool
MemoLike *string
Deleted *bool
}
Get
user, err := userDataAccess.Get(ctx, 3)
Query
userQuery := UserQuery{ScoreLt: P(80)}
users, err := userDataAccess.Query(ctx, &userQuery)
Count
userQuery := UserQuery{ScoreLt: P(60)}
cnt, err := userDataAccess.Count(ctx, &userQuery)
Page
userQuery := UserQuery{
PageQuery: PageQuery{PageSize: P(20)},
ScoreLt: P(80),
}
page, err := userDataAccess.Page(ctx, &userQuery)
// Executing SQL="SELECT id, score, memo FROM t_user WHERE score < ? LIMIT 20 OFFSET 0" args="[80]"
// Executing SQL="SELECT count(0) FROM t_user WHERE score < ?" args="[80]"
Delete
tc, _ := tm.StartTransaction(ctx)
cnt, err := userDataAccess.Delete(tc, 3)
DeleteByQuery
userQuery := UserQuery{ScoreLt: P(80)}
cnt, err := userDataAccess.DeleteByQuery(tc, userQuery)
// Executing SQL="DELETE FROM User WHERE score < ?" args="[80]"
Create
entity := UserEntity{Score: P(90), Memo: P("Great")}
id, err := userDataAccess.Create(tc, &entity)
CreateMulti
entities := []UserEntity{{Score: P(90), Memo: P("Great")}, {Score: P(55), Memo: P("Bad")}}
cnt, err := userDataAccess.CreateMulti(tc, entities)
Update
entity := UserEntity{Int64Id: NewInt64Id(2), Score: P(90), Memo: P("Great")}
cnt, err := userDataAccess.Update(tc, entity)
// Executing SQL="UPDATE t_user SET score = ?, memo = ? WHERE id = ?" args="[90 Great 2]"
Patch
entity := UserEntity{Int64Id: NewInt64Id(2), Score: P(90)}
cnt, err := userDataAccess.Patch(ctx, entity)
// Executing SQL="UPDATE t_user SET score = ? WHERE id = ?" args="[90 2]"
PatchByQuery
entity := UserEntity{Memo: P("Add Memo")}
query := UserQuery{MemoNull: P(true)}
cnt, err := userDataAccess.PatchByQuery(tc, entity, &query)
// Executing SQL="UPDATE t_user SET memo = ? WHERE memo IS NULL" args="[Add Memo]"
Last updated