【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符
生活随笔
收集整理的這篇文章主要介紹了
【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轉義字符
&(邏輯與) & <(小于) < >(大于) > "(雙引號) " '(單引號) '舉例:
SELECT * FROM user WHERE age <= 30 AND age >= 18改正:
<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>總結
以上是生活随笔為你收集整理的【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在EasyX窗体中显示图片
- 下一篇: 用这样的办法搜索更高效搜索好方法