1. 程式人生 > >【MyBatis】postgresql中json型別資料問號?問題

【MyBatis】postgresql中json型別資料問號?問題

問題描述

      有個需求是需要判斷某個text是否在json型別資料中,因此打算採用?操作符來實現。在Navicat中嘗試確實是可以的。如下:

      因此,我在mapper檔案中就加入如下方法,但執行卻報錯:org.postgresql.util.PSQLException: 未設定引數值 2 的內容。

   <select id="findRuleByDimension" resultMap="ruleMap" parameterType="java.lang.String">
        SELECT * FROM rule ps WHERE ps.used_dimension_new::jsonb ? #{dimension, jdbcType=VARCHAR}
    </select>

問題原因

     從報錯提示的SQL語句可以看出,SQL語句中出現了兩個問號?,我們知道引數傳進mapper中後會變成問號,類似佔位符。後一  個?代表傳進來的引數,前一個?代表著操作符。未設定引數值2的內容說明MyBatis認為這裡是有兩個引數,也就是說把操作符?當成了引數,因此報錯。

解決辦法

     其實很簡單,在MyBatis中將一個?改為兩個??即可。

 <select id="findRuleByDimension" resultMap="ruleMap" parameterType="java.lang.String">
        SELECT * FROM rule ps WHERE ps.used_dimension_new::jsonb ?? #{dimension, jdbcType=VARCHAR}
 </select>