Mybatis之批量执行SQL语句
2018-01-28 16:04
447 查看
之前做批量插入SQL时都是用的
执行批量插入数据如下
执行上述方法,数据库中批量插入语数据
其中id为自动增长的主键,7-14中缺失的部分数据,是因为之前出入数据时没有执行commit,所以没有插入到数据库中。
注意:
如果在mybatis的配置位置xml文件中没有配置defaultExecutorType默认执行器的话,mybatis默认执行简单SQL语句,即一次数据库连接只发送一条SQL语句,此时要做批量执行需要用
默认配置如下
当然也可以在配置文件中设置批量执行,在执行SQL语句时就不需要再设置批量执行器了ExecutorType.BATCH,整个工程中的所有SQL语句都会使用批量执行的方式。
此种方法不可取,还是采用上面的默认配置方式,然后在获取session时设置批量执行器。
然后在做批量执行的时候,获得这个session就可以
<foreach>标签,但有时需要插入成千上万条语句,此时用
<foreach>标签拼接的SQL就会非常大,有时数据库识别不了。
<foreach>标签作用组成一个非常大的批量插入SQL语句,让不同数据库去支持执行非常大的SQL语句;而mybatis本身设计了批量执行SQL的方法,让数据库一条一条的SQL语句执行,但不是每执行一条连接一次数据库,而是连接一次数据库,然后依次执行每条数据库。
一、批量插入SQL
目前数据库中数据如下执行批量插入数据如下
public static void testGetUserMap(){ String resource = "conf.xml"; InputStream in = MybaitsTest.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); /*获得session时,传入批量执行器ExecutorType.BATCH*/ SqlSession session = factory.openSession(ExecutorType.BATCH); UserDao userDao = session.getMapper(UserDao.class); User user = new User(0, "wanger", 25); for(int i=0; i<10; i++){ userDao.addUsers(user); } /*一定要执行commit,否则数据库中不会插入数据*/ session.commit(); }
执行上述方法,数据库中批量插入语数据
其中id为自动增长的主键,7-14中缺失的部分数据,是因为之前出入数据时没有执行commit,所以没有插入到数据库中。
注意:
如果在mybatis的配置位置xml文件中没有配置defaultExecutorType默认执行器的话,mybatis默认执行简单SQL语句,即一次数据库连接只发送一条SQL语句,此时要做批量执行需要用
<foreach>标签拼接成一个大SQL语句,然后一次执行完毕。或者用上述批量插入方法,在获得session时设置批量执行器。
默认配置如下
<settings> <setting name="defaultExecutorType" value="SIMPLE"/> </settings>
当然也可以在配置文件中设置批量执行,在执行SQL语句时就不需要再设置批量执行器了ExecutorType.BATCH,整个工程中的所有SQL语句都会使用批量执行的方式。
<settings> <setting name="defaultExecutorType" value="BATCH"/> </settings>
此种方法不可取,还是采用上面的默认配置方式,然后在获取session时设置批量执行器。
二、spring集成mybatis时批量执行
需要在spring的配置xml文件中加入下面的配置<!--配置一个可以进行批量执行的sqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"></constructor-arg> <constructor-arg name="executorType" value="BATCH"></constructor-arg> </bean>
然后在做批量执行的时候,获得这个session就可以
@Autowired private SqlSession sqlSession; public List<User> getUsers(){ UserDao userDao= sqlSession.getMapper(UserDao .class); return userDao.getUsers(); }
相关文章推荐
- [MyBatis]获取数据库连接、批量执行SQL语句
- [MyBatis]获取数据库连接、批量执行SQL语句
- 在C#中执行带有GO的批量sql语句
- c#实现用SQL池(多线程),定时批量执行SQL语句 (转)
- Statement批量执行sql语句,批量操作数据库,提高数据库效率
- c#实现用SQL池,多线程定时批量执行SQL语句
- 批量执行sql语句的方法
- 解决mybatis执行SQL语句部分参数返回NULL问题
- Mysql bench执行sql语句批量操作数据所遇到的问题
- Mybatis中的resultType和resultMap(mybatis执行ddl语句和特殊sql语句)
- [转]c#实现用SQL池(多线程),定时批量执行SQL语句
- Mybatis执行SQL语句的方式
- Mybatis在编译器中打印sql语句及执行后的结果
- 在mybatis执行SQL语句之前进行拦击处理
- JDBC PreparedStatement高级特性:批量执行sql语句
- MyBatis直接执行SQL查询及批量插入数据
- MyBatis直接执行SQL查询及批量插入数据
- 用SHELL的循环批量执行SQL语句
- 解决:mybatis执行SQL语句部分参数返回NULL
- 【二十四】使用mysqli扩展类批量执行多条sql语句