Mybatis批量新增数据

d1d758da5eef134f17586e9f7b55a59fa51.jpg

86ff52457439779f8abe987b1ac74bd4748.jpg

package jdbc;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * by imooc
 */
public class JdbcUtil {

   //处理数据库事务的 提交事务
   public static void commit(Connection conn)
   {
      if(null!=conn)
      {
         try {
            conn.commit();
         } catch (SQLException e) {
            e.printStackTrace();
         }
      }


   }

   //事务的回滚
   public static void rollback(Connection conn)
   {
      if(null!=conn)
      {
         try {
            conn.rollback();
         } catch (SQLException e) {
            e.printStackTrace();
         }
      }

   }

   //事务的开始
   public static void begin(Connection conn)
   {
      if(null!=conn)
      {
         try {
            conn.setAutoCommit(false);
         } catch (SQLException e) {
            e.printStackTrace();
         }
      }

   }


   /**
    * 获取连接的方法
    * @return Connection
    * @throws Exception
    */
   public static Connection getConnection() throws Exception
   {
      Properties properties=new Properties();
      //速度快的方式
      //new fileinputStream();
      InputStream is=JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
      //jdbc文件 内容 以流的方法加载到properties文件中 ing     alias  alies
      properties.load(is);
      String driver=properties.getProperty("driver");
      String username=properties.getProperty("username");
      String password=properties.getProperty("password");
      String url=properties.getProperty("jdbcUrl");
      /*System.out.println(driver+"password"+password);*/
      Class.forName(driver);

      return DriverManager.getConnection(url, username, password);

   }
   /**
    * 通用的关闭资源的方法
    * @param conn
    * @param statement
    * @param resultSet
    */
   public static void closeResources(Connection conn,Statement statement,ResultSet resultSet)
   {
      if(null!=conn)
      {
         try {
            conn.close();
         } catch (SQLException e) {
            e.printStackTrace();
         }
      }
      if(null!=statement)
      {
         try {
            statement.close();
         } catch (SQLException e) {
            e.printStackTrace();
         }
      }

      if(null!=resultSet)
      {
         try {
            resultSet.close();
         } catch (SQLException e) {
            e.printStackTrace();
         }
      }


   }

   public static void main(String[] args) throws Exception {
      System.out.println(JdbcUtil.getConnection());
   }

}
package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;

/**
 * Created by imooc
 */
public class BatchTestOne {

    public static void main(String[] args) throws  Exception {

        Connection conn=null;
        PreparedStatement preparedStatement=null;
        conn=JdbcUtil.getConnection();
        JdbcUtil.begin(conn);
        String sql="insert into t_user(username,password) values(?,?)";
        preparedStatement=conn.prepareStatement(sql);

        long beginTime=System.currentTimeMillis();
        for (int i = 0; i <10000 ; i++)
        {
            preparedStatement.setString(1,"hello"+(i+1));
            preparedStatement.setString(2,"world"+(i+1));
            preparedStatement.executeUpdate();
        }
        JdbcUtil.commit(conn);
        long endTime=System.currentTimeMillis();
        System.out.println("total time:"+(endTime-beginTime));//2277
    }
}
package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;

/**
 * Created by imooc
 */
public class BatchTestTwo {

    public static void main(String[] args) throws  Exception {

        Connection conn=null;
        PreparedStatement preparedStatement=null;
        conn=JdbcUtil.getConnection();
        JdbcUtil.begin(conn);//autocommit false
        String sql="insert into t_user(username,password) values(?,?)";
        preparedStatement=conn.prepareStatement(sql);


        long beginTime=System.currentTimeMillis();
        for (int i = 0; i <10000 ; i++)
        {
            preparedStatement.setString(1,"hello"+(i+1));
            preparedStatement.setString(2,"world"+(i+1));

            preparedStatement.addBatch();

            if((i+1)%500==0)
            {
                preparedStatement.executeBatch();
                preparedStatement.clearBatch();
            }
        }
        //若果不是500的倍数,执行剩余部分
        preparedStatement.executeBatch();
        preparedStatement.clearBatch();
        long endTime=System.currentTimeMillis();
        System.out.println(endTime-beginTime);

        JdbcUtil.commit(conn);
    }
}

9e29bb04e2fda0af971642f8a3dac324dcc.jpg

5510dd95ad51bc1a58a8d79623c1c6a7677.jpg

=======方式一============

public int addPersons(@Param("persons") List<Person> persons);
<insert id="addPersons">
  insert into person(username,email,gender) VALUES
  <foreach collection="persons" item="person" separator=",">
    (#{person.username},#{person.email},#{person.gender})
  </foreach>
</insert>
public void processMybatisBatch()
{
    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();

====方式二=============

jdbc.url=jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true
<insert id="addPersons">
   <foreach collection="persons" item="person" separator=";">
      insert into person(username,email,gender) VALUES
     (#{person.username},#{person.email},#{person.gender})
    </foreach>
 </insert>

====方式三:ExecutorType=================

public int addPerson(Person user);
<insert id="addPerson" parameterType="person">
  insert into person(username,email,gender) VALUES (#{username},#{email},#{gender})
</insert>
public void testBatchForExecutor()
{
    SqlSession sqlSession=getSqlSessionFactory().openSession(ExecutorType.BATCH);
    PersonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
    for (int i=0;i<10000;i++){
        personMapper.addPerson(new Person("tom","tom@imooc.com","F"));
    }
    sqlSession.commit();
    sqlSession.close();

59705e3004c998bc6c6770eae9547223460.jpg

当几十或几百条的批量添加,可以使用第一种方式。如果不知道多少条的情况,使用第二种方式。

转载于:https://my.oschina.net/popfei/blog/1837034

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值