Mybatis使用时,当查询参数存在于select条件时

下面查询,para参数是传入的,通过这个参数查询不同的列

这时候是报错的Translating SQLException with SQL state '42000', error code '1064', message [You have an error in your SQL syntax;

这个错误网上给的解释和问题有点儿不同,细心查找下发现,因为#{para,jdbcType=VARCHAR}中,在形成语句的时候,会把para这个参数外面加上“”双引号,这本是防注入用的,当用在select查询字段中时,自然让数据库辨认不出来。这时可以使用相同的$来替代。

$同样传入参数,但不会给外面加上引号。运行。


引号问题解决,不过报新的错误

nested exception is org.apache.ibatis.binding.BindingException: Parameter 'VARCHAR' not found.

这其中,BindingException有多种原因,暂且不明,但是VARCHAR not found很好看,因为一般就是select了没有的字段,才会出现,这下再看这个para参数,后面的jdbcType被指定为VARCHATR,一定是这里出现问题。

这里考虑:

        Q1.jdbcType是什么作用?

        Q2.jdbcType应该什么时候用?

        Q3.jdbcType是如何实现的?

        A1:作用大致为确定参数的类型,一般常用的是    INTEGER    VARCHAR    TIMESTAMP    DATE


        A2:参数为空的时候,需要指定类型,不然会报错。

        A3:网上并无明确。


因此,去掉这个,再尝试。

运行成功了。

推测:根据    Parameter 'VARCHAR' not found.这个来看,有可能在运行时加到了前面参数的后面,会被语句读到,但是一般不会读,但是在select中就现了原形了,姑且这样猜想,请懂得或者吊大的朋友留言说下。

你可能感兴趣的:(Mybatis使用时,当查询参数存在于select条件时)