设置参数时MyBatis出错

时间:2012-05-02 02:32:56

标签: java ibatis mybatis postgresql

在使用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},它就可以了。没有mapper方法可以工作,但如果我用适当的值替换#{something},它们都可以工作。

1 个答案:

答案 0 :(得分:2)

这不是问题的答案,但我现在已经开始工作了。使用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并且知道工作正常。