iBatis之Iterator的使用

一:前言java

    如今這個項目使用的是iBatis,我剛剛開始的時候說是用MyBatis,由於我之前用過,以爲仍是比較好用的啊,並且不像iBatis樣,查什麼一個字段不能多也不能少,以爲好無語啊。sql

二:內容數據庫

     本身如今接觸的iterator有以下兩種用處this

  (一):批量循環插入spa

      批量插入的話有能夠分開說,一種是在後臺代碼中,批量插入,一種是在數據庫中循環插入code

      (1):在先說後臺批量插入的,直接上代碼blog

    return (Integer)this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
            
            public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
                executor.startBatch();
                int count=0;
                for(User u:list){
                    executor.insert("batchAddUser", u);
                }
                count=executor.executeBatch();
                return count;
            }
        });

  

insert into user(id,,user_id,user_name,start_time,end_time,) values (#id#,#userId#,#userName#,#startTime#,#endTime#)get

    (2):在sql中進行循環插入it

      

<selecet id="batchInsert" parameterClass="java.util.List">
    insert <iterator>
         into user(id,user_id,user_name.start_time,end_time)
values(#list[].id#,#list[].useId#,#list[].userName#,#list[].startTime#,#list[].endTime#)
    </iterator>
</select>

 

  (二):在sql中咱們會使用到in這種查詢,in裏面通常就如(1,2,3,...)這種形式因此咱們能夠用iterator來循環生成這種形式io

    

<select id="get_user" parameterClass="java.util.Map" 
resultMap="getUser">
<![CDATA[
        select * from user o where o.user_role=2
       ]]>
         <isNotEmpty prepend="and" property="list">
             o.user_id IN
             <iterate close=")" open="(" conjunction="," property="list">#list[]#</iterate> 
         </isNotEmpty>
</select>
這裏必須加上property="pilesList",不然會報下面的錯誤
--- Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject 
or property was not a Collection, Array or Iterator.

二是使用list看成參數

<select id="getUser" parameterClass="java.util.List" resultMap="get_user"> 
    <![CDATA[
        select * from user o where o.user_role=2
        ]]>
           and  o.pile_id IN
              <iterate close=")" open="(" conjunction=",">#list[]#</iterate> 
</select>

這裏面就不用加property="list"這個屬性,這裏還有一點要注意的就是不能加成這樣的
<select id="getUser" parameterClass="java.util.List" resultMap="get_user"> 
    <![CDATA[
        select * from user o where o.user_role=2
        ]]>
<isNotEmpty property="list">
           and  o.pile_id IN
              <iterate close=")" open="(" conjunction=",">#list[]#</iterate> 
</isNotEmpty>
</select>
若是加了這個判斷也是會報錯的,這點使得我很與鬱悶啊,這個isNotEmpty判斷不了list是否爲空的,list的空值是[]寫的,因此只能用if判斷。

三:總結

   今天知道了旁邊的同事要走,其實挺無語的。不知道怎麼的,個人感觸仍是很深的,每一個人都有本身的路去選擇,儘可能保持日常的心態吧。個人心很大,因此我要堅決下去。努力加油。都衝吧。

相關文章
相關標籤/搜索