
mybatis的批量 *** 作有两种方式,一是使用foreach标签,二是使用mybatis的BATCH模型
在xml中通过foreach对表数据进行循环 *** 作
在oracle中不支持insert into product(name, type, price) values ('a', 'tv', 1233), ('b', 'ac', 3455),('','','')这种形式的sql,因此oracle批量插入使用 insert all into table() values() into table() values() select from dual; 语句来解决以下方式,并且需要显示指定useGeneratedKeys=false
另一种方法是使用另外一种方法是 insert into table() (select from dual) union all (select from dual)
Mybatis内置的ExecutorType一共有三种,默认为SIMPLE,该模式下它为每个语句的执行创建一个新的预处理语句,并单条提交sql。
而 BATCH 模式会重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优;
注意 : batch模式也有自己的问题,比如在Insert *** 作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的。
具体用法如下:
ProductMapperjava 如下:
mapperxml 如下:
使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值,务必注意。
>
sequence就是一个序列,你每次执行 select CASE_SEQnextval from dual 的时候都会返回唯一的一个ID号,因此你可以先执行这个select取到这个ID,如果这个时候有多个用户在执行这个 *** 作,那么他们select到的ID绝对跟你的不一样(sequence就是保证这一点的)。然后你就可以用这个ID插入记录,然后再返回这个ID就OK了。 代码: string sql = "Select CASE_SEQcurrval from dual"; OracleConnection conn = DBgetCon(); OracleCommand cmd = connCreateCommand(); connOpen(); string returnID = null; cmdCommandText = sql; returnID = ConvertToString(cmdExecuteScalar()); //获取ID sql = "insert into PATIENT_T(pid,name) values(returnID,'黎明')"; //将ID插入数据库 cmdCommandText = sql; cmdExecuteNonQuery(); connClose(); 结束了,差不多就是这样,楼主自己调试一下就行了,注意ID在数据库中应该是varcahr类型的
以上就是关于mybatis 批量 *** 作数据全部的内容,包括:mybatis 批量 *** 作数据、mybatis 设置ID、mybatis批量插入返回每条数据的id,返回集合全是最后一条数据的id(数据库主键自增)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)