ibatis.net 按实体insert数据,批量insert,同时解决ON DUPLICATE KEY
2015-12-02 20:02
507 查看
一、insert 单条model(entity)动态xml如下:
需要注意的是
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类的定义如下:
二、insert 多条即List<cartype>
需要注意以下几点:
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时 要使用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#后台代码调用方法主要代码如下:
<!-- 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); }
相关文章推荐
- osg 小技巧
- 历史的纠缠
- 看图学网络 一 网络的组成
- C#基础知识总结之二
- 装饰模式(Decorator)-山下的石雕厂
- 寒霜引擎(镜之边缘:催化剂)中的屏幕空间反射
- div自动拉伸
- poi解析上传的Excel xlsx 保存到Oracle 趁还没忘记,留下
- lightoj1118 Incredible Molecules
- 偶数求和
- 【计算机视觉菜鸟入门】之各种大牛配置教程
- 杭电校赛(质方数)
- 黑马程序员--MAP集合
- vim编辑器 保存命令
- 带梯度效果的圆形进度View
- weka和matlab完成完整分类实验
- coderforce 483A Counterexample
- POJ3186 Treats for the Cows DP
- 给于 dom 解析的跳转框架
- 文章标题