GoooQo 是一个基于 OQM 技术的 Golang CRUD 框架。
OQM(Object-Query Mapping)技术是一种通过对象构造数据库查询语句的数据库访问技术。
OQM提出了一种新方法来解决n个查询条件的动态组合问题,通过将具有n个字段的对象实例的2^n个赋值组合映射到n个查询条件的2^n个组合。
这种方式使得开发人员只需要定义和构造对象来构建动态查询语句,从而将 OQM 与 ORM 区分开来。这样的对象称为查询对象,也就是 GoooQo 中的 Qo。
GoooQo 名称中的前三个 O 代表 OQM 技术中的三个主要对象概念:
- Entity Object用于映射CRUD语句中的静态部分,如表名、列名等;
- Query Object用于映射CRUD语句中的动态部分,例如过滤条件,分页和排序子句;
- View Object用于映射复杂查询语句中的静态部分,如表名、列名、group-by子句和连接。
查看此文章了解更多详细信息。
查看此演示以进行快速浏览。
产品文档:https://goooqo.docs.doyto.win/
快速入门
1、初始化项目
用于go mod init初始化项目并添加GoooQo依赖:
go get -u github.com/doytowin/goooqo/rdb
2、初始化数据库连接和事务管理器:
package main |
3、创建数据访问接口
假设test.db表结构:
id name score memo deleted |
我们为该表定义了一个实体对象和一个查询对象:
import . "github.com/doytowin/goooqo/core" |
然后,我们创建一个 userDataAccess 接口来执行 CRUD 操作:
userDataAccess := rdb.NewTxDataAccessUserEntity
查询示例:
userQuery := UserQuery{ScoreLt: P(80)} |
更多CRUD示例请参考:https: //goooqo.docs.doyto.win/v/zh/api/crud
事务案例
TransactionManager#StartTransaction用于启动事务,然后手动提交或回滚事务:
tc, err := userDataAccess.StartTransaction(ctx) |
或者TransactionManager#SubmitTransaction通过回调函数提交事务:
err := tm.SubmitTransaction(ctx, func(tc TransactionContext) (err error) { |