版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_EvanChen/article/details/82793024
问题描述
有个需求是需要判断某个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>