ibatis批量插入和批量更新xml写法

一、insert单条实体动态xml

<!-- insert数据SQL-->
    <insert id="cartype-insert"parameterClass="cartype">
      insert into cartype(CarTypeId,CarTypeName,parking_id,Status,Update_time,State,SynID )
      values
     (
        #CarTypeId#,#CarTypeName#,#parking_id#,#Status#,#Update_time#,#State#,#SynID#
      );
    </insert>

二、insert多条List

<!-- insertList<cartype>--> 
    <insert id="cartype-insert_list" parameterClass="ArrayList">
      insert into user(name,age)
      values
      <iterate conjunction=",">
        ( #list[].name#,
        #list[].age#
        )
      </iterate>
    </insert>

三、批量插入(数据库里面没有要插入的数据则执行插入,如果存在要插入的数据则执行更新)

注意表要创建唯一索引;

批量插入,

ON DUPLICATE KEY UPDATE的用法,update_time = values(create_time)这样写的原因是,本意是想更新是加入更新时间,插入时不加入更新时间,原以为插入更新时间对应写个null,update后边写成update_time = values(update_time),更新的时候自动获得update_time的值,然而事实证明,这样写更新的时候只会获取null,而并不会获得update_time的值,故想要简化逻辑,只能写成update_time = values(create_time),为更新添加更新时间

<insert id="abatorgenerated_insertByBatch" parameterClass="java.util.List" >
    <!--
      WARNING - This element is automatically generated by Abator for iBATIS, do not modify.
      This element was generated on Fri May 18 15:34:06 CST 2018.
    -->
    <![CDATA[  
           insert into t_cpl_info (cpl_uuid, material_name, clip, remark1, remark2, valid, create_time,
      create_user, update_time, update_user) values  
       ]]>    
       <iterate conjunction ="," >
           <![CDATA[  
               (
	               #list[].cplUuid#, 
	               #list[].materialName#, 
	               #list[].clip#,
	               #list[].remark1#,
	               #list[].remark2#,
	               #list[].valid#,
	               #list[].createTime#,
	               #list[].createUser#,
	               #list[].updateTime#,
	               #list[].updateUser#
               )  
           ]]>
       </iterate>
       ON DUPLICATE KEY UPDATE
       clip = values(clip),update_time = values(create_time)
  </insert>

java端实现

public void insertByBatch(List<CplInfo> list) {
	//每批次插入数量
        int batchCount = 1000;
        //游标
        int index = 0;
        //批次
        int batchNum = 1;
        for(;;){
            if(index+batchCount>=list.size()){
                //一次可全部插入
                getSqlMapClientTemplate().insert("ext_cpl_info.abatorgenerated_insertByBatch"
                    , list.subList(index,list.size()));
                break;
            }else {
                //需要多次插入
            	List<CplInfo> cplInfo = list.subList(index, index + batchCount);
                getSqlMapClientTemplate().insert("ext_cpl_info.abatorgenerated_insertByBatch"
                    , cplInfo);
                index = index+batchCount;
            }
            batchNum++;
        }
        System.out.println("总共插入"+list.size()+"条,插入了"+batchNum+"批");
	}

四、批量更新(其一)

xml端写一个update

<update id="abatorgenerated_updateByMaterialName" parameterClass="com.wd.aoc.launch.common.model.CplInfo" >
    update t_cpl_info
    set 
      clip = #clip:VARCHAR#,
      update_time = #updateTime:DATE#
    where material_name = #materialName:VARCHAR#
  </update>

java端使用getSqlMapClient()

public void updateByBatch(List<CplInfo> list) throws Exception{
		 getSqlMapClient().startBatch();//开始批量操作
		 //遍历list
		 for (CplInfo cplInfo : list){ 
		    getSqlMapClient().update("ext_cpl_info.abatorgenerated_updateByMaterialName", cplInfo);//statement表示你调用的删除方法,在xml文件中定义的。
		 }
		 getSqlMapClient().executeBatch();//结束批量操作
		 System.out.println("总共更新"+list.size()+"条");   
	}


猜你喜欢

转载自blog.csdn.net/qq_21875331/article/details/80861727
今日推荐