APIJSON [Report] 怎么对关联查询字段进行模糊匹配达到模糊关联的效果

wkftcu5l  于 4个月前  发布在  其他
关注(0)|答案(5)|浏览(116)

APIJSON Version/APIJSON 版本号

6.0.0

Database Type & Version/数据库类型及版本号

msyql8.0

Environment/环境信息

- JDK/基础库:1.8
- OS/系统:win11

APIAuto Screenshots/APIAuto 请求与结果完整截屏

评论传

Current Behavior/问题描述

怎么在对关联查询字段进行模糊匹配

Expected Behavior/期望结果

能够查询出模糊匹配的关联字段查询

Any additional comments?/其它补充说明?

No response

fd3cxomn

fd3cxomn1#

改成

想要的结果就是不仅相等的82001能够查询,还能查询出182001 820010此类数据,但是目前没有找到相关查询方式

gjmwrych

gjmwrych2#

请问怎么支持此类查询语法,为查询到相关内容;

guicsvcw

guicsvcw3#

不支持你截屏那样拼接,你把被关联引用字段的值提前拼接成这样就行了,
可以用 SQL 函数
"@column": "concat('%',id,'%'):id"

或 APIJSON 远程函数
"id()": "wrapPercent(id)" // 假设你写了这个远程函数,return "%" + idVal + "%"

然后要用模糊搜索的关键词,看通用文档!
"userId$@": "User/id"

#36

ymdaylpp

ymdaylpp4#

还可以这样

"content%$@": "/User/name"

"content%_$@": "/User/name"

"content_?$@": "/User/name"

http://apijson.cn/api/?type=JSON&json=%7B%22User%22%3A%7B%22%40column%22%3A%22id%2Cname%22%2C%22id%22%3A38710%7D%2C%22Moment%22%3A%7B%22content%25%24%40%22%3A%22%2FUser%2Fname%22%2C%22%40explain%22%3Atrue%7D%7D%0A

具体见
APIJSON/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java

Lines 3512 to 3567 in 31b58e6

| | /**WHERE key LIKE 'value' |
| | * @param key |
| | * @param column |
| | * @param value |
| | * @return key LIKE 'value' |
| | */ |
| | @JSONField(serialize = false) |
| | publicStringgetLikeString(@NotNullStringkey, @NotNullStringcolumn, Stringvalue) { |
| | Stringk = key.substring(0, key.length() - 1); |
| | charr = k.charAt(k.length() - 1); |
| | |
| | charl; |
| | if (r == '%' || r == '' || r == '?') { |
| | k = k.substring(0, k.length() - 1); |
| | |
| | l = k.charAt(k.length() - 1); |
| | if (l == '%' || l == '
' || l == '?') { |
| | if (l == r) { |
| | thrownewIllegalArgumentException(key + ":value 中字符 " + k + " 不合法!key$:value 中不允许 key 中有连续相同的占位符!"); |
| | } |
| | |
| | k = k.substring(0, k.length() - 1); |
| | } |
| | elseif (l > 0 && StringUtil.isName(String.valueOf(l))) { |
| | l = r; |
| | } |
| | |
| | if (l == '?') { |
| | l = 0; |
| | } |
| | if (r == '?') { |
| | r = 0; |
| | } |
| | } |
| | else { |
| | l = r = 0; |
| | } |
| | |
| | if (l > 0 || r > 0) { |
| | if (value == null) { |
| | thrownewIllegalArgumentException(key + ":value 中 value 为 null!key$:value 中 value 不能为 null,且类型必须是 String !"); |
| | } |
| | |
| | value = value.replaceAll("\\", "\\\\"); |
| | value = value.replaceAll("\%", "\\%"); |
| | value = value.replaceAll("\", "\\"); |
| | if (l > 0) { |
| | value = l + value; |
| | } |
| | if (r > 0) { |
| | value = value + r; |
| | } |
| | } |
| | |
| | returngetKey(column) + " LIKE " + getValue(key, column, value); |
| | } |

jgzswidk

jgzswidk5#

自己多看文档多尝试,我现在在 GitHub 上可能一周只能回你一次消息,
如果需要及时的回复,请登记贵公司,加企业支持专群
#187

相关问题