今天在操作mybatis动态删除某一张表的时候,在控制台报了一个错误,有点懵逼,动态创建表的时候都还没事的,错误如下:
There is no getter for property named 'tempTable' in 'class java.lang.String'
XML代码:
<update id="deleteTable" parameterType="java.lang.String">
DROP TABLE ${tempTable}
</update>
mapper接口代码:
void deleteTable(String tempTable);
后来经过了排查,发现自己忽略了mybatis的一个机制,修改了一下mapper接口代码:
void deleteTable(@Param(value = "tempTable") String tempTable);
加了一个注解
Param
,加上了参数名
原因:
Mybatis默认采用ONGL解析参数,所以会自动采用对象树的形式取string.tempTable值,发现并没有,所以引起报错,解决办法就是加上注解参数说明。
附上MySql判断一个表是否存在的语句:
SELECT table_name FROM information_schema.TABLES WHERE table_name ='tablename';