最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

sql于navicat中能運(yùn)行在mybatis中不能運(yùn)行的解決方案

 更新時(shí)間:2024年01月27日 10:30:58   作者:_0.78  
這篇文章主要介紹了sql于navicat中能運(yùn)行在mybatis中不能運(yùn)行的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

其異常信息

如下:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:

Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, please exclude the tableName or statementId.

在本條sql中,于navicat中是可以正常運(yùn)行的,但是在mybatisplus中是不可以正常使用的

SELECT
	claim_key,
	claim_no,
	occur_time,
	amnt,
	b_name,
	city_branch_code,
	town_branch_code,
	cntr_no,
	opsn_name,
	opsn_id_no,
	rcpt_amnt,
	occur_result_code,
	accept_clerk_code,
	accept_branch_no,
	proc_clerk_no,
	proc_clerk_branch,
	chk_clerk_no,
	pol_code,
	claim_date,
	close_date,
	accept_channel,
	hospital_name,
	occur_1cls_code,
	lp_extracted 
FROM
	compensation_case 
WHERE
	stamp & gt;= DATE_FORMAT( "2021-02-08 00:00:00", 'yyyy-MM-dd %H:%m:%s' ) 
AND stamp & lt;= DATE_FORMAT( "2023-02-08 00:00:00", 'yyyy-MM-dd %H:%m:%s' ) 
AND lp_extracted = 0 
AND claim_proc_stat = 'E' 
AND pol_code IN ( 'DDD', 'DDE', '975' ) = 0

后經(jīng)排查,有兩個(gè)解決方案

1、使用注解 @SqlParser(filter = true) 就可以解決問題,其實(shí)現(xiàn)原理為略過 mybatis plus的SQL解析過濾,直接執(zhí)行sql,這個(gè)效果跟在navicat執(zhí)行sql的效果是一樣的。

2、修改sql語句,將in () = 0 修改為 not in,這樣子的話就可以在mybatis plus中就可以正常運(yùn)行了。

其具體的出錯原因還需要進(jìn)行debug查詢。

在debug的過程中,看到了mybatisplus的解析處理器中如下代碼:

public abstract class AbstractSqlParserHandler{
    /**
     * 攔截 SQL 解析執(zhí)行
     */
    protected void sqlParser(MetaObject metaObject) {
        //
        // @SqlParser(filter = true) 跳過該方法解析
        if (SqlParserHelper.getSqlParserInfo(metaObject)) {
            return;
        }
        //
    }
}

可以看到如果加上了@SqlParser(filter = true)注解的話,就會跳過SQL解析。

在底層sql解析中,可以看到sql在where解析的時(shí)候,拋出了異常,根據(jù)特殊符號進(jìn)行解析

net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "=" "="
    at line 33, column 51.

Was expecting one of:

    "&&"
    ";"
    "AND"
    "CONNECT"
    "EXCEPT"
    "FOR"
    "GROUP"
    "HAVING"
    "INTERSECT"
    "MINUS"
    "ORDER"
    "START"
    "UNION"
    <EOF>

特殊符號如下

"&&"
";"
"AND"
"CONNECT"
"EXCEPT"
"FOR"
"GROUP"
"HAVING"
"INTERSECT"
"MINUS"
"ORDER"
"START"
"UNION"

在解析sql的時(shí)候,對于如下sql是這么解析的

AND pol_code IN ( 'DDD', 'DDE', '975' ) = 0

根據(jù)IN解析之后,認(rèn)為下面這條SQL

AND pol_code IN ( 'DDD', 'DDE', '975' )

解析完成之后是一個(gè)完整的條件語句了。

那么這個(gè)條件語句它后面希望讀取到的字符會期望是特殊符號

"&&"
";"
"AND"
"CONNECT"
"EXCEPT"
"FOR"
"GROUP"
"HAVING"
"INTERSECT"
"MINUS"
"ORDER"
"START"
"UNION"

但是由于本條SQL在

AND pol_code IN ( 'DDD', 'DDE', '975' )

之后提供的是 =

AND pol_code IN ( 'DDD', 'DDE', '975' ) = 0 

它不是mybatis plus所期望特俗字符中的其中一個(gè),所以拋了異常,拋出異常的翻譯如下:

net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "=" "="
    at line 33, column 51.

Was expecting one of:
    "&&"
    ";"
    "AND"
    "CONNECT"
    "EXCEPT"
    "FOR"
    "GROUP"
    "HAVING"
    "INTERSECT"
    "MINUS"
    "ORDER"
    "START"
    "UNION"
---------------------------------------------------------------------------------

在第 33 行第 51 列遇到意外標(biāo)記:“=”“=”。期待以下之一:
    "&&"
    ";"
    "AND"
    "CONNECT"
    "EXCEPT"
    "FOR"
    "GROUP"
    "HAVING"
    "INTERSECT"
    "MINUS"
    "ORDER"
    "START"
    "UNION"

故解決該問題的辦法有三種:

1、添加注解@SqlParser(filter = true),那么跳過mybatis的sql解析,直接就可以運(yùn)行sql語句;

2、修改sql,將sql的 in () = 0 修改為 not in ();

3、修改源碼。

