java中对于大量数据采用批量处理来提高效率
来源:互联网 发布:无主之地2mac下载 编辑:程序博客网 时间:2024/05/24 07:35
设计的话, 是在dao层写批量新增的方法,以及实现类dao的实现类, 在service调用这个dao就可以了! 不过最终走的还是单个只不过是集合的遍历, 所以不用再mapper.xml里面配置方法。
IReconBankOrderCpsBatchDao里面的方法:
public interface IReconBankOrderCpsBatchDao {/** * 保存多条记录 * * @param l_eos : 交易对账-控制表-EO列表 */void saveAll(List<ReconBankOrderCpsEo> l_eos);/** * 批量更新记录 * @param l_eos : 交易对账-控制表-EO列表 */void batchUpdate(List<ReconBankOrderCpsEo> l_eos);/** * 批量删除 * @param eos */void batchDelete(List<ReconBankOrderCpsEo> eos);}
dao的实现类:
@Repository("reconBankOrderCpsBatchDao")public class ReconBankOrderCpsBatchDaoImpl implementsIReconBankOrderCpsBatchDao {static Logger logger = LogManager.getLogger(ReconBankOrderCpsBatchDaoImpl.class);@Resource(name = "reconTransBaseSqlSessionTemplate")private SqlSessionTemplate sqlSessionTemplate;@Overridepublic void saveAll(List<ReconBankOrderCpsEo> l_eos) {SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);IReconBankOrderCpsDao dao = session.getMapper(IReconBankOrderCpsDao.class);int size = l_eos.size();try {for (int i = 0; i < size; i++) {dao.save(l_eos.get(i));if (i % 1000 == 0 || i == size - 1) {//手动每1000个一提交,提交后无法回滚session.commit();//清理缓存,防止溢出session.clearCache();}}} catch (Exception e) {logger.error("批量保存失败:" ,e);session.rollback();} finally {session.close();}}@Overridepublic void batchUpdate(List<ReconBankOrderCpsEo> l_eos) {SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);IReconBankOrderCpsDao dao = session.getMapper(IReconBankOrderCpsDao.class);int size = l_eos.size();try {for (int i = 0; i < size; i++) {dao.update(l_eos.get(i));if (i % 500 == 0 || i == size - 1) {//手动每500个一提交,提交后无法回滚session.commit();//清理缓存,防止溢出session.clearCache();}}} catch (Exception e) {session.rollback();} finally {session.close();}}@Overridepublic void batchDelete(List<ReconBankOrderCpsEo> eos) {SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);IReconBankOrderCpsDao dao = session.getMapper(IReconBankOrderCpsDao.class);int size = eos.size();try {for (int i = 0; i < size; i++) {dao.delete(eos.get(i).getBankOrderId());if (i % 1000 == 0 || i == size - 1) {//手动每1000个一提交,提交后无法回滚session.commit();//清理缓存,防止溢出session.clearCache();}}} catch (Exception e) {session.rollback();} finally {session.close();}}}
使用的时候只需要在service里面调用dao就可以了。
对于批量新增, 也可以在mapper.xml中配置方法, 实现批量新增。
<!-- 保存多条记录 --><insert id="saveAll" parameterType="java.util.List">INSERT INTO RECONCAV.T_CBS_RECON_BANKORDER_HANDLE<trim prefix="(" suffix=")" ><include refid="allColumns" /></trim>SELECT RECONCAV.SEQ_bankorder_hd_tmp.NEXTVAL,RC.* from(<foreach collection="list" item="eo" index="index" separator="union all">SELECT#{eo.reconId,jdbcType=VARCHAR},#{eo.reconDate,jdbcType=TIMESTAMP},#{eo.orderDate,jdbcType=TIMESTAMP},#{eo.bankTransType,jdbcType=NUMERIC},#{eo.bankAcctId,jdbcType=VARCHAR},#{eo.productNo,jdbcType=NUMERIC},#{eo.bankNo,jdbcType=NUMERIC},#{eo.bankName,jdbcType=VARCHAR},#{eo.channelNo,jdbcType=VARCHAR},#{eo.channelName,jdbcType=VARCHAR},#{eo.merchantCode,jdbcType=VARCHAR},#{eo.orderAmount,jdbcType=NUMERIC},#{eo.cost,jdbcType=NUMERIC},#{eo.settleAmount,jdbcType=NUMERIC},#{eo.fundsReconStatus,jdbcType=NUMERIC},#{eo.aprrovalStatus,jdbcType=NUMERIC},#{eo.submitBy,jdbcType=VARCHAR},#{eo.submitDetail,jdbcType=VARCHAR},#{eo.submitTime,jdbcType=TIMESTAMP},#{eo.approvalBy,jdbcType=VARCHAR},#{eo.aprrovalDetail,jdbcType=VARCHAR},#{eo.aprrovalTime,jdbcType=TIMESTAMP},#{eo.memo,jdbcType=VARCHAR},#{eo.crtTime,jdbcType=TIMESTAMP},#{eo.updTime,jdbcType=TIMESTAMP},#{eo.uploadId,jdbcType=NUMERIC},#{eo.oraTid ,jdbcType=NUMERIC},#{eo.idTxn ,jdbcType=VARCHAR},#{eo.errorTransCode ,jdbcType=VARCHAR},#{eo.oldTransType ,jdbcType=NUMERIC},#{eo.accountBankName ,jdbcType=VARCHAR},#{eo.accountBankFullName ,jdbcType=VARCHAR},#{eo.payee ,jdbcType=VARCHAR},#{eo.failReason ,jdbcType=VARCHAR},#{eo.bankReturnDate ,jdbcType=TIMESTAMP},#{eo.accountBank ,jdbcType=VARCHAR},#{eo.traceNo ,jdbcType=VARCHAR}FROM DUAL</foreach>) RC</insert>
0 0
- java中对于大量数据采用批量处理来提高效率
- Java多线程处理大量数据
- 批量删除大量数据
- 如何在JavaScript中处理大量数据
- Java处理大量数据到Excel
- 采用批量处理技术提高数据写入性能-【张永康】
- sql sever中批量导入大量的数据
- java mysql分页查询大量数据,批量插入
- java后台数据批量处理
- Oracle中采用存储过程的方式批量更新数据
- ListView&RecycleView加载大量数据的时候如何提高效率
- java集合中大量数据的匹配
- Java 从MySQL中读取大量数据
- QTreeView处理大量数据
- c++处理大量数据
- QTreeView处理大量数据
- QTreeView处理大量数据
- CoreData处理大量数据
- Lunix Centos 6.2 安装Mysql
- 你所不知道的Android Studio调试技巧
- easyui 的Datagrid 表头显示不全问题解决
- C#中的数字格式化、格式日期格式化
- 【Android问题】解决创建Android模拟器时提示"No system images installed for this target"的问题
- java中对于大量数据采用批量处理来提高效率
- 第六章 数据库管理
- Loading Data in the Background 之Handling the Results
- shiro的两种认证过程
- AJAX对服务器返回XML的处理方法
- centos6编译安装nginx
- Kafka sink Redis (Kafka 连接 Redis)
- 在Win7设置网络负载均衡,增加带宽
- 垃圾回收机制中,引入计数是如何实现的,内部原理是什么,怎么维持对象引用的