2016-08-15 10 views
0

mybatisを使用しているときにエラーThere is no getter for property named 'tablename' in 'class java.lang.String'が発生しました。'class java.lang.String'に 'tablename'という名前のプロパティのゲッターがありません

マイマッパーXMLは、このようなものです:

<mapper namespace="com.company.mapper.BasicMapper"> 
    <update id="dropTable" parameterType="String"> 
     DROP TABLE ${tablename} 
    </update> 
</mapper> 

インタフェースは、このようなものです:私は${tablename}を交換しようとした

public void dropTable(String tablename) { 
    basicMapper.dropTable(tablename); 
} 

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

が、私はこの方法でそれを使います#{tablename}と表示されていましたが、それは役に立ちませんでした。どうすればそれを動作させることができますか?

+0

あなたはのカスタムオブジェクトを渡すことになっています'tablename'プロパティを持つクラスです。それ以外の場合、複数の値をどのように渡しますか? 'firstName'、' LastName'などを 'INSERT'または' UPDATE'文に追加しますか? – Andreas

+0

@アンドレアスありがとう、私はあなたの方法を試み、それは働いた。しかし、 'tablename'プロパティを持つObjectの代わりにStringインスタンスを渡す方法があるのだろうかと思います。 – Searene

+0

わからない。それができるかどうかを確認するには、MyBatisのマニュアルを参照する必要があります。 – Andreas

答えて

0
<mapper namespace="com.company.mapper.BasicMapper"> 
<update id="dropTable" parameterType="string"> 
    DROP TABLE ${tablename} 
</update> 

MyBatisの中に "文字列" として使用する "文字列" ではない "文字列" http://www.mybatis.org/mybatis-3/configuration.html#typeAliases JavaTypeが "文字列" の別名。

0

使用${_parameter}代わりにあなたが唯一、Stringオブジェクトを渡し、あなたの代わりに$ {}の#{}を使用する必要があるマッピング機能のように渡されたパラメータの名前を使用したい場合は${tablename}

+0

こんにちはhewei、とオーバーフローをスタックにようこそ;あなたのコードの提案は正しいかもしれませんが、いくつかの文脈ではより良い答えになります。たとえば、この提案された変更がどのようにしてなぜ問題の問題を解決するのか、そしておそらく関連文書へのリンクを含む理由を説明することができます。そうすれば、彼らにとってより有用になり、同様の問題に対する解決策を探している他のサイトの読者にとってもより有用になります。 –

1

のそれ1つのパラメータを持つ関数でのみ動作します。

のような:としてマッピングして

List<ItemMeta> getItemMetaByName(String itemName); 

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

metioned例外がスローされます次のマッピング:

<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) 
関連する問題