session的运行模式域批量提交:
mybatis的执行器有三种,即:
1)ExecutorType.SIMPLE;这种类型不做特殊的处理。只为每个语句创建一个PreparedStatement。
2)ExecutorType.REUSE; 这种类型会重复使用PreparedStatement。
3)ExecutorType.BATCH;这种类型实现批量更新,并且避开select语句,确保该动作易于理解。
可以只配置sqlSession时指定相应的类型。
- <bean id="fsasSqlSession" class="org.mybatis.spring.SqlSessionTemplate">
- <constructor-arg index="0" ref="fsasSqlSessionFactory" />
- <constructor-arg index="1" value="SIMPLE" />
- </bean>
也可以通过SqlSessionFactory打开session时指定。
sqlSessionFactory.openSession(ExecutorType.BATCH);
session打开的方式有很多种:
在创建session时我们有很多种选择,譬如:是否自动提交,事务的级别,执行的方式等我们都可以指定,但是默认的执行器是SIMPLE。
这三种执行器除了上述特点外,在我们使用过程中还发现:
- ExecutorType.SIMPLE:可以返回自增键,只需要在mapper文件中,增加属性: useGeneratedKeys="true" keyProperty="productId"
- 自增键会在事务提交之后,自动传入到user中。
- ExecutorType.BATCH:当前最新版本的mybatis(mybatis-3.2.0)无法再返回自增键值,只返回最后一个更新记录的自增键值(基本上没上意义)。并且无法返回更新数据的记录数
- 要实现批量插入数据有两种方式:
- 1)使用SIMPLE执行器,借助foreach动态sql语句,使用Insert values(...),(...),(...) 的方式,这种方式无法取到自增键。
- 2)使用BATCH执行器,但是SqlSession的执行器类型一旦设置就无法动态修改,所以如果在配置文件中设置了执行器为SIMPLE,当要使用BATCH执行器时,需要临时获取,也就是你设定的执行方式这个session中都是一样的,除非自己新建一个session。
-
-