-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
✨ docs(
README.md
): 添加开发者文档,介绍 QueryHelper、QueryJsonHelper 和 QueryFr…
…agment 的使用方法。
- Loading branch information
Showing
1 changed file
with
114 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -51,4 +51,118 @@ pull request. | |
keytool -importkeystore -srckeystore plate.p12 -srcstoretype pkcs12 -srcalias 1 -destkeystore plate.jks -deststoretype jks -deststorepass 123456 -destalias plate | ||
``` | ||
|
||
### 开发者文档:使用 QueryHelper、QueryJsonHelper 和 QueryFragment | ||
|
||
#### 1. 概述 | ||
|
||
`QueryHelper`、`QueryJsonHelper` 和 `QueryFragment` 是三个工具类,它们共同协作以帮助开发者构建和执行动态 SQL 查询,特别是涉及 | ||
JSON 字段的查询。这些工具类提供了一种安全、灵活的方式来处理数据库查询,减少了 SQL 注入的风险,并简化了查询构建过程。 | ||
|
||
#### 2. QueryFragment | ||
|
||
`QueryFragment` 是一个核心类,用于构建 SQL 查询的各个部分,包括选择的列、查询条件、排序和分页。 | ||
|
||
**使用案例:** | ||
|
||
```java | ||
QueryFragment queryFragment = QueryFragment.withNew() | ||
.addColumn("id", "name", "email") | ||
.addQuery("users") | ||
.addWhere("age > :age") | ||
.addOrder("name ASC"); | ||
|
||
queryFragment. | ||
|
||
put("age",18); // 绑定参数 | ||
|
||
String sqlQuery = queryFragment.querySql(); // 生成 SQL 查询字符串 | ||
``` | ||
|
||
#### 3. QueryHelper | ||
|
||
`QueryHelper` 提供了从对象构建 `QueryFragment` 的静态方法,特别是当对象包含分页信息时。 | ||
|
||
**使用案例:** | ||
|
||
```java | ||
UserRequest userRequest = new UserRequest(); | ||
userRequest. | ||
|
||
setUsername("john"); | ||
|
||
Pageable pageable = PageRequest.of(0, 10); | ||
|
||
QueryFragment queryFragment = QueryHelper.query(userRequest, pageable); | ||
String sqlQuery = queryFragment.querySql(); | ||
``` | ||
|
||
#### 4. QueryJsonHelper | ||
|
||
`QueryJsonHelper` 专注于处理 JSON 字段的查询,允许开发者构建针对 JSON 数据的 SQL 查询条件。 | ||
|
||
**使用案例:** | ||
|
||
```java | ||
Map<String, Object> jsonParams = new HashMap<>(); | ||
jsonParams. | ||
|
||
put("extend.requestBody.nameEq","Test User"); | ||
jsonParams. | ||
|
||
put("extend.emailEq","[email protected]"); | ||
|
||
QueryFragment queryFragment = QueryJsonHelper.queryJson(jsonParams, "a"); | ||
String sqlQuery = queryFragment.querySql(); | ||
``` | ||
|
||
#### 5. 全文搜索用例 | ||
|
||
对于全文搜索,可以使用 `QueryFragment` 的 `addQuery` 方法来添加全文搜索的条件。 | ||
|
||
**使用案例:** | ||
|
||
```java | ||
QueryFragment queryFragment = QueryFragment.withNew() | ||
.addColumn("id", "name", "email") | ||
.addQuery("users") | ||
.addWhere("to_tsvector('english', bio) @@ to_tsquery('english', :search)") | ||
.addOrder("ts_rank(to_tsvector('english', bio), to_tsquery('english', :search)) DESC"); | ||
|
||
queryFragment. | ||
|
||
put("search","test user"); // 绑定全文搜索参数 | ||
|
||
String sqlQuery = queryFragment.querySql(); // 生成包含全文搜索的 SQL 查询字符串 | ||
``` | ||
|
||
在这个例子中,`to_tsvector` 和 `to_tsquery` 是 PostgreSQL 的全文搜索函数,用于将文本转换为向量和查询字符串。 | ||
|
||
#### 6. 集成 UserRequest | ||
|
||
`UserRequest` 类扩展了 `User` 类,并添加了额外的属性和方法,用于处理用户请求。 | ||
|
||
**使用案例:** | ||
|
||
```java | ||
UserRequest userRequest = new UserRequest(); | ||
userRequest. | ||
|
||
setUsername("john"); | ||
userRequest. | ||
|
||
setSecurityCode("secure-code"); | ||
|
||
// 将 UserRequest 转换为 QueryFragment | ||
QueryFragment queryFragment = userRequest.toParamSql(); | ||
String sqlQuery = queryFragment.querySql(); | ||
``` | ||
|
||
在这个例子中,`toParamSql` 方法将 `UserRequest` 对象转换为 `QueryFragment` 实例,以便构建 SQL 查询。 | ||
|
||
#### 7. 注意事项 | ||
|
||
- 确保在使用这些工具类时,数据库连接和配置已经正确设置。 | ||
- 对于全文搜索,确保数据库支持全文搜索功能,并且已经创建了相应的索引。 | ||
- 在绑定参数时,确保参数名称和值与查询中的占位符匹配。 | ||
|
||
通过这些工具类,开发者可以更方便地构建和执行 SQL 查询,同时保持代码的安全性和可维护性。 |