原始代碼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語法中如下圖就是<代表的就是<