具体问题以及解决过程如下:
<select id="get" resultType="xxx.domain.ReadingDO">
SELECT * FROM #{tableName} WHERE
TO_CHAR(采集时间,'yyyy-mm-dd hh24:mi:ss') = #{date};
</select>
这个sql很简单,数据库为oracle。
第一个问题:
首先,报了第一个错:"表名无效",一番折腾后,问题在于如下所示,我已经把问题着重标出:
SELECT * FROM #{tableName} WHERE TO_CHAR(采集时间,'yyyy-mm-dd hh24:mi:ss') = #{date};
解决方案为:将 #{ } 换成 ${ }
抄一下别人的总结:
#{} :表示sql中的参数部分,实际上底层使用的是PreparedStatement
${}:表示字符串拼接,实际上底层采用的Statement对象
第二个问题:
第一个问题解决方之后,紧接着报了第二个错:"无效的关系运算符",真的是脑瓜疼啊,问题如下所示,我已经把问题着重标出:
SELECT * FROM ${tableName} WHERE TO_CHAR(采集时间,'yyyy-mm-dd hh24:mi:ss') = #{date} ;
解决方案为:将 “;” 删除
总结:这个“;”真的让我很难受,所以你复制语句进数据库查询也是完全能跑通的,我觉得其实mybaits可以在这里加个过滤器,过滤掉sql语句末尾的";",毕竟sql写多了,习惯性的都喜欢写完一句sql就加个";"。