GoooQo增删查改指南

175 阅读2分钟

GoooQo 是基于 Go 语言的对象查询映射(OQM)框架,专注于简化数据库的 CRUD 操作。通过该框架,开发者可以高效地进行动态条件查询、批量操作和数据分页。本文将介绍如何在 GoooQo 中实现增删查改功能。

1. 新增数据 (Create)

新增单条或多条数据可以使用 Create()CreateMulti() 接口。创建单条数据示例:

entity := UserEntity{Name: P("John"), Score: P(90), Deleted: P(false)}
id, err := userDataAccess.Create(ctx, &entity)

对于批量创建,可以传入多个实体对象:

entities := []UserEntity{
    {Name: P("John"), Score: P(90), Memo: P("Great"), Deleted: P(false)},
    {Name: P("Alex"), Score: P(55)},
}
cnt, err := userDataAccess.CreateMulti(ctx, entities)

上述代码会生成如下SQL语句:

INSERT INTO t_user (name, score, memo, deleted) VALUES (?, ?, ?, ?), (?, ?, ?, ?)

2. 查询数据 (Read)

GoooQo 提供灵活的查询功能,通过 Query() 方法可以根据条件获取数据。例如,查询 Score < 80 的用户:

userQuery := UserQuery{ScoreLt: P(80)}
users, err := userDataAccess.Query(ctx, userQuery)

查询会生成如下 SQL 语句:

SELECT id, name, score, memo, deleted FROM t_user WHERE score < ?

我们还可以根据更复杂的条件进行查询,例如分页、排序和模糊查询:

userQuery := UserQuery{
    PageQuery: PageQuery{Size: 20, Sort: "id,desc;score"},
    MemoLike: P("Great"),
}
users, err := userDataAccess.Query(ctx, userQuery)

3. 更新数据 (Update)

更新数据可以使用 Update()Patch() 方法。Update() 会更新所有字段,而 Patch() 只更新非空字段。下面是更新某个用户的示例:

entity := UserEntity{Int64Id: NewInt64Id(2), Score: P(90), Memo: P("Great")}
cnt, err := userDataAccess.Update(ctx, entity)

执行的 SQL 语句如下:

UPDATE t_user SET score = ?, memo = ? WHERE id = ?

如果只想更新部分字段,比如 score,可以使用 Patch() 方法:

entity := UserEntity{Int64Id: NewInt64Id(2), Score: P(90)}
cnt, err := userDataAccess.Patch(ctx, entity)

4. 删除数据 (Delete)

可以通过 Delete() 根据 ID 删除记录:

cnt, err := userDataAccess.Delete(ctx, 3)

或者通过 DeleteByQuery() 方法根据查询条件删除数据,例如删除 Score < 80 的记录:

userQuery := UserQuery{ScoreLt: P(80)}
cnt, err := userDataAccess.DeleteByQuery(ctx, userQuery)

执行的 SQL 语句为:

DELETE FROM t_user WHERE score < ?

5. 统计和分页

通过 Count() 可以根据条件查询数据总数:

userQuery := UserQuery{ScoreLt: P(60)}
cnt, err := userDataAccess.Count(ctx, userQuery)

分页查询可以使用 Page() 接口:

userQuery := UserQuery{PageQuery: PageQuery{Page: 5, Size: 20}, ScoreLt: P(80)}
page, err := userDataAccess.Page(ctx, userQuery)

这将返回第80-100条数据以及总条目数。

总结

GoooQo 提供了灵活且强大的 CRUD 接口,通过面向对象的方式简化了 SQL 查询的编写。无论是简单的增删查改,还是复杂的查询条件,GoooQo 都能通过其清晰的接口实现高效的数据库操作。

如果你想了解更多详细信息,可以访问 GoooQo 官方文档