2012-05-02 38 views
0

在MyBatis的PostgreSQL的运行时选择我得到这个错误:错误的MyBatis在设置参数

### 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(); 
    } 
} 
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},则所有映射器方法都不起作用。

+1

SQL语句末尾有分号。错误可能是由分号引起的,您可以将其删除并重试。 – wasabi

回答

1

这不完全是问题的答案,但我现在正在工作。当使用myBatis映射表名时,应该使用${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> 

而且我加了属性塔布拉它,知道是工作就好了。