【MyBatis】postgresql中json类型数据问号?问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>

猜你喜欢

转载自blog.csdn.net/Mr_EvanChen/article/details/82793024
今日推荐