您的位置:首页 > 其它

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

2015-12-02 20:02 507 查看
一、insert 单条model(entity)动态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>


需要注意的是
1.
<insert id="cartype-insert"  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<cartype>

<!-- insertList<cartype>-->
<insert id="cartype-insert_list" parameterClass="ArrayList">
insert into cartype(CarTypeId,CarTypeName,parking_id,Status,Update_time,State,SynID )
values
<iterate conjunction=",">
( #[].CarTypeId#,
#[].CarTypeName#,
#[].parking_id#,
#[].Status#,
#[].Update_time#,
#[].State#,
#[].SynID#
)
</iterate>
</insert>


需要注意以下几点:
1.
<insert id="cartype-insert_list"  parameterClass="ArrayList">
这一行中的parameterClass为ArrayList
2. 
#[].CarTypeId#中“[]"表示的是批量插入时每次循环时的对象,就像foreach(var item in listCartype)中的item
CarTypeId是cartype对象的一个属性名称
三、批量插入数据时ON DUPLICATE KEY问题解决
cartype表中 synid为主键,如果有主键冲突则更新Update_time的值

<insert id="cartype-insert_upload_list" parameterClass="ArrayList">
insert intocartype(CarTypeId,CarTypeName,parking_id,Status,Update_time,State,SynID )
values
<iterate conjunction=",">
( #[].CarTypeId#,
#[].CarTypeName#,
#[].parking_id#,
#[].Status#,
#[].Update_time#,
#[].State#,
#[].SynID#
)
</iterate>
ON DUPLICATE KEY UPDATE
update_time=values(Update_time)
</insert>


注意:执行批量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<List<cartype>> md =new MySqlDao<List<cartype>>();
md.ExecuteInsert(cartype,"cartype-insert_list");
public void ExecuteInsert(T obj, stringstmtId)
{
if (obj == null)
{
throw new ArgumentNullException("obj");
}
Instance().Insert(stmtId, obj);
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: