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

时间:2016-08-15 01:50:22

标签: java mybatis

当我使用mybatis时,我收到错误There is no getter for property named 'tablename' in 'class java.lang.String'

我的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},但它没有帮助。我怎样才能使它发挥作用?

5 个答案:

答案 0 :(得分:3)

如果你只想传递一个String对象并使用传递参数的名称,就像在映射函数中一样,你需要使用#{}而不是$ {},它只适用于有一个参数的函数。

如:

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)

答案 1 :(得分:1)

使用${_parameter}代替${tablename}

答案 2 :(得分:0)

function my_autoloader($class) {
    require_once 'classes/' . $class . '.php';
}

spl_autoload_register('my_autoloader');

使用&#34; string&#34;不是&#34;字符串&#34; http://www.mybatis.org/mybatis-3/configuration.html#typeAliases javatype&#34; String&#34;别名为&#34; string&#34;在mybatis。

答案 3 :(得分:0)

当parameterType为“字符串”时,请使用${value}而不是${tablename}

答案 4 :(得分:0)

对参数使用以下注释:

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