Attribute "resultType" must be declared for element type "insert"或"update"
今天寫代碼的時候,寫mybatis的update語句和insert語句,寫完之后,開jetty,但是很久過去,jetty卡卡住不動,
這個問題一般是xmL中有錯誤導致的,但是查看了很久,都沒與發現,知道jetty運行超時,報錯。看到報錯日志。如下圖:[logistics] 2016-02-01 16:40:54 577 main com.alibaba.druid.filter.logging.Log4jFilter.connectionLog(Log4jFilter.java:132)
[DEBUG] {conn-10010} setAutoCommit false
這個報錯日志中說Attribute "resultType" must be declared for element type "insert",還有一個報錯信息是Attribute "resultType" must be declared for element type "update"
當時一直沒有找到那里有問題,一直以為問題是我寫insert和update語句是沒有寫resultType,后來發現,問題恰恰出在此處。
因為在insert和update語句中是沒有resultType的,報錯的信息不是說沒有寫resultType,而是說要在mybatis的文件中聲明resultType之后,才可以使用resultType.
在xml文件的開頭一般有兩行代碼:
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
將http://mybatis.org/dtd/mybatis-3-mapper.dtd復制到瀏覽器中,會自動下載dtd文件,打開后,搜索update和insert和select,會發現之間的區別:
select的聲明如下:
ATTLIST select
id CDATA #REQUIRED
parameterMap CDATA #IMPLIED
parameterType CDATA #IMPLIED
resultMap CDATA #IMPLIED
resultType CDATA #IMPLIED
resultSetType (FORWARD_ONLY | SCROLL_INSENSITIVE | SCROLL_SENSITIVE) #IMPLIED
statementType (STATEMENT|PREPARED|CALLABLE) #IMPLIED
fetchSize CDATA #IMPLIED
timeout CDATA #IMPLIED
flushCache (true|false) #IMPLIED
useCache (true|false) #IMPLIED
databaseId CDATA #IMPLIED
lang CDATA #IMPLIED
resultOrdered (true|false) #IMPLIED
resultSets CDATA #IMPLIED
insert的聲明如下:
ATTLIST insert
id CDATA #REQUIRED
parameterMap CDATA #IMPLIED
parameterType CDATA #IMPLIED
timeout CDATA #IMPLIED
flushCache (true|false) #IMPLIED
statementType (STATEMENT|PREPARED|CALLABLE) #IMPLIED
keyProperty CDATA #IMPLIED
useGeneratedKeys (true|false) #IMPLIED
keyColumn CDATA #IMPLIED
databaseId CDATA #IMPLIED
lang CDATA #IMPLIED
update的聲明如下:
ATTLIST update
id CDATA #REQUIRED
parameterMap CDATA #IMPLIED
parameterType CDATA #IMPLIED
timeout CDATA #IMPLIED
flushCache (true|false) #IMPLIED
statementType (STATEMENT|PREPARED|CALLABLE) #IMPLIED
keyProperty CDATA #IMPLIED
useGeneratedKeys (true|false) #IMPLIED
keyColumn CDATA #IMPLIED
databaseId CDATA #IMPLIED
lang CDATA #IMPLIED
可以看出select聲明中有resultType,而update和insert中沒有resultType
錯誤在此。