乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MyBatis傳入?yún)?shù)與parameterType

       三十的狼 2018-03-14

      1.   傳入簡單類型



          Java代碼:




      Java代碼  




      1. public User get(Long id) {    

      2.     return (User) getSqlSession().selectOne("com.liulanghan.get" , id);  

      3. }  



       
       MAPPER :


       




      Xml代碼  




      1. <select id="findUserListByIdList" parameterType="java.lang.Long" resultType="User">  

      2.         select * from user where  id = #{id};  

      3. </select>  



        
      2.   傳入List


       


          JAVA代碼:


       




      Java代碼  




      1. public List<Area> findUserListByIdList(List<Long> idList) {  

      2.         return getSqlSession().selectList("com.liulanghan.findUserListByIdList", idList);  

      3.     }  



       


      MAPPER :


       


       




      Xml代碼  




      1.    <select id="findUserListByIdList" parameterType="java.util.ArrayList" resultType="User">  

      2.     select * from user user  

      3.     <where>  

      4.         user.ID in (  

      5.         <foreach item="guard" index="index" collection="list"  

      6.             separator=","> #{guard} </foreach>  

      7.         )  

      8.     </where>  

      9. </select>   



         
       
       單獨傳入list時,foreach中的collection必須是list,不不管變量的具體名稱是什么。比如這里變量名為idList,
       collection卻是是list。 
       
      3.  傳入數(shù)組



        JAVA代碼:


       




      Java代碼  




      1. public List<Area> findUserListByIdList(int[] ids) {  

      2.         return getSqlSession().selectList("com.liulanghan.findUserListByIdList", ids);  

      3.     }  



       


       MAPPER :


       


       




      Xml代碼  




      1. <select id="findUserListByIdList" parameterType="java.util.HashList" resultType="User">  

      2.     select * from user user  

      3.     <where>  

      4.         user.ID in (  

      5.         <foreach item="guard" index="index" collection="array"  

      6.             separator=","> #{guard} </foreach>  

      7.         )  

      8.     </where>  

      9. </select>     



        
       
       單獨傳入數(shù)組時,foreach中的collection必須是array,不不管變量的具體名稱是什么。比如這里變量名為ids,
       collection卻是是array


       


      4.  傳入map
       
       JAVA代碼:




      Java代碼  




      1. public boolean exists(Map<String, Object> map){  

      2.         Object count = getSqlSession().selectOne("com.liulanghan.exists", map);  

      3.         int totalCount = Integer.parseInt(count.toString());  

      4.         return totalCount > 0 ? true : false;  

      5.     }  



        
       MAPPER :




      Xml代碼  




      1. <select id="exists" parameterType="java.util.HashMap" resultType="java.lang.Integer">  

      2.         SELECT COUNT(*) FROM USER user  

      3.         <where>  

      4.             <if test="code != null">   

      5.                 and user.CODE = #{code}   

      6.             </if>  

      7.             <if test="id != null">   

      8.                 and user.ID = #{id}   

      9.             </if>  

      10.             <if test="idList !=null ">  

      11.                 and user.ID in (  

      12.                 <foreach item="guard" index="index" collection="idList"  

      13.                     separator=","> #{guard} </foreach>  

      14.                 )  

      15.             </if>  

      16.         </where>  

      17.     </select>  



       


       MAP中有l(wèi)ist或array時,foreach中的collection必須是具體list或array的變量名。比如這里MAP含有一個
          名為idList的list,所以MAP中用idList取值,這點和單獨傳list或array時不太一樣。
       
       
      5. 傳入JAVA對象
       
       JAVA代碼:




      Java代碼  




      1. public boolean findUserListByDTO(UserDTO userDTO){  

      2.         Object count = getSqlSession().selectOne("com.liulanghan.exists", userDTO);  

      3.         int totalCount = Integer.parseInt(count.toString());  

      4.         return totalCount > 0 ? true : false;  

      5.     }  



        
       MAPPER :




      Xml代碼  




      1. <select id="findUserListByDTO" parameterType="UserDTO" resultType="java.lang.Integer">  

      2.         SELECT COUNT(*) FROM USER user  

      3.         <where>  

      4.             <if test="code != null">   

      5.                 and user.CODE = #{code}   

      6.             </if>  

      7.             <if test="id != null">   

      8.                 and user.ID = #{id}   

      9.             </if>  

      10.             <if test="idList !=null ">  

      11.                 and user.ID in (  

      12.                 <foreach item="guard" index="index" collection="idList"  

      13.                     separator=","> #{guard} </foreach>  

      14.                 )  

      15.             </if>  

      16.         </where>  

      17.     </select>  



       


          JAVA對象中有l(wèi)ist或array時,foreach中的collection必須是具體list或array的變量名。比如這里UserDTO含有一個
          名為idList的list,所以UserDTO中用idList取值,這點和單獨傳list或array時不太一樣。


       


      6.取值



       由上面可以看出,取值的時候用的是#{}。它具體的意思是告訴MyBatis創(chuàng)建一個預(yù)處理語句參數(shù)。
       使用JDBC,這樣的一個參數(shù)在SQL中會由一個“?”來標(biāo)識,并被傳遞到一個新的預(yù)處理語句中,就像這樣:


       




      Java代碼  




      1. // Similar JDBC code, NOT MyBatis…  

      2. String selectPerson = “SELECT * FROM PERSON WHERE ID=?”;  

      3. PreparedStatement ps = conn.prepareStatement(selectPerson);  

      4. ps.setInt(1,id);  



        
          可以看到這個寫法比較簡單,MyBatis為我們做了很多默認(rèn)的事情,具體的寫法應(yīng)該如下:


       




      Xml代碼  




      1. #{property,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler,mode=OUT,resultMap=User}  



       


       property:屬性名,即代碼傳入的變量名。
       javaType:該字段在JAVA中的類型,比如int。
       jdbcType:該字段在JDBC中的類型,比如NUMERIC。
       typeHandler:類型處理器
       mode:參數(shù)類型為IN,OUT或INOUT參數(shù)
       resultMap:結(jié)果。
       
       還好,MyBatis比較體諒我們,一般我們只需寫一個屬性名即可,如#{id},其他的如javaType和typeHandlerMybatis
       會自動幫我們填好??墒沁@樣有時也會出問題,比如出現(xiàn)CLOB字段時。
       
       由于JAVA代碼中的String類型對應(yīng)的默認(rèn)typeHandler為StringTypeHandler,當(dāng)用String類型處理時,如果String長度超過一定長度,就會報如下錯誤:



       setString can only process strings of less than 32766 chararacters


       


       解決辦法是指定該屬性的typeHandler,如下:



       #{message,typeHandler=org.apache.ibatis.type.ClobTypeHandler}


       


       我們也可以自定義typeHandler來處理需要的數(shù)據(jù),具體這里詳述。
       
       JDBC類型是僅僅需要對插入,更新和刪除操作可能為空的列進行處理。這是JDBC的需要,而不是MyBatis的。一般不需要配置
       
       mode、resultMap一般不需要,在寫存儲過程時會用到,這里不詳述。
       
      7.字符串替換


       


       一般情況下,我們采用#{}取值,產(chǎn)生預(yù)處理語句,但是有時我們可能不希望Mybatis來幫我們預(yù)處理,比如ORDER BY時,可以
       采用如下寫法:
       
       ORDER BY ${columnName}
       
       這里MyBatis不會修改或轉(zhuǎn)義字符串。而是直接拼接到SQL字符串后面。
       
       重要:接受從用戶輸出的內(nèi)容并提供給語句中不變的字符串,這樣做是不安全的。這會導(dǎo)致潛在的SQL注入攻擊,因此你
       不應(yīng)該允許用戶輸入這些字段,或者通常自行轉(zhuǎn)義并檢查。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多