增删查改接口

接口定义

创建事务管理器后,我们需要为每个实体创建一个数据访问接口:

userDataAccess := rdb.NewTxDataAccess[UserEntity](tm)

方法NewTxDataAccess返回一个TxDataAccess实例,该实例由用于CRUD操作的DataAccess接口和用于事务操作的TransactionManager接口组成。

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]
}

type PageList[D any] struct {
    List  []D   `json:"list"`
    Total int64 `json:"total"`
}

DataAccess接口中的所有方法一共只接收4类参数:

  • context.Context可以是普通的Context,也可以是开启了事务的TransactionContext

  • id 实体的主键

  • Entity 实体对象,用于映射表名和列名,需要组合IntId或者Int64Id

  • Query 查询对象,用于动态构造查询条件和分页语句,需要组合PageQuery

对于Entity的定义,请参考:

实体对象

对于Query的定义,请参考:

查询对象定义

示例

以下接口调用示例基于实体对象UserEntity和查询对象UserQuery

调用示例

Get

根据id查询数据:

Query

根据查询条件查询数据:

Count

根据查询条件查询数据的总数:

Page

根据查询条件查询数据和总数:

Delete

根据id删除数据:

DeleteByQuery

根据查询条件删除数据:

Create

创建单条数据:

CreateMulti

创建多条数据:

Update

根据id更新所有字段:

Patch

根据id更新所有非空字段:

PatchByQuery

根据查询条件更新所有非空字段:

最后更新于

这有帮助吗?