ibatis.net 按实体insert数据,批量insert,同时解决ON DUPLICATE KEY

一、insert 单条model(entity)动态xml如下:

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

需要注意的是

1.

parameterClass="cartype">中cartype为实体对象名称

2.

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

中的“#”之间的Key需要与实体(本例为cartype)的属性名称一致(大小写一致),也就是说如果insert时是全字段insert,那values中就是cartype类的所有属性名

cartype类的定义如下:

    public partial class cartype
    {
               public int? CarTypeId { get; set; }
               public string CarTypeName { get; set; }
               public int? parking_id { get; set; }
               public int? Status { get; set; }
               public DateTime Update_time { get; set; }
               public int? State { get; set; }
               public string SynID { get; set; }
                
    } 

 

二、insert 多条即List

     
    
      insert into cartype(CarTypeId,CarTypeName,parking_id,Status,Update_time,State,SynID )
      values
      
        ( #[].CarTypeId#,
        #[].CarTypeName#,
        #[].parking_id#,
        #[].Status#,
        #[].Update_time#,
        #[].State#,
        #[].SynID#
        )
      
    


需要注意以下几点:

1.

这一行中的parameterClass为ArrayList

2. 

#[].CarTypeId#中“[]"表示的是批量插入时每次循环时的对象,就像foreach(var item in listCartype)中的item

CarTypeId是cartype对象的一个属性名称

三、批量插入数据时ON DUPLICATE KEY问题解决

cartype表中 synid为主键,如果有主键冲突则更新Update_time的值


      insert intocartype(CarTypeId,CarTypeName,parking_id,Status,Update_time,State,SynID )
      values
      
        ( #[].CarTypeId#,
        #[].CarTypeName#,
        #[].parking_id#,
        #[].Status#,
        #[].Update_time#,
        #[].State#,
        #[].SynID#
        )
      
      ON DUPLICATE KEY UPDATE
      update_time=values(Update_time)
    

注意:执行批量insert时 要使用values函数,才可以解决主键冲突问题

例如:cartype表中有两条数据

synid=1,updatetime=’2015-12-0201:00:00‘

synid=2,updatetime=’2015-12-0202:00:00‘

执行如下sql时:

 insert intocartype(SynID,Update_time )
 values

(3,'2015-12-02 03:00:00'),

(2,'2015-12-0222:22:22')

 ON DUPLICATEKEY UPDATE
 update_time=values(Update_time)

执行结束后数据库里有三条数据

synid=1,updatetime=’2015-12-02 01:00:00‘

synid=2,updatetime=’2015-12-02 22:22:22‘

synid=3,updatetime=’2015-12-02 03:00:00‘

synid=3的数据直接insert了,而synid=2的数据因为数据库中已经有synid=2的数据,所有没有执行insert而是更新为:

updatetime=’2015-12-02 22:22:22‘

四、C#后台代码调用方法主要代码如下:

   

    MySqlDao> md =new MySqlDao>();
    md.ExecuteInsert(cartype,"cartype-insert_list");
    public void ExecuteInsert(T obj, stringstmtId)
   {
       if (obj == null)
     {
        throw new ArgumentNullException("obj");
     }
     Instance().Insert(stmtId, obj);
   }

 

你可能感兴趣的:(技术)