1

PostgreSQL を使用して MyBatis で select を実行すると、次のエラーが発生します。

### The error may exist in data/mapper.xml
### The error may involve Transaccion.selectDeFraude-Inline
### The error occurred while setting parameters
### SQL: SELECT transaction_id, card_number, transaction_date, fraud FROM transactions.? ORDER BY card_number, transaction_date ASC;
### Cause: org.postgresql.util.PSQLException: ERROR: error de sintaxis en o cerca de «$1»

ここで、mapper.xml にエラーが表示されます。

<select id="selectDeFraude" parameterType="String" resultMap="result">
    SELECT transaction_id, card_number, transaction_date, fraud FROM transactions.#{tabla} ORDER BY card_number, transaction_date ASC;
</select>

これは、select を呼び出すメソッドです。

public List<Transaccion> selectDeFraude(String tabla){

    SqlSession session = sqlSessionFactory.openSession();

    try {
        List<Transaccion> list = session.selectList("Transaccion.selectDeFraude", tabla);
        return list;
    } finally {
        session.close();
    }
}

#{tabla} をテーブルの名前に置き換えると、問題なく動作します。マッパー メソッドはどれも機能しませんが、 #{something} を適切な値に置き換えればすべて機能します。

4

1 に答える 1

5

それは質問に対する正確な答えではありませんが、私は今それを機能させました。myBatisを使用してテーブル名をマッピングする場合は、${table_name}の代わりに使用#{table_name}する必要があります。これは、引数として渡したオブジェクトの属性である必要があります。

コードを次のように変更しました。

<select id="selectDeFraude" parameterType="Transaccion" resultMap="result">
    SELECT transaction_id, card_number, transaction_date, fraud FROM transactions.${tabla} ORDER BY card_number, transaction_date ASC;
</select>

そして、それにプロパティtablaを追加しましたが、正常に機能していることがわかりました。

于 2012-05-03T23:50:04.233 に答える