2011-03-23 86 views
0

我使用MyBatis Generator 1.3.1創建Mapper.xml文件。當MyBatis的解析映射文件,它拋出一個BuilderException:MyBatis生成的文件異常

Exception in thread "main" org.apache.ibatis.builder.BuilderException: Unknown element <#comment> in SQL statement. 
    at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseDynamicTags(XMLStatementBuilder.java:83) 
    at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:43) 
    at org.apache.ibatis.session.Configuration.parseStatementNodes(Configuration.java:513) 
    at org.apache.ibatis.session.Configuration.buildStatementsForNamespace(Configuration.java:502) 
    at org.apache.ibatis.session.Configuration.buildStatementsFromId(Configuration.java:467) 
    at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:391) 
    at org.apache.ibatis.binding.MapperMethod.setupCommandType(MapperMethod.java:160) 
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) 
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:37) 
    at $Proxy1.selectByExample(Unknown Source) 

parseDynamicTags不能識別< #COMMENT>字段。它解析XML的部分是selectByExample:

<select id="selectByExample" resultMap="BaseResultMap" parameterType="test.model.TblPosStageExample" > 
    <!--  WARNING - @mbggenerated .. --> 
    select 
    <if test="distinct" > 
     distinct 
    </if> 
    <include refid="Base_Column_List" /> 
    from tbl_Pos_Stage 
    <if test="_parameter != null" > 
     <include refid="Example_Where_Clause" /> 
    </if> 
    <if test="orderByClause != null" > 
     order by ${orderByClause} 
    </if> 
    </select> 

的MyBatis似乎已解析的第一個評論和select語句。它剛剛解析了#text類型的節點,但我不確定#comment來自哪裏。

我沒有修改生成的文件,我很困惑,這在過去正常運行,突然停止。


編輯:Base_column_list

<sql id="Base_Column_List" > 
    <!-- 
     WARNING - @mbggenerated 
     This element is automatically generated by MyBatis Generator, do not modify. 
     This element was generated on Wed Mar 23 08:04:42 EST 2011. 
    --> 
    SurrogatePK, businessDate, positionId, busAIdCode, {95 columns deleted for brevity} 
    marketValueCcy, settledMarketValueCcy 
    </sql> 

這裏是example_where_clause

<sql id="Example_Where_Clause" > 
    <!-- 
    WARNING - @mbggenerated 
    This element is automatically generated by MyBatis Generator, do not modify. 
    This element was generated on Wed Mar 23 08:04:42 EST 2011. 
    --> 
    <where > 
    <foreach collection="oredCriteria" item="criteria" separator="or" > 
    <if test="criteria.valid" > 
     <trim prefix="(" suffix=")" prefixOverrides="and" > 
     <foreach collection="criteria.criteria" item="criterion" > 
     <choose > 
     <when test="criterion.noValue" > 
      and ${criterion.condition} 
     </when> 
     <when test="criterion.singleValue" > 
      and ${criterion.condition} #{criterion.value} 
     </when> 
     <when test="criterion.betweenValue" > 
      and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} 
     </when> 
     <when test="criterion.listValue" > 
      and ${criterion.condition} 
      <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," > 
      #{listItem} 
      </foreach> 
     </when> 
     </choose> 
     </foreach> 
     </trim> 
    </if> 
    </foreach> 
    </where> 
</sql> 
+0

您可以提供「Base_Column_List」和「Example_Where_Clause」引用的xml嗎?錯誤可能源自其中之一。 – TheClair 2011-03-30 18:17:32

+0

@TheClair,好的,我編輯了這個問題並添加了這些。 – rajah9 2011-03-30 19:42:05

+0

對不起,沒有任何東西突出給我。 :(我會建議修改查詢來隔離它的絆腳石,但你可能已經試過了。 – TheClair 2011-03-30 21:40:46

回答

1

我已經想通了,是什麼原因造成了這個問題。 (它與myBatis生成過程無關。)

當我在Eclipse構建路徑中添加了一個實用程序包時,出現了問題,該路徑包含一個擁有許多舊包的第三方庫。我懷疑有問題的軟件包是舊的org.apache.xerces.parsers。

我從頭開始構建Eclipse項目並一次添加一個包和代碼,發現了錯誤。

運行時錯誤(未知元素< #comment>在SQL語句中)可以通過添加項目來重現,並通過從構建路徑中移除項目來消除。

1

我有一個我無法替代的非標準XML解析器導致的相同問題。 我在MyBatis issue management上打開了一個問題,並附上了一個補丁。希望這個問題很快就會解決。

編輯:事實證明,問題已在r5388解決。