传入一个SQL片段,如 WEAVE_TYPE='on' and STATUS='quit' 。
然后拼接到where条件中,进行查询,报错:java.sql.SQLException: ORA-00936: missing expression
xml写法如下:
SELECT * from BASE where 1=1 and ${condition}
其中condition是传入的SQL片段。
请问,有什么办法解决?
如果你使用了mybatis ,使用这个sql拼接就是对它的侮辱哈。它本来就提供了《if》 标签可以进行条件判断
,建议你还是将参数封装在对象中,然后在配置文件 中使用mybatis 提供的机制进行拼接。使用#{属性值}。进行预处理。
而且如果你是使用 前台获取到的参数进行拼接的话,还会产生sql注入的危险
mybatis 是先进行预处理的,所以你传入的片段也好其他也好,都会当做一个值来看待,如果你想要条件的话,可以封装到MAP中 使用mybatis的
xxxxx field就是你要拼接的字段 进行处理
1,用 $ ,容易sql注入;最好用 # ;
2,可以用<#if test 进行动态sql拼接,不要把sql写到代码中;
3,${condition} 报错,应该是mybatis自动加了 引号造成的;
and status = #{status}
<if test="status != null">
and status = #{stauts}
</if>