Mybatis的执行器


1、执行器三种类型

  • ExecutorType.SIMPLE(默认执行器

  可以返回自增键,只需要在mapper文件中,增加属性: useGeneratedKeys="true" keyProperty="productId",那么自增键会在事务提交后,自动设置到传入的    user对象中

这个类型不做特殊的事情,它只为每个语句创建一个PreparedStatement。

  • ExecutorType.REUSE

这种类型将重复使用PreparedStatements。

  • ExecutorType.BATCH

这个类型批量更新,且必要地区别开其中的select 语句,确保动作易于理解。

 

2、以下是xml文件中配置sqlsession对象并设置执行器

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">  
    <constructor-arg index="0" ref="fsasSqlSessionFactory" />  
    <constructor-arg index="1" value="SIMPLE" />  
</bean>  

也可以在SqlSessionFactory对象获取sqlsession的时候指定执行器:

sqlSessionFactory.openSession(ExecutorType.BATCH);

 

 

如果使用SIMPLE执行器,那么要想批量插入数据,需要在mapper.xml文件中使用foreach标签

<!-- 批量插入user -->  
<insert id="insertUsers" parameterType="map" useGeneratedKeys="true"  
    keyProperty="userId">  
    INSERT  
    INTO user (  
    <include refid="userColumns" />  
    , create_time,  
    update_time)  
    VALUES  
    <foreach collection="users" item="userCommand" index="index"  
        separator=",">  
        (#{userCommand.email},  
        #{userCommand.pwd},#{userCommand.nickname},  
        #{userCommand.phone},  
        #{userCommand.sign}, #{userCommand.age},  
        #{userCommand.birthday},  
        #{userCommand.sex},  
        #{userCommand.createTime},  
        now())  
    </foreach>  
</insert>  

 

使用BATCH执行器,那么要想批量插入数据只需要使用同一个sqlsession创建的对象即可

SqlSession session = sqlSessionTemplate.getSqlSessionFactory() .openSession(ExecutorType.BATCH, false); try { UserDao batchUserDao = session.getMapper(UserDao.class); for (UserCommand user : users) { batchUserDao.insertUser(user); //只需要用这一个对象 } session.commit(); // 清理缓存,防止溢出 session.clearCache(); // 添加位置信息 userLbsDao.insertUserLbses(users); } finally { session.close(); }  

 

3、SqlSessionFactory可以通过openSession获取SqlSession对象,这个方法有一些参数:

ExecutorType execType:执行器类别(我们上面讲的那三种)

boolean autoCommit:是否自动提交事务(插入数据或者更新数据都需要提交事务,否则数据不会更新到本地硬盘)

TransactionIsolationLevel level:事务级别

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM