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 官方文档。