問(wèn)題描述
在使用mybatis-plus的過(guò)程中,有一個(gè)jsonb字段使用了jsonb_exists_any (field_name, text[])作為where條件查詢(xún),執(zhí)行sql如下:
SELECT *?FROM table_name?
WHERE??jsonb_exists_any (field_name, ARRAY['110544709344', '12564892357'])
上面的sql在navicat中執(zhí)行正常,所以sql沒(méi)有問(wèn)題,但是在mybatis-plus的xml文件中使用就會(huì)報(bào)錯(cuò),異常信息如下:
Caused by: net.sf.jsqlparser.JSQLParserException: Encountered unexpected token: "(" "("
at line 4, column 33.
Was expecting one of:
"&"
"&&"
"::"
";"
"<<"
">>"
"AND"
"COLLATE"
"CONNECT"
"EXCEPT"
"FOR"
"GROUP"
"HAVING"
"INTERSECT"
"MINUS"
"OR"
"ORDER"
"START"
"UNION"
"["
"^"
"|"
<EOF>
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:188) ~[jsqlparser-4.0.1-SNAPSHOT.jar:na]
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:176) ~[jsqlparser-4.0.1-SNAPSHOT.jar:na]
at com.baomidou.mybatisplus.core.parser.AbstractJsqlParser.parser(AbstractJsqlParser.java:62) ~[mybatis-plus-core-3.4.2.jar:3.4.2]
... 139 common frames omitted
解決方案
方案1:在網(wǎng)上看了很多解決方式,說(shuō)是因?yàn)镸yBatis_Plus框架中,有多租戶(hù)的功能(也就是通過(guò)sql攔截器注入租戶(hù)信息),MP會(huì)進(jìn)行數(shù)據(jù)權(quán)限的過(guò)濾導(dǎo)致的,可以使用下面的注解(+配置)解決:
// Mybatis-plus 3.4.x以前的的版本
@SqlParser(filter = true)
// 如果Mybatis-plus版本是3.1.1以上的,直接添加@SqlParser注解即可,但如果是3.1.1以下版本,還需要在資源文件添加如下配置:
# 開(kāi)啟 SQL 解析緩存注解生效
mybatis-plus:
global-config:
sql-parser-cache: true
// Mybatis-plus 3.4.x之后的版本,@SqlParser已過(guò)期,可以直接使用下面的注解代替
@InterceptorIgnore(tenantLine = "true")
方案2: 由于我們的系統(tǒng)本身就需要多租戶(hù)功能,所以無(wú)法通過(guò)上面的方式解決,在網(wǎng)上又找了下,看到了通過(guò)升級(jí)com.github.jsqlparser:jsqlparser sql解析器,解決依賴(lài)沖突的方案來(lái)解決:
https://blog.csdn.net/xiaozhang_man/article/details/127193780
最終方案:?由于不敢隨便升級(jí)依賴(lài)包,怕引入新的問(wèn)題,我最終的解決方案是不使用array函數(shù),避開(kāi)jsqlparser不支持某些關(guān)鍵字或函數(shù),修改后的sql如下:
SELECT * FROM table_name
WHERE??jsonb_exists_any (field_name, '{110544709344, 12564892357}')文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-787975.html
擴(kuò)展知識(shí):jsonb_exists_any只支持字符串數(shù)組(text[])的檢索,不支持integer、bigint等數(shù)值類(lèi)型,在構(gòu)建json數(shù)據(jù)結(jié)構(gòu)的時(shí)候需要注意下。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-787975.html
到了這里,關(guān)于Mybatis-plus解析sql發(fā)生異常:net.sf.jsqlparser.JSQLParserException的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!