綜合考慮,選擇第二種做法,將sql修改為如下

SELECT
	claim_key,
	claim_no,
	occur_time,
	amnt,
	b_name,
	city_branch_code,
	town_branch_code,
	cntr_no,
	opsn_name,
	opsn_id_no,
	rcpt_amnt,
	occur_result_code,
	accept_clerk_code,
	accept_branch_no,
	proc_clerk_no,
	proc_clerk_branch,
	chk_clerk_no,
	pol_code,
	claim_date,
	close_date,
	accept_channel,
	hospital_name,
	occur_1cls_code,
	lp_extracted 
FROM
	compensation_case 
WHERE
	stamp & gt;= DATE_FORMAT( "2021-02-08 00:00:00", 'yyyy-MM-dd %H:%m:%s' ) 
AND stamp & lt;= DATE_FORMAT( "2023-02-08 00:00:00", 'yyyy-MM-dd %H:%m:%s' ) 
AND lp_extracted = 0 
AND claim_proc_stat = 'E' 
AND pol_code NOT IN ( 'DDD', 'DDE', '975' )

修改之后重新運(yùn)行,SQL正常使用。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Security?OAuth?Client配置加載源碼解析

    Spring?Security?OAuth?Client配置加載源碼解析

    這篇文章主要為大家介紹了Spring?Security?OAuth?Client配置加載源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • C#使用MySQLConnectorNet和MySQLDriverCS操作MySQL的方法

    C#使用MySQLConnectorNet和MySQLDriverCS操作MySQL的方法

    這篇文章主要介紹了C#使用MySQLConnectorNet和MySQLDriverCS操作MySQL的方法,相比普通方法能夠在Windows下簡化很多操作步驟,需要的朋友可以參考下
    2016-04-04
  • 關(guān)于maven項(xiàng)目中使用BCrypt加密方式

    關(guān)于maven項(xiàng)目中使用BCrypt加密方式

    BCrypt是一種基于Blowfish加密算法的密碼散列函數(shù),用于安全存儲和驗(yàn)證用戶密碼,它通過引入鹽和工作因子增加計(jì)算復(fù)雜度,有效防止彩虹表攻擊和破解,BCrypt具備適應(yīng)性工作因子、成本參數(shù)調(diào)整、迭代哈希和密鑰擴(kuò)展等特點(diǎn),被廣泛應(yīng)用于Web應(yīng)用程序的安全性設(shè)計(jì)中
    2024-10-10
  • 利用Java讀取二進(jìn)制文件實(shí)例詳解

    利用Java讀取二進(jìn)制文件實(shí)例詳解

    這篇文章主要給大家介紹了利用Java讀取二進(jìn)制文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • Java之URLEncoder、URLDecoder、Base64編碼與解碼方式

    Java之URLEncoder、URLDecoder、Base64編碼與解碼方式

    這篇文章主要介紹了Java之URLEncoder、URLDecoder、Base64編碼與解碼方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 對數(shù)據(jù)進(jìn)行分頁顯示到table中的實(shí)現(xiàn)方法

    對數(shù)據(jù)進(jìn)行分頁顯示到table中的實(shí)現(xiàn)方法

    這篇文章主要介紹了對數(shù)據(jù)進(jìn)行分頁顯示到table中的實(shí)現(xiàn)方法的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • SpringBoot-Admin實(shí)現(xiàn)微服務(wù)監(jiān)控+健康檢查+釘釘告警

    SpringBoot-Admin實(shí)現(xiàn)微服務(wù)監(jiān)控+健康檢查+釘釘告警

    本文主要介紹了SpringBoot-Admin實(shí)現(xiàn)微服務(wù)監(jiān)控+健康檢查+釘釘告警,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java使用反射操作數(shù)組示例

    Java使用反射操作數(shù)組示例

    這篇文章主要介紹了Java使用反射操作數(shù)組,結(jié)合實(shí)例形式分析了基于java反射機(jī)制操作數(shù)組的創(chuàng)建、賦值、輸出等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • Spring?Data?Jpa框架最佳實(shí)踐示例

    Spring?Data?Jpa框架最佳實(shí)踐示例

    這篇文章主要為大家介紹了Spring?Data?Jpa框架最佳實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-02-02
  • Spring Boot如何實(shí)現(xiàn)定時(shí)任務(wù)的動態(tài)增刪啟停詳解

    Spring Boot如何實(shí)現(xiàn)定時(shí)任務(wù)的動態(tài)增刪啟停詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何實(shí)現(xiàn)定時(shí)任務(wù)的動態(tài)增刪啟停的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論

吉隆县| 陇西县| 龙胜| 敦化市| 丘北县| 伊吾县| 江都市| 修武县| 兴城市| 禄丰县| 聂拉木县| 沧州市| 鹤庆县| 聊城市| 河北省| 凯里市| 清水河县| 大城县| 开平市| 宜良县| 鄂托克前旗| 青川县| 延川县| 前郭尔| 康保县| 海安县| 韩城市| 万源市| 高陵县| 阿尔山市| 封丘县| 石棉县| 台山市| 老河口市| 米林县| 文化| 宁夏| 西乌| 夹江县| 延津县| 澄城县|