mybatis中子查询时column传参问题

单参数传递:可以直接使用column="col"的形式将参数传递
多参数传递:column="{prop1=col1,prop2=col2}",其中prop1,prp2为自查询中要用#{}插入的参数名称

问题发现

对于多参数传递过程中,如果传的是string类型的变量,会报出There is no setter for property named 'byte' in 'class java.lang.String'错误,但如果是int类型或者是单参数的string类型传递,则不会出现这样的错误

问题解决

发现是在子查询中使用parameterType="string" 限定了传入的参数类型,将这个可选项去掉,问题解决

原因猜测

对于单参数传递,内部实现直接采用\(=\)的直接赋值方法,因此单参数时即使限定了parameterType="string" 不会报错

对于多参数传递,如果使用了parameterType,则会将传入的prop视为该类型的成员变量名,调用其set方法进行赋值,如果没有使用,默认为unset,则对传入参数类型未知,内部实现也直接采用\(=\)的直接赋值方法

上一篇:MYSQL常用DDL


下一篇:代码生成器