“class java.lang.String”中名为“tablename”的属性没有getter

“class java.lang.String”中名为“tablename”的属性没有getter,java,mybatis,Java,Mybatis,当我使用mybatis时,我发现“class java.lang.String”中没有名为“tablename”的属性的getter 我的mapper xml如下所示: <mapper namespace="com.company.mapper.BasicMapper"> <update id="dropTable" parameterType="String"> DROP TABLE ${tablename} </update>

当我使用mybatis时,我发现“class java.lang.String”中没有名为“tablename”的属性的getter

我的mapper xml如下所示:

<mapper namespace="com.company.mapper.BasicMapper">
    <update id="dropTable" parameterType="String">
        DROP TABLE ${tablename}
    </update>
</mapper>
public interface BasicMapper {
    void dropTable(String tablename);
}
我是这样使用它的:

public void dropTable(String tablename) {
    basicMapper.dropTable(tablename);
}
我试图用{tablename}替换${tablename},但没有用。我怎样才能让它工作

<mapper namespace="com.company.mapper.BasicMapper">
<update id="dropTable" parameterType="string">
    DROP TABLE ${tablename}
</update>
使用字符串而不是字符串
javatype字符串别名作为mybatis中的字符串。

使用${u parameter}而不是${tablename}

如果您只想传递字符串对象并使用传递参数的名称,就像在映射函数中一样,您需要使用{}而不是${},并且它只适用于具有一个参数的函数

例如:

List<ItemMeta> getItemMetaByName(String itemName);
映射为:

<select id="getItemMetaByName" parameterType="String" resultMap="itemMapper">
        select * from ItemMeta where name like #{itemName}
</select>
以下映射将引发异常:

<select id="getItemByName" parameterType="String" resultMap="itemMapper">
            select * from ItemMeta where name like ${itemName}
</select>

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'itemName' in 'class java.lang.String'
    at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:377)
    at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:167)
    at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:149)

当parameterType为string时,请使用${value}而不是${tablename}。

对参数使用以下注释:

public interface BasicMapper {
    void dropTable(@Param("tablename") String tablename);
}

您应该传递具有tablename属性的类的自定义对象。否则,如何向INSERT或UPDATE语句传递多个值,例如firstName、LastName等?@Andreas谢谢,我尝试了你的方法,它成功了。但我想知道是否有一种方法可以只传递一个字符串实例而不是一个具有tablename属性的对象。我不知道。您必须阅读MyBatis文档,看看它是否可以做到这一点;您的代码建议可能是正确的,但在某些情况下,它会给出更好的答案;例如,您可以解释提议的更改如何以及为什么会解决提问者的问题,可能包括相关文档的链接。这将使它对他们更有用,也对其他正在寻找类似问题解决方案的网站读者更有用。