(七)mybatis批量操作

首先使用方式很简单:

SqlSession sqlSession = sessionFactory.openSession(ExecutorType.BATCH);

批量操作核心:改变执行sql的方式,改为BATCH

那么原因是什么呢?

首先普通方式是插入一条数据,就搭建一个sql语句,然后传入参数,执行sql,但是BATCH方式,预编译一次,我们将sql语句的框架先搭建好,之后每次执行的时候,只需要给里面填,并不需要再次搭建sql语句。

通过控制台日志输出也可以看的出来:

这是BATCH方式的批量插入的:

EBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@52851b44]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@52851b44]
DEBUG [main] - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@52851b44]
DEBUG [main] - Returned connection 1384454980 to pool.

Process finished with exit code 0

这是不使用BATCH

EBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: insert into student ( name, loves ) values ( ?, ? ) 
DEBUG [main] - ==> Parameters: 温鸿飞(String), dsadsa(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1852a3ff]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1852a3ff]
DEBUG [main] - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1852a3ff]
DEBUG [main] - Returned connection 408069119 to pool.

Process finished with exit code 0

可以看到预编译了很多次。

 

 

猜你喜欢

转载自www.cnblogs.com/eenio/p/11364568.html