原先有一个查询:
SELECT *
FROM #tableName#
WHERE 1=1
limit #start#,#count#;
运行发现报错了,但是错误信息并没有指出具体的原因。但是debug日志中执行的sql是没有问题的。那么唯一的问题就是表名了。将 #tableName# 换成 $tableName$ 后,问题解决。由于ibatis是使用PreparedStatement进行参数化查询的,由此可知PreparedStatement是不支持以表名作为参数的。那么对表名是变量的情况,就要使用字符串拼接的形式。这有可能导致SQL注入,需要加以防范。 |