zoukankan      html  css  js  c++  java
  • mybatis_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>  
  • 相关阅读:
    leetcode5 Longest Palindromic Substring
    leetcode17 Letter Combinations of a Phone Number
    leetcode13 Roman to Integer
    leetcode14 Longest Common Prefix
    leetcode20 Valid Parentheses
    leetcode392 Is Subsequence
    leetcode121 Best Time to Buy and Sell Stock
    leetcode198 House Robber
    leetcode746 Min Cost Climbing Stairs
    tomcat下使用druid配置jnid数据源
  • 原文地址:https://www.cnblogs.com/gisblogs/p/4359917.html
Copyright © 2011-2022 走看看