【MyBatis】postgresql中json型別資料問號?問題
阿新 • • 發佈:2018-12-11
問題描述
有個需求是需要判斷某個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>