中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MybatisPlusException:Failed?to?process,Error?SQL異常報錯如何解決

發布時間:2023-03-08 10:39:09 來源:億速云 閱讀:1364 作者:iii 欄目:開發技術

今天小編給大家分享一下MybatisPlusException:Failed to process,Error SQL異常報錯如何解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、問題描述

 Error querying database.  Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: SELECT  
        goods_spu.`id`,
        goods_spu.`tenant_id`,
        goods_spu.`shop_id`,
        goods_spu.`spu_code`,
        goods_spu.`name`,
        goods_spu.`sell_point`,
        null `description`,
        goods_spu.`category_first`,
        goods_spu.`category_second`,
        goods_spu.`category_shop_first`,
        goods_spu.`category_shop_second`,
        goods_spu.`pic_urls`,
        goods_spu.`shelf`,
        goods_spu.`sort`,
        goods_spu.`price_down`,
        goods_spu.`price_up`,
        goods_spu.`sale_num`,
        goods_spu.`create_time`,
        goods_spu.`update_time`,
        goods_spu.`spec_type`,
        goods_spu.`del_flag`,
        goods_spu.`points_give_switch`,
        goods_spu.`points_give_num`,
        goods_spu.`points_deduct_switch`,
        goods_spu.`points_deduct_scale`,
        goods_spu.`points_deduct_amount`,
        goods_spu.`freight_templat_id`,
        goods_spu.`verify_status`,
        goods_spu.`verify_detail`,
        goods_spu.`channel`,
        goods_spu.`self_pick_addr_id`
     , sum(s.stock) as stock
        FROM goods_spu as goods_spu
        left join goods_sku as s  on goods_spu.id=s.spu_id
        group by goods_spu.id;
         WHERE  goods_spu.`name` LIKE CONCAT('%',?,'%') ### Cause: 
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
    at com.sun.proxy.$Proxy180.selectList(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
    at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)
    at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
    at com.sun.proxy.$Proxy195.selectPage1WithStock(Unknown Source)
    at com.joolun.cloud.mall.admin.service.impl.GoodsSpuServiceImpl.page1WithStock(GoodsSpuServiceImpl.java:72)
    at com.joolun.cloud.mall.admin.service.impl.GoodsSpuServiceImpl$$FastClassBySpringCGLIB$$cb4904f8.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
    at com.joolun.cloud.mall.admin.service.impl.GoodsSpuServiceImpl$$EnhancerBySpringCGLIB$$936a8c1a.page1WithStock(<generated>)
    at com.joolun.cloud.mall.admin.controller.GoodsSpuController.getGoodsSpuPageWithStock(GoodsSpuController.java:82)
    at com.joolun.cloud.mall.admin.controller.GoodsSpuController$$FastClassBySpringCGLIB$$4d6ff776.invoke(<generated>)

MybatisPlusException:Failed?to?process,Error?SQL異常報錯如何解決

二、需求描述

運營提出,對首頁進行店鋪裝修時,需看到庫存字段,

這樣不會上到了0庫存的品,導致了用戶下單體驗的問題。

因此,在Mybatis Plus中新增了庫存字段以展示

三、定位錯誤代碼

因為原來這個接口是是做了一個基于Mybatis Plus的分頁,但是因為庫存這個字段,存在sku的表中

因此使用left join ,但是又因為SPU與SKU之間是一對多的關系,因此會有多個0庫存的情況,

這里采用了count進行加和的方式,不得不說,設計的非常巧妙,因為加和起來庫存都為0的話,說明肯定是0庫存的呀。

因此有了以下代碼

<select id="selectPage1WithStock" resultMap="goodsSpuMap5">
		SELECT <include refid="goodsSpuSql2"/>, sum(s.stock) as stock
		FROM goods_spu as goods_spu
		left join goods_sku as s  on goods_spu.id=s.spu_id
		group by goods_spu.id;
		<where>
			<if test="query.shopId != null">
				AND goods_spu.`shop_id` = #{query.shopId}
			</if>
			<if test="query.shelf != null">
				AND goods_spu.`shelf` = #{query.shelf}
			</if>
			<if test="query.verifyStatus != null">
				AND goods_spu.`verify_status` = #{query.verifyStatus}
			</if>
			<if test="query.categorySecond != null">
				AND goods_spu.`category_second` = #{query.categorySecond}
			</if>
			<if test="query.name != null">
				AND goods_spu.`name` LIKE CONCAT('%',#{query.name},'%')
			</if>
			<if test="query.spuCode != null">
				AND goods_spu.`spu_code` = #{query.spuCode}
			</if>
			<if test="query.specType != null">
				AND goods_spu.`spec_type` = #{query.specType}
			</if>
			<if test="query.pointsGiveSwitch != null">
				AND goods_spu.`points_give_switch` = #{query.pointsGiveSwitch}
			</if>
			<if test="query.pointsDeductSwitch != null">
				AND goods_spu.`points_deduct_switch` = #{query.pointsDeductSwitch}
			</if>
		</where>
	</select>

以下代碼看起來,沒有問題,但是確有一個問題,注意在,存在一個分號,

我們都知道,分號是一段SQL語句的結尾,所以,

以上代碼肯定是后面的語句肯定是執行不到的

但是到底是group by 語句放在前面呢?還是where 語句在前,這個問題,可以直接在數據庫驗證下即可

四、數據庫驗證

寫法一:WHERE在前,GROUP BY在后

SELECT
	goods_spu.*, sum(s.stock) AS stock
FROM
	goods_spu AS goods_spu
LEFT JOIN goods_sku AS s ON goods_spu.id = s.spu_id
WHERE
	goods_spu.`name` LIKE CONCAT('%', 'A', '%')
GROUP BY
	goods_spu.id

發現,數據能夠正常查詢

MybatisPlusException:Failed?to?process,Error?SQL異常報錯如何解決

寫法二:GROUP BY在前,WHERE在后

會發現無法正常查詢出來結果

MybatisPlusException:Failed?to?process,Error?SQL異常報錯如何解決

五、修改Mybatis中的SQL語句

經過以上的驗證,得到了最終修改之后的SQL語句如下

<select id="selectPage1WithStock" resultMap="goodsSpuMap5">
        SELECT
        <include refid="goodsSpuSql2"/>,
        sum(s.stock) as stock
        FROM goods_spu as goods_spu
        left join goods_sku as s on goods_spu.id=s.spu_id
        <where>
            <if test="query.shopId != null">
                AND goods_spu.`shop_id` = #{query.shopId}
            </if>
            <if test="query.shelf != null">
                AND goods_spu.`shelf` = #{query.shelf}
            </if>
            <if test="query.verifyStatus != null">
                AND goods_spu.`verify_status` = #{query.verifyStatus}
            </if>
            <if test="query.categorySecond != null">
                AND goods_spu.`category_second` = #{query.categorySecond}
            </if>
            <if test="query.name != null">
                AND goods_spu.`name` LIKE CONCAT('%',#{query.name},'%')
            </if>
            <if test="query.spuCode != null">
                AND goods_spu.`spu_code` = #{query.spuCode}
            </if>
            <if test="query.specType != null">
                AND goods_spu.`spec_type` = #{query.specType}
            </if>
            <if test="query.pointsGiveSwitch != null">
                AND goods_spu.`points_give_switch` = #{query.pointsGiveSwitch}
            </if>
            <if test="query.pointsDeductSwitch != null">
                AND goods_spu.`points_deduct_switch` = #{query.pointsDeductSwitch}
            </if>
        </where>
        group by goods_spu.id
    </select>

六、修復后的業務驗證

經過測試驗證,分頁也能正常,而且模糊查詢也順利。

MybatisPlusException:Failed?to?process,Error?SQL異常報錯如何解決

七、分析錯誤原因

出現該問題的原因有兩個

(1)對Mybatis的 where標簽 和 if 標簽不熟悉

where標簽的三個特性:

where標簽可以被解析為where 關鍵字只有if標簽有內容的情況下才會插入where子句;第二,若子句的開通為 “AND” 或 “OR”,where標簽會將它替換去除; (2)開發完成代碼后,應該做回歸測試

回歸測試是指修改了舊代碼后,重新進行測試以確認修改沒有引入新的錯誤或導致其他代碼產生錯誤。

以上就是“MybatisPlusException:Failed to process,Error SQL異常報錯如何解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五峰| 通河县| 闵行区| 霍城县| 丹凤县| 德阳市| 广河县| 资讯| 新疆| 洪江市| 漳州市| 凤阳县| 精河县| 嵊州市| 荣昌县| 会东县| 东乌| 颍上县| 汝州市| 郧西县| 岚皋县| 许昌市| 绥滨县| 巴林左旗| 高碑店市| 调兵山市| 梨树县| 清原| 安宁市| 肥东县| 秦皇岛市| 金阳县| 义马市| 苏尼特左旗| 镇巴县| 秭归县| 承德市| 台山市| 武威市| 逊克县| 潮州市|