1, 版本
2,问题
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.postgresql.util.PSQLException: 错误: 字段 "fff" 不存在
位置:156
### The error may exist in file [D:\ccs-fz\mm\mm-svc\target\classes\com\paas\mm\maper\PutInAmountMapper.xml]
### The error may involve com.paas.model.mm.PutInAmount.getAmounts-Inline
### The error occurred while setting parameters
### SQL: select contract_code as "contractCode", sum(amount::numeric) as "amount" from mm_invoice_item WHERE 1=1 and contract_code in ( fff, bbb, ff) group by contract_code
### Cause: org.postgresql.util.PSQLException: 错误: 字段 "fff" 不存在
位置:156
3,解决方法
mybatis ${ } 和 #{ } 理解
#占位符的特点
- MyBatis处理 #{ } 占位符,使用的 JDBC 对象是PreparedStatement 对象,执行sql语句的效率更高。
- 使用PreparedStatement 对象,能够避免 sql 注入,使得sql语句的执行更加安全。
- #{ } 常常作为列值使用,位于sql语句中等号的右侧;#{ } 位置的值与数据类型是相关的。
$占位符的特点
- MyBatis处理 ${ } 占位符,使用的 JDBC 对象是 Statement 对象,执行sql语句的效率相对于 #{ } 占位符要更低。
- ${ } 占位符的值,使用的是字符串连接的方式,有 sql 注入的风险,同时也存在代码安全的问题。
- ${ } 占位符中的数据是原模原样的,不会区分数据类型。
- ${ } 占位符常用作表名或列名,这里推荐在能保证数据安全的情况下使用 ${ }
方法一 (改占位符)
${} 改为 #{} 或者处理数据
方法二 (改数据)
原文链接:https://blog.csdn.net/m0_52388979/article/details/125720091