session的运行模式、批量提交

session的运行模式域批量提交:

    mybatis的执行器有三种,即:

    1)ExecutorType.SIMPLE;这种类型不做特殊的处理。只为每个语句创建一个PreparedStatement。

    2)ExecutorType.REUSE; 这种类型会重复使用PreparedStatement。

    3)ExecutorType.BATCH;这种类型实现批量更新,并且避开select语句,确保该动作易于理解。

可以只配置sqlSession时指定相应的类型。

  1. <bean id="fsasSqlSession" class="org.mybatis.spring.SqlSessionTemplate">  
  2.     <constructor-arg index="0" ref="fsasSqlSessionFactory" />  
  3.     <constructor-arg index="1" value="SIMPLE" />  
  4. </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。

    •    


猜你喜欢

转载自blog.csdn.net/qq_39244264/article/details/80054819