【iBATIS】The content of elements must consist of well-formed character data or markup

本文介绍了解决XML文件中因包含特殊字符而引发的解析错误的方法,提供了两种有效解决方案:一是使用转义字符替换;二是利用CDATA段落标记进行处理。

报错提示:The content of elements must consist of well-formed character data or markup

因为语句中有一个小于号“<”,在XML中,会被当成一个页面元素来解析,不会处理为mysql的SQL语句的组成部分,修改如下:


1、在xml的sql语句中,不能直接用大于号、小于号要用转义字符

如果用小于号会报错误如下:

org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.


解决办法:

1,转义字符

                     &lt;                                 

                     <

                     小于号                                           

                     &gt;

                     >                                      

                     大于号

                     &amp;

                     &

                     和

                     &apos;

                     ’

                     单引号

                     &quot;

                     "

                     双引号

例如: state <= 3 则改成  state &lt;= 3


2、使用<![CDATA[]]>标记


注意:<![CDATA[ ]]>标记的sql语句中的<where> <if>等标签不会被解析

     <![CDATA[
             state <= 3
          ]]>

这样,将会把SQL语句中与XML页面元素相同的元素屏蔽,是的XML不将其解析为XML的元素,从而生成正确的SQL语句。

package com.lenovo.ofp.order.throwengine.dao; import com.lenovo.ofp.order.domain.throwengine.domain.PaymentMessageVo; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; /** * @Author: zengdy1 * @Date: 2025-09-16 17:50 */ public interface PaymentJobMapper { @Select({ "<script>", "SELECT * FROM ordercommon.t_payment_message", "WHERE process_status = 0", "AND message_type IN", "<foreach collection='messageTypes' item='messageType' open='(' separator=',' close=')'>", "#{messageType}", "</foreach>", "AND create_time > (CURRENT_DATE - INTERVAL '${limit} day')", "</script>" }) List<PaymentMessageVo> getPaymentMessageByType(@Param("messageType") List<Integer> messageType, @Param("limit") Integer limit); @Update({ "<script>", "UPDATE ordercommon.t_payment_message", "SET process_status = 1", "WHERE id IN", "<foreach collection='paymentMessageList' item='item' index='index' open='(' separator=',' close=')'>", "#{item.id}", "</foreach>", "</script>" }) void batchUpdateProcessStatus(@Param("paymentMessageList") List<PaymentMessageVo> authNotifyList);//实现这个批量更新sql @Delete({ "<script>", "DELETE FROM ordercommon.t_payment_message where process_status = 1 AND create_time < (CURRENT_DATE - INTERVAL '${limit} day') ", "</script>" }) Integer batchDelete( @Param("limit") Integer limit); List<PaymentMessageVo> getPaymentMessageByType(int limit); } 结合这个类 分析这个错误org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'paymentMessageJob': Unsatisfied dependency expressed through field 'orderPaymentMapper': Error creating bean with name 'throwPaymentJobMapper' defined in URL [jar:file:/app/lib/order-async-throw-1.0.3-SNAPSHOT.jar!/com/lenovo/ofp/order/throwengine/dao/PaymentJobMapper.class]: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 95; The content of elements must consist of well-formed character data or markup. at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredA
最新发布
09-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值