第一次使用ibatis,不是很熟悉,使用时sql报如下错误:
DEBUG 2016-04-18 10:45:41: [org.springframework.jdbc.support.SQLErrorCodesFactory.(175)getErrorCodes] - SQL error codes for ‘MySQL’ found
DEBUG 2016-04-18 10:45:41: [org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.(283)doTranslate] - Unable to translate SQLException with Error code ‘0’, will now try the fallback translator
ERROR 2016-04-18 10:45:41: [com.cmcf.web.controller.cms.SeoCikuKeywordsController.(139)queryCikuList] - 获取关键词列表异常!
org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];
— The error occurred in ibatis/SeoCikuKeywords.xml.
— The error occurred while preparing the mapped statement for execution.
— Check the com.cmcf.model.entity.cms.SeoCikuKeywordsEntity.queryCikuList_count.
— Check the parameter map.
— Cause: com.ibatis.common.beans.ProbeException: There is no READABLE property named ‘baiduIndex’ in class ‘Java.lang.Object’; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
— The error occurred in ibatis/SeoCikuKeywords.xml.
— The error occurred while preparing the mapped statement for execution.
— Check the com.cmcf.model.entity.cms.SeoCikuKeywordsEntity.queryCikuList_count.
— Check the parameter map.
— Cause: com.ibatis.common.beans.ProbeException: There is no READABLE property named ‘baiduIndex’ in class ‘java.lang.Object’
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
…………
我的代码如下:
<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">isNotEmpty</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">prepend</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"AND"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">property</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"entity.baiduIndex"</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">isEqual</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">property</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"entity.baiduIndex"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">compareValue</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"0"</span>></span>
<span class="hljs-cdata" style="color: rgb(0, 136, 0); box-sizing: border-box;"><![CDATA[
id in (select typeAssociatedId from tz_seo_ciku_article where content is null or content="")
]]></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">isEqual</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">isEqual</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">property</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"entity.baiduIndex"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">compareValue</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"1"</span>></span>
<span class="hljs-cdata" style="color: rgb(0, 136, 0); box-sizing: border-box;"><![CDATA[
id in (select mainKeywordsId from tz_seo_ciku_keywords group by mainKeywordsId having count(mainKeywordsId)<=3)
]]></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">isEqual</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">isEqual</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">property</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"entity.baiduIndex"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">compareValue</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"2"</span>></span>
<span class="hljs-cdata" style="color: rgb(0, 136, 0); box-sizing: border-box;"><![CDATA[
id in(select mainkeywordsid from tz_seo_ciku_keywords where link is null or link="" or link not like "%www.touzi.com%")
]]></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">isEqual</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">isNotEmpty</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>
我的entity对象,以及xml文件里的resultMap entity对象都添加了相应的该属性,数据库和实体类属性都是baiduIndex,所以字段没有问题了。百度的很多都说是字段有问题…………
我的解决方法:
我对ibatis的isEqual标签不了解,但是我对sql有信心啊,所以我将我的代码改成如下:
<code class="hljs vhdl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><isNotEmpty prepend=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"AND"</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">property</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"entity.baiduIndex"</span>>
<![CDATA[
(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">CASE</span> #<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">entity</span>.baiduIndex# <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">WHEN</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">'0'</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">THEN</span> id <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">select</span> typeAssociatedId from tz_seo_ciku_article where content <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> content=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">WHEN</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">'1'</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">THEN</span> id <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">select</span> mainKeywordsId from tz_seo_ciku_keywords <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">group</span> by mainKeywordsId having count(mainKeywordsId)<=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">WHEN</span> '<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>' <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">THEN</span> id <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">select</span> mainkeywordsid from tz_seo_ciku_keywords where link <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> link=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> link <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">not</span> like <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%www.touzi.com%"</span>)
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">END</span>)
]]>
</isNotEmpty></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>
然后运行就可以了……至于原因,我也不清楚 (T0T)……