2012-05-02 75 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> 

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