4

iBatis を使用して、ユーザーから送信されたデータをお問い合わせフォームに挿入しようとしています。

Liferay/Spring MVC/iBatis/MySQL セットアップを使用していますが、問題は iBatis 構成が原因だと思います。データを挿入しようとするたびに、ログに例外が表示されます。

com.ibatis.sqlmap.client.SqlMapException: There is no statement named contactus.ibatorgenerated_insert in this SqlMap.
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.getMappedStatement(SqlMapExecutorDelegate.java:231)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:367)
        at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
        at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.insert(SqlMapClientImpl.java:58)

ibator によって生成された SQL マップには、名前空間「contact_us」を持つ ID「ibatorgenerated_insert」の挿入クエリが含まれています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMapConfig>
<sqlMap namespace="contactus">
        <insert id="ibatorgenerated_insert" parameterClass="contactUs.dao.ContactUs">
            <!--
            WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify.
            This element was generated on Thu Apr 07 15:17:57 BST 2011.
            -->
            insert into contactus (email_address, first_name, last_name, company, timestamp,
            status, message)
            values (#emailAddress:VARCHAR#, #firstName:VARCHAR#, #lastName:VARCHAR#, #company:VARCHAR#,
            #timestamp:TIMESTAMP#, #status:VARCHAR#, #message:LONGVARCHAR#)
            <selectKey resultClass="java.lang.Integer" keyProperty="contactusId">
                SELECT LAST_INSERT_ID()
            </selectKey>
        </insert>
    </sqlMap>
</sqlMapConfig>

iBatis が XML ファイル内のステートメントを見つけられない原因は何ですか? 他の種類のエラーは報告されないため、ファイルを見つけていると思います。

4

2 に答える 2

5

以下のように、 SqlMapConfig.xmlに挿入ステートメントを含むcontactus.xmlファイルを指定したことを願っています。

<sqlMapConfig>
    <properties resource="Connection.properties"/>
    <!-- Configure a built-in transaction manager.  If you're using an        app server, you probably want to use its transaction manager        and a managed datasource -->
<settings cacheModelsEnabled="false" enhancementEnabled="true"
  lazyLoadingEnabled="true" maxRequests="32" maxSessions="1"
    useStatementNamespaces="false" />
  <transactionManager type="JDBC">
    <dataSource type="JNDI">
        <property name="DataSource" value="${connection.datasource}"/>
    </dataSource>
  </transactionManager>
 <!-- List the SQL Map XML files. They can be loaded from the        classpath, as they are here (com.domain.data...) -->
    <sqlMap resource="contactus.xml"/>
</sqlMapConfig>

名前空間なしで呼び出します。以下のようなもの

sqlMapper.insert("ibatorgenerated_insert",params);
于 2011-04-08T14:59:17.987 に答える
1

<sqlMapConfig>要素に次を追加してみてください。

<settings useStatementNamespaces="true"/>
于 2011-04-08T14:45:48.050 に答える