zoukankan      html  css  js  c++  java
  • 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>  
  • 相关阅读:
    hihoCoder #1062 : 最近公共祖先·一
    hihoCoder #1050 : 树中的最长路
    hihoCoder #1049 : 后序遍历
    108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树
    107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
    106 Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树
    105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
    104 Maximum Depth of Binary Tree 二叉树的最大深度
    102 Binary Tree Level Order Traversal 二叉树的层次遍历
    101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
  • 原文地址:https://www.cnblogs.com/CodingAndRiding/p/8151964.html
Copyright © 2011-2022 走看看