mybatis使用的一点小结:session运行模式及批量提交
来源:互联网 发布:excel数据误删怎么恢复 编辑:程序博客网 时间:2024/05/22 10:43
mybatis的执行器有三种类型:
- ExecutorType.SIMPLE
- ExecutorType.REUSE
- ExecutorType.BATCH
可以在配置sqlSession时指定相应的类型:
<bean id="fsasSqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="fsasSqlSessionFactory" /><constructor-arg index="1" value="SIMPLE" /></bean>
也可以在通过SqlSessionFactory创建一个SqlSession时指定:
sqlSessionFactory.openSession(ExecutorType.BATCH);
openSession有很多方式:
SqlSession openSession()SqlSession openSession(boolean autoCommit)SqlSession openSession(Connection connection)SqlSession openSession(TransactionIsolationLevel level)SqlSession openSession(ExecutorType execType,TransactionIsolationLevellevel)SqlSession openSession(ExecutorType execType)SqlSession openSession(ExecutorType execType, boolean autoCommit)SqlSession openSession(ExecutorTyp
三种类型执行器除了上面的特点外,在使用过程中还发现:
- ExecutorType.SIMPLE:可以返回自增键,只需要在mapper文件中,增加属性: useGeneratedKeys="true" keyProperty="productId"
<!-- 插入一个user --><insert id="insertUser" parameterType="User"statementType="PREPARED" useGeneratedKeys="true" keyProperty="userId">INSERTINTO user (<include refid="userColumns" />, create_time,update_time)VALUES(#{email}, #{pwd},#{nickname},#{phone}, #{sign}, #{age},#{birthday},#{createTime},now())</insert>
那么自增键会在事务提交后,自动设置到传入的user对象中 - ExecutorType.BATCH:当前最新版本的mybatis(mybatis-3.2.0)无法再返回自增键值,只返回最后一个更新记录的自增键值(基本上没上意义)。并且无法返回更新数据的记录数
- 要实现批量插入数据有两种方式:
- 使用SIMPLE执行器,借助foreach动态sql语句,使用Insert values(...),(...),(...) 的方式,这种方式无法取到自增键
比如<!-- 批量插入user --><insert id="insertUsers" parameterType="map" useGeneratedKeys="true"keyProperty="userId">INSERTINTO 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的执行器类型一旦设置就无法动态修改,所以如果在配置文件中设置了执行器为SIMPLE,当要使用BATCH执行器时,需要临时获取:
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(); }
这个方法仍然需要包在事务中
- mybatis使用的一点小结:session运行模式及批量提交
- session运行模式、批量提交
- mybatis 使用经验小结,batch批量提交大量数据
- mybatis 使用经验小结,batch批量提交大量数据
- MyBatis的使用小结
- Mybatis批量插入的使用
- PHP的运行模式小结
- PHP的运行模式小结
- mybatis 的crud及批量cud操作
- mybatis中Oracle数据库的批量增删改操作小结
- cookie及session的一点理解及疑惑
- Mybatis的批量处理标签使用场景
- session的使用:防止表单重复提交
- 使用mybatis 批量更新
- Entity Framework4.5及之前的批量提交与事务处理
- mybatis在oracle中的一点小结
- Session的一点体会
- Session的一点理解
- linux/ubuntu install boost .
- VC操作Excel——Excel的某个操作在vc里如何实现
- PHP基于数组的分页函数(核心函数array_slice())
- ACM排序
- Linux系统下的C语言开发都需要学些的知识
- mybatis使用的一点小结:session运行模式及批量提交
- jdbc数据库连接实例(oracle)
- MongoDB 修改器 简介
- OSI七层模型的作用
- java中protected权限总结
- Servlet事件监听器(1)
- Eclipse3.7.2中openfire3.7.1源码部署及生成安装文件
- 杭电 ACM 1.2.7
- Oracle中文乱码处理