您的位置:首页 > 其它

mybatis中批量写入(insert)数据

2016-09-22 13:47 253 查看
在介绍批量写入数据时,我先介绍本次项目使用的数据库,这是基于oracle数据库写的,框架用的是ssm(struct2,spring,mybatis)。学起来比较方便、简单,前面编写的业务逻辑只是简单的方法调用。为了批量处理数据,提高软件的运行速度,主要的数据处理还是在mapper层写的。

首先,介绍批量写入数据吧,当我们需要从一个表中提取需要的数据,写到例外一张表中时,例如:根据所给条件将A表的数据,写到B表中,且按照A表中的c属性降序排列。其中id号是自动生成sys_guid ,时间是根据数据库当前所在的服务器的系统时间生成 sysdate,系统是24小时制。

insert  into  B(id , name , sex ,date , num , c ,sum ,  ....)

select sys_guid , name , sex , (sysdate ,'YYYY-MM-DD HH24:mi:ss') , num , c ,sum.... from A 

where A.c=#{c,jdbcType=VARCHAR}

order by c desc

这是简单的批量写入数据库的语句我们在这个基础上继续增加条件,就是A表的数据可能存在重复,且需要根据name,sex,c计算A表中各个数据的和。

在写之前,我还是先介绍下group by 的语法吧。

group by 语句是可以和合计函数一起使用,且group by 在组合需要的数据时,凡是select出的列,没有进行其他的操作的时候,都必须加到group by中。列子下面可以看出

那么我们可以这么写

insert  into  B(id , name , sex ,date , num , c ,sum ,  ....)

select sys_guid , name , sex , (sysdate ,'YYYY-MM-DD HH24:mi:ss') , count(id), c ,sum(sum).... from A 

where c=#{c,jdbcType=VARCHAR}  order by c desc

group by name ,sex,c

如果我们想把几个表的数据并到一起,在批量写到B表中时可以这么写

insert  into  B(id , name , sex ,date , num , c ,sum ,  ....)

select sys_guid , A .name , D.sex , (sysdate ,'YYYY-MM-DD HH24:mi:ss') , count(D.id), C.c ,sum(A.sum).... from A 

left  join C on C.c =A.c 

left  join  D on D.sex = A.sex

where C.c=#{c,jdbcType=VARCHAR}  order by C.c desc

group by A.name ,D.sex,C.c

好了,就介绍这些吧。都是比较简单的写法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: