> For the complete documentation index, see [llms.txt](https://goooqo.docs.doyto.win/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://goooqo.docs.doyto.win/zh/readme.md).

# GoooQo介绍

GoooQo是一个基于OQM技术的Go语言版的增删查改框架。 ​&#x20;

OQM是一项通过对象构建数据库查询语句的数据库访问技术。

OQM技术采用一种新的方法解决了n个查询条件的动态组合问题，从而使得开发人员仅需要定义和构造查询对象即可实现动态查询语句的构造。

GoooQo名称中Qo即为查询对象，前三个o代表了OQM技术中的三个主要的对象概念：

* `Entity Object` 实体对象用于映射SQL语句中的静态部分，例如表名和列名；
* `Query Object` 查询对象用于映射SQL语句中的动态部分，例如过滤条件、分页子句和排序子句；
* `View Object` 视图对象用于映射复杂查询语句中的静态部分，例如表名、列名、嵌套视图和分组子句。

### 查询条件的动态组合问题 ​&#x20;

一个提供了n个查询条件的查询接口，一共可以有2^n种参数组合的查询请求来构造对应的查询语句。&#x20;

一个定义有n个字段的对象，其实例也有2^n种不同的赋值方式。

通过对象实例的2^n种赋值组合可以映射2^n种查询条件的组合。&#x20;

OQM技术发现并利用这一特性，提出一种将对象的每个字段分别映射为一个查询条件、进而根据字段赋值构造查询子句的方法，称为查询对象映射方法，所提到的对象被称为查询对象。

通过这种方法，我们可以把构造查询参数的逻辑和构造查询子句的逻辑进行分离，从而把构造查询子句的逻辑封装为通用的功能，开发人员只需要关注查询对象的定义和赋值即可。 ​

### 查询条件的定义

一个基本的查询条件由列名、比较运算符和值组成，实体中的字段与列名一一对应。当我们使用别名来表示比较运算符，并把它们作为后缀与实体对象中的字段组合起来，就得到了查询对象的字段。因此得到如下公式：

$$
Entity+Suffix=Query
$$

示例：

<figure><picture><source srcset="/files/VlrQRQKdZvEyeLw1xNuC" media="(prefers-color-scheme: dark)"><img src="/files/BCYCc34ZTeKbsVhsVHAl" alt="Entity+Suffix=Query"></picture><figcaption><p>Entity+Suffix=Query</p></figcaption></figure>

#### 欢迎交流

<div align="left"><figure><img src="/files/1ijHxEJqqndz9llZJEAx" alt="" width="173"><figcaption><p>QQ</p></figcaption></figure></div>
