当前位置: 代码迷 >> Web前端 >> mybatis写地图per文件注意事项
  详细解决方案

mybatis写地图per文件注意事项

热度:290   发布时间:2013-08-04 18:26:16.0
mybatis写mapper文件注意事项

xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响

?

Html代码 ?收藏代码
  1. &lt;?<???
  2. &gt;?>???
  3. &amp;?&???
  4. &apos;?'???
  5. &quot;?"??

?

?

?

在mapper文件中写sql语句时,为避免不必要的麻烦(如<等),建 议使用<![CDATA[ ]]>来标记不应由xml解析器进行解析的文本数据,由<![CDATA[ ?]]>包裹的所有的内容都会被解析器忽略 <![CDATA[ sql语句 ]]>?

?

?

?

Xml代码 ?收藏代码
  1. <select?id="getAccountsByBranch"?resultType="Account"?parameterType="string">??
  2. ????<![CDATA[SELECT?*?FROM?t_acctreg_accounts?where?acctno?<?#{acctno}]]>??
  3. </select>??

?

?将整个sql语句用<![CDATA[ ? ]]>标记来避免冲突,在一般情况下都是可行的,但是如果这样写

?

?

?

Xml代码 ?收藏代码
  1. <select?id="getAccountErrorCount"?resultType="int"?parameterType="map">??
  2. ????<![CDATA[?
  3. ????select?count(*)?from?t_acctreg_accounterror?
  4. ????<where>?
  5. ????????<if?test="enddate?!=?null?and?enddate?!=?''">?
  6. ????????????createdate?<=?#{enddate}?
  7. ????????</if>?
  8. ????????<if?test="acctno?!=?null?and?acctno?!=?''">?
  9. ????????????AND?acctno?LIKE?'%'||#{acctno}||'%'?
  10. ????????</if>?
  11. ????</where>?
  12. ????]]>??
  13. </select>??

?

?就会收到错误信息:

?

? ? org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException: 无效的列类型: 1111 ; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 无效的列类型: 1111; nested exception is java.sql.SQLException: 无效的列类型: 1111

?

? ? 这是由于该sql配置中有动态语句(where,if),where,if 条件不能放在<![CDATA[ ]]>中,否则将导致无法识别动态判断部分,导致整个sql语句非法.应该缩小范围,只对有字符冲突部分进行合法性调整

?

?

?

Xml代码 ?收藏代码
  1. <select?id="getAccountErrorCount"?resultType="int"?parameterType="map">??
  2. ????select?count(*)?from?t_acctreg_accounterror??
  3. ????<where>??
  4. ????????<if?test="enddate?!=?null?and?enddate?!=?''">??
  5. ????????????<![CDATA[createdate?<=?#{enddate}]]>??
  6. ????????</if>??
  7. ????????<if?test="acctno?!=?null?and?acctno?!=?''">??
  8. ????????????<![CDATA[AND?acctno?LIKE?'%'||#{acctno}||'%']]>??
  9. ????????</if>??
  10. ????</where>??
  11. </select>??

?

还有在向oracle插入数据时,mybatis3报Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters,是由于参数出现了null值,对于Mybatis,如果进行操作的时候,没有指定jdbcType类型的参数,mybatis默认 jdbcType.OTHER导致,给参数加上jdbcType可解决(注意大小写)

?

http://code.google.com/p/mybatis/issues/detail?id=224&q=Error%20setting%20null%20parameter&colspec=ID

?

?

?

Xml代码 ?收藏代码
  1. <insert?id="insertAccountError"?statementType="PREPARED"??
  2. ????parameterType="AccountError">??
  3. ????INSERT?INTO?t_acctreg_accounterror(createdate,acctno,?errorinfo)??
  4. ????VALUES(#{createdate,jdbcType=DATE},#{acctno,jdbcType=VARCHAR},#{errorinfo,jdbcType=VARCHAR})??
  5. </insert>??

?

  相关解决方案