原始代码demo
@Select("SELECT COUNT(1) FROM AAAA WHERE name= #{nage} AND age<= 4")
public Integer sumXxxxx(String nage, String age);
现需求改为nage可以为空,因此使用了动态拼接
@Select("<script> SELECT COUNT(1) FROM AAAA WHERE <if test='nage!= null and nage!= \"\"'>nage= #{nage} AND </if> age<= 4 </script>")
public Integer sumXxxxx(String nage, String age);
此时报错
org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。
无论怎么核对代码,都发现代码没问题,最后无意间将 age<= 4 这个限定条件改成其他的,不报错了。原来是限定条件中的这个小于符号 < 和 <script> 中的符号有冲突,其实这是一个在很多地方都出现的问题,例如在CSDN中的加黑加粗的语法中也会需要做转换。
因此解决这个问题,就需要在mybatis中,将 < 改成 <
@Select("<script> SELECT COUNT(1) FROM AAAA WHERE <if test='nage!= null and nage!= \"\"'>nage= #{nage} AND </if> age <= 4 </script>")
public Integer sumXxxxx(String nage, String age);
这个是通过的,例如在CSDN语法中如下图就是<代表的就是<