• mybatis批处理数据


    批处理数据主要有三种方式:

    1.传统jdbc处理    2.mybatis批处理插入    3.使用executortype处理 

    jdbc 处理 

    1.通过 for循环插入 
    
    main方法如下所示:
    
    Connection comm=null;
    
    PreparedStatement preparedStatement=null;
    
    conn=JdbcUtil.getConnection();
    
    JdbcUtil.begin(conn);
    
    String sql="insert into t_user(username,password)  values(?,?)";
    
    preparedStatement=conn.preparedStatement(sql);
    
    for (int i=0;i<1000;i++)
    {
    preparedStatement.setString(1, "hello"+(i+1));
    preparedStatement.setString(2, "world"+(i+1));
    preparedStatement.executeUpdate();
    }
    JdbcUtil.commit(conn);
    }

    这样就可以进行批量插入 

    第二种是使用addbatch方法 

    main方法如下所示:
    
    Connection comm=null;
    
    PreparedStatement preparedStatement=null;
    
    conn=JdbcUtil.getConnection();
    
    JdbcUtil.begin(conn);
    
    String sql="insert into t_user(username,password)  values(?,?)";
    
    preparedStatement=conn.preparedStatement(sql);
    
    for (int i=0;i<1000;i++)
    {
    preparedStatement.setString(1, "hello"+(i+1));
    preparedStatement.setString(2, "world"+(i+1));
    if((i+1)%1000==0){
    preparedStatement.addBatch();
    preparedStatement.executeBatch();
    preparedStatement.clearBatch();
    }
    }
    JdbcUtil.commit(conn);
    }

    两者差距在效果上后者更好一些。

    传统的jdbc对数据的批处理有一些缺点 :比如一直使用的是for循环,会浪费大量的时间在session的连接上,而且java代码和sql语句耦合度很大。

    mybatis 在处理数据的时候有两种方式,第一种是使用foreach标签,另一种是使用allowMultiQueries=true来完成。

    第一种使用foreach 

    xml文件内容如下:
    
    insert into person(username,email,gender) VALUES 
    <foreach collection="persons" item="person" separator=",">
    (#{person.username},#{person.email},#{person.gender})
    </foreach>

    java文件如下
    SqlSession sqlSession=this.getSqlSessionFactory.opensession();
    PerSonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
    List<Person> persons=new ArrayList<Person>();
    for(int i=0;i<5;i++){
    Person person=new Person("tom"+i,"email@"+i,"F");
    persons.add(person);
    }
    personMapper.addPersons(persons)
    sqlSession.commit();
    }

    另外一种需要配置文件声明allowMultiQueries=true   然后更改 xml文件中, 为;就可以了

    最后一种批量操作的方法是 executortype的方式 

    1. xml语句 
    insert into person(username,email,gender) values (#{username},#{email},#{gender}) 

    java语句
    SqlSession sqlSession=this.getSqlSessionFactory.opensession(ExecutorType.BATCH);
    PerSonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
    for(int i=0;i<5;i++){
    personMapper.addPerson(new Person("wang","email@123.com","F"));

    }
     
  • 相关阅读:
    电赛菜鸟营培训(五)——OLED屏幕的使用
    网站构建学习笔记(0)——基本概念了解及资源学习(copy自w3school)
    AppInventor学习笔记(五)——瓢虫快跑应用学习
    电赛菜鸟营培训(四)——STM32F103CB之ADC转换
    电赛菜鸟营培训(三)——STM32F103CB之串口通信
    [I2C]pca9555(i2c-gpio扩展)应用层测试代码
    [shell]简单的shell提示和参数脚本
    [Busybox]Busybox制作文件系统
    [boostrap]debian下为arm创建debian和emdebian文件系统
    [debootstrap]制作基于arm平台的debian文件系统
  • 原文地址:https://www.cnblogs.com/qiujichu/p/10994806.html
Copyright © 2020-2023  润新知