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>

这是调用选择的方法:

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>

我向它添加了属性表,并且知道它工作得很好。

于 2012-05-03T23:50:04.233 回答