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

一、insert单条实体动态xml


    
      insert into cartype(CarTypeId,CarTypeName,parking_id,Status,Update_time,State,SynID )
      values
     (
        #CarTypeId#,#CarTypeName#,#parking_id#,#Status#,#Update_time#,#State#,#SynID#
      );
    

二、insert多条List

 
    
      insert into user(name,age)
      values
      
        ( #list[].name#,
        #list[].age#
        )
      
    

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

注意表要创建唯一索引;

批量插入,

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),为更新添加更新时间


    
        
       
           
       
       ON DUPLICATE KEY UPDATE
       clip = values(clip),update_time = values(create_time)
  

java端实现

public void insertByBatch(List 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 = 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 t_cpl_info
    set 
      clip = #clip:VARCHAR#,
      update_time = #updateTime:DATE#
    where material_name = #materialName:VARCHAR#
  

java端使用getSqlMapClient()

public void updateByBatch(List 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()+"条");   
	}


你可能感兴趣的:(渐进式的成长)