MyBatis исключение из сгенерированного файла - PullRequest
0 голосов
/ 23 марта 2011

Я использовал MyBatis Generator 1.3.1 для создания файла Mapper.xml. Когда MyBatis анализирует файл Mapper, он создает исключение BuilderException:

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>

А вот пример_класса

<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>

Ответы [ 2 ]

1 голос
/ 16 июля 2012

У меня та же проблема, вызванная нестандартным XML-парсером, который я не могу заменить.Я открыл проблему в Управление проблемами MyBatis и прикрепил патч.Надеюсь, что это будет исправлено в ближайшее время.

Редактировать: Оказывается, проблема была решена в r5388.

1 голос
/ 06 апреля 2011

Я выяснил, что вызвало эту проблему.(Это не имело никакого отношения к процессу генерации myBatis.)

Проблема возникла, когда я добавил пакет утилит в путь сборки Eclipse, который включал стороннюю библиотеку, в которой было много старых пакетов.Я подозреваю, что нарушающий пакет - старый org.apache.xerces.parsers.

Я обнаружил ошибку, построив проект Eclipse с нуля и добавив пакеты и код, по одному за раз.

Ошибка времени выполнения (неизвестный элемент <#comment> в операторе SQL) может быть воспроизведена путем добавления проекта и устранена путем удаления проекта из пути сборки.

...