在使用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},它们都可以工作。
答案 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并且知道工作正常。