日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符

發布時間:2024/9/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  • mybatis 3.4.6

錯誤代碼

mybatis XML mapper 錯誤

<select id="selectxxxList" parameterType="map" resultMap="xxxResult">...<if test="statusList != null and statusList.size()>0" >and status in <foreach item="item" collection="statusList" open="(" separator="," close=")">#{item}</foreach></if><if test="statusList == null or statusList.size() <= 0" >and status is null</if></select>

錯誤信息

Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\xxx\xxxMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 47; columnNumber: 69; 與元素類型 "if" 相關聯的 "test" 屬性值不能包含 '<' 字符。at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:523)at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:380)at org.mybatis.spring.SqlSessionFactoryBean.getObject(SqlSessionFactoryBean.java:547)at com.office.framework.config.MyBatisConfig.sqlSessionFactory(MyBatisConfig.java:106)at com.office.framework.config.MyBatisConfig$$EnhancerBySpringCGLIB$$e8817d46.CGLIB$sqlSessionFactory$0(<generated>)at com.office.framework.config.MyBatisConfig$$EnhancerBySpringCGLIB$$e8817d46$$FastClassBySpringCGLIB$$2a3dbd36.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)at com.office.framework.config.MyBatisConfig$$EnhancerBySpringCGLIB$$e8817d46.sqlSessionFactory(<generated>)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)... 102 common frames omitted Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 47; columnNumber: 69; 與元素類型 "if" 相關聯的 "test" 屬性值不能包含 '<' 字符。at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:259)at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:125)at org.apache.ibatis.builder.xml.XMLMapperBuilder.<init>(XMLMapperBuilder.java:78)at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:520)... 115 common frames omitted Caused by: org.xml.sax.SAXParseException: 與元素類型 "if" 相關聯的 "test" 屬性值不能包含 '<' 字符。at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472)at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:944)at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1548)at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1315)at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841)at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:257)... 118 common frames omitted

分析

上述錯誤信息可以定位問題為:

  • mybatis 的 mapper xml 文件有錯誤
  • xml 文件讀取錯誤
  • 特殊字符<不能正確 處理

嗯,既然如此,將特殊字符轉義。
ps:對于xml的特殊字符有兩種處理方法,一個是轉移,一個是用<![CDATA[]]>包裹。上面的問題只能轉義。

XML轉義字符

&(邏輯與) &amp; <(小于) &lt; >(大于) &gt; "(雙引號) &quot; '(單引號) &apos;

舉例:

SELECT * FROM user WHERE age &lt;= 30 AND age &gt;= 18

改正:

<select id="selectxxxList" parameterType="map" resultMap="xxxResult">...<if test="statusList != null and statusList.size() &gt; 0" >and status in <foreach item="item" collection="statusList" open="(" separator="," close=")">#{item}</foreach></if><if test="statusList == null or statusList.size() &lt;= 0" >and status is null</if></select>

總結

以上是生活随笔為你收集整理的【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。