mybatis批量导入 ,出现异常全部不添加(回滚)

public int importModel(MultipartFile file) throws Exception{
        String fileName = file.getOriginalFilename();
        String suffxName = fileName.substring(fileName.lastIndexOf(".",fileName.length()) );
        //System.out.println(fileName+",后缀名:"+suffxName);
        String prefix=fileName.substring(fileName.lastIndexOf("."));
        final File excelFile = File.createTempFile(UUID.randomUUID().toString(), prefix);
         //批量处理
        SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
        commericalModelMapper = session.getMapper(CommericalModelMapper.class);
        // MultipartFile to File
        file.transferTo(excelFile);
        //判断excelp版本
        Workbook workbook = null;
        if(suffxName.equals(".xlsx")){
            workbook = new XSSFWorkbook(new FileInputStream(excelFile));
        }else{
            workbook = new HSSFWorkbook(new FileInputStream(excelFile));
        }
        int count = 0;
        if(workbook != null){
            //获取excel中的数据,转换为实体类
            Sheet sheet = workbook.getSheetAt(0);
            List<CommericalModel> commericalModelList = CommericalModelResult.excelToModel(sheet);
            int limitCount = 1000;
            //进行批量添加操作(有一条不成功,全部回滚)
            if(commericalModelList != null && commericalModelList.size() > 0){
                for(int i = 0 ; i < commericalModelList.size();i++){
                    CommericalModel commericalModel = commericalModelList.get(i);
                    commericalModel.setCreateDate(new Date());
                    commericalModel.setUpdateDate(new Date());
                    commericalModel.setModelIsDelete((short)1);
                    commericalModelMapper.insert(commericalModel);
                    /*if(i != 0 && i%limitCount == 0){
                        //数量达到1000提交一次
                        session.commit();
                    } */
                    count++;
                }
                session.commit();
            }
        }
        //删除临时文件
        if(excelFile.exists()){
            excelFile.delete();
        }
        return count;
    }

  

SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH,false);commericalModelMapper = session.getMapper(CommericalModelMapper.class);

commericalModelMapper.insert(commericalModel);添加的时候使用这个,分批次导入,可以计入那行是错误的,返回;成功添加了多少行都可以处理

原文地址:https://www.cnblogs.com/lazyli/p/11511110.html

时间: 2024-08-29 12:29:08

mybatis批量导入 ,出现异常全部不添加(回滚)的相关文章

那些年我们爬过的山 - mybatis批量导入

写这篇文章之前想着给这篇博客起一个文艺一点的标题,思来想去,想到了那些年我们爬过的山,或者我们一起趟过的河?代码不规范,同事两行泪,这是多么痛的领悟啊! 背景 本组一名实习生,由于学校有事情需要回去处理,我便将他的代码接管过来,正好赶上本次迭代上线,需要将同事的代码提交测试,如果被测试出来有bug,我就来负责bug修复,代码优化等.由于不同的开发人员都有自己的编程习惯,所以不同人员所写的代码多少都会有些差异,比如:变量的命名.代码的格式等,即使组内有一套开发规范也还是会出现一些差异,这就是所谓的

批量导入图片到word并添加文件名

Sub InsertPic() Dim myfile As FileDialog Set myfile = Application.FileDialog(msoFileDialogFilePicker) With myfile .InitialFileName = "F:\" If .Show = -1 Then For Each fn In .SelectedItems Set mypic = Selection.InlineShapes.AddPicture(FileName:=f

springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息

一.知识点及问题 后端框架: Spring .Spring mvc .mybatis 业务需求: client先从服务端获取用户大量信息到client,编辑完毕之后统一Post至服务端,对于数据的改动要么全成功,要么全失败,所以须要使用事务支持. 问题: 配置Spring声明式事务,运行中出现异常未回滚.从网上查询得到一開始是自己的配置出了问题,因为配置文件的载入顺序决定了容器的载入顺序导致Spring事务没有起作用. 详情例如以下: 因为採用的是SpringMVC. MyBatis,故统一採用

spring事物回滚机制 (事务异常回滚,捕获异常不抛出就不会回滚)

当异常被捕获catch的时候,spring的事物则不会回滚 为什么不会滚呢??  spring aop  异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常: 解决方案: 1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在se

Spring事务管理只对出现运行期异常进行回滚

使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作.那么什么是检查型异常什么又是非检查型异常呢?最简单的判断点有两个:1.继承自runtimeexception或error的是非检查型异常,而继承自exception的则是检查型异常(当然,runtimeexception本身也是exception的子类). 2.对非检查型类

关于抛异常事务回滚的测试

TestController.java 代码如下***: /** * 测试异常回滚. * @return */ @RequestMapping(value = "/testExceptionRollBack") @ResponseBody public String testExceptionRollBack() { List<String> idList = Lists.newLinkedList(); idList.add("1111111111")

Spring事务异常回滚,捕获异常不抛出就不会回滚(转载) 解决了我一年前的问题

最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......    为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚. 例:     类似这样的方法不会回滚 (一个方法出错,另一个方法不会回滚) : if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); }

Spring学习笔记——Spring事务只对运行时异常回滚

我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚,岂不知Spring的事务默认只有在发生运行时异常即:RunTimeException时才会发生事务,如果一个方法抛出Exception或者Checked异常Spring的事务并不会回滚. 下面我们来看看异常的分类,异常一般分为Checked异常和RunTime异常. CheckedException: Java认为Checked异常都是可以被处理的异常,所以Java程序必须显式的处理Checked异常,如果程序没有处理checked

Spring学习笔记——Spring事务仅仅对执行时异常回滚

我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚.岂不知Spring的事务默认仅仅有在发生执行时异常即:RunTimeException时才会发生事务,假设一个方法抛出Exception或者Checked异常Spring的事务并不会回滚. 以下我们来看看异常的分类.异常一般分为Checked异常和RunTime异常. CheckedException: Java觉得Checked异常都是能够被处理的异常,所以Java程序必须显式的处理Checked异常,假设程序没有处理checke