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