${key}有值,
${key,jdbcType=VARCHAR}没有值
总结:${}使用时不要指定jdbcType等属性,指定这些反而取不到值,这也是跟#{}的一个区别。以上只是开发中遇到的情况,具体什么原因导致,可调试一下mybatis源码查看原因。
另一个问题:当where col1 link '#{key}'时会报异常:Parameter index out of range (2 > number of parameters, which is 1).重点是那对单引号,这是因为mybatis预编译时会把#{}编译成?,所以这段sql最后被编译成了where col1 link '?',当set参数的时候会把'?'当成一个sql条件值去处理,而不会把它当成一个占位符,所以找不到匹配的参数占位符就导致了异常。