mybatis使用的一点小结:session运行模式及批量提交(转)
mybatis的执行器有三种类型:
- ExecutorType.SIMPLE
这个类型不做特殊的事情,它只为每个语句创建一个PreparedStatement。
- ExecutorType.REUSE
这种类型将重复使用PreparedStatements。
- 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创建一个SqlSession时指定:
- sqlSessionFactory.openSession(ExecutorType.BATCH);
openSession有很多方式:
- SqlSession openSession()
- SqlSession openSession(boolean autoCommit)
- SqlSession openSession(Connection connection)
- SqlSession openSession(TransactionIsolationLevel level)
- SqlSession openSession(ExecutorType execType,TransactionIsolationLevel
- level)
- SqlSession openSession(ExecutorType execType)
- SqlSession openSession(ExecutorType execType, boolean autoCommit)
- SqlSession openSession(ExecutorTyp
默认执行器是SIMPLE。
三种类型执行器除了上面的特点外,在使用过程中还发现:
- ExecutorType.SIMPLE:可以返回自增键,只需要在mapper文件中,增加属性: useGeneratedKeys="true" keyProperty="productId"
- <!-- 插入一个user -->
- <insert id="insertUser" parameterType="User"
- statementType="PREPARED" useGeneratedKeys="true" keyProperty="userId">
- INSERT
- INTO 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">
- 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的执行器类型一旦设置就无法动态修改,所以如果在配置文件中设置了执行器为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运行模式及批量提交(转)的更多相关文章
- Spark学习之路(五)—— Spark运行模式与作业提交
一.作业提交 1.1 spark-submit Spark所有模式均使用spark-submit命令提交作业,其格式如下: ./bin/spark-submit \ --class <main- ...
- Spark 系列(五)—— Spark 运行模式与作业提交
一.作业提交 1.1 spark-submit Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下: ./bin/spark-submit \ --class <ma ...
- Mybatis之基础应用小结以及IntelliJ IDEA目录结构的一些小问题
IntelliJ IDEA 目录结构的一些小问题 [Mybatis 之基础应用小结] 1.不管怎么样,先建立一个简单的MySQL数据表,如下所示 2.接下来要做的事情就是通过Mybatis对数据表进行 ...
- Apache Flink on K8s:四种运行模式,我该选择哪种?
1. 前言 Apache Flink 是一个分布式流处理引擎,它提供了丰富且易用的API来处理有状态的流处理应用,并且在支持容错的前提下,高效.大规模的运行此类应用.通过支持事件时间(event-ti ...
- PHP运行模式
1.运行模式 关于PHP目前比较常见的五大运行模式: 1)CGI(通用网关接口 / Common Gateway Interface) 2)FastCGI(常驻型CGI / Long-Live CGI ...
- php运行模式的比较(转)
PHP运行模式有4钟:1)cgi 通用网关接口(Common Gateway Interface))2) fast-cgi 常驻 (long-live) 型的 CGI3) cli 命令行运行 ( ...
- 【转载】PHP运行模式的深入理解
PHP运行模式的深入理解 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-03我要评论 本篇文章是对PHP运行模式进行了详细的分析介绍,需要的朋友参考下 PHP运行模式有4钟:1) ...
- ARM处理器的寄存器,ARM与Thumb状态,7中运行模式 【转】
转自:http://blog.chinaunix.net/uid-28458801-id-3494646.html ARM处理器工作模式一共有 7 种 : USR 模式 正常用户模式,程序正常 ...
- PHP运行模式的深入理解
PHP运行模式有4钟:1)cgi 通用网关接口(Common Gateway Interface))2) fast-cgi 常驻 (long-live) 型的 CGI3) cli 命令行运行 ( ...
随机推荐
- 在linux 下安装git
① 安装 Git Linux 做为服务器端系统,Windows 作为客户端系统,分别安装 Git 服务器端: #yum install -y git 安装完后,查看 Git 版本 [root@loca ...
- idea 导入(非maven)web项目并发布到tomcat服务器
IDEA 2017.1版本 web项目导入并发布到Tomcat服务器 1.点击编辑项目结构 2.点击project 将项目编译输出目录改成{项目目录}/OUT,并设置项目环境,编译版本 3.点击mod ...
- 【java工具类】上传文件
/**上传文件 * @param file 文件 * @param filePath 上传文件路径,不包含文件名 * @param fileName 新的文件名 * @return 返回一个路径名 * ...
- 2-sat基础详解
(大量引用<2-SAT解法浅析 -by 华中师大一附中 赵爽><由对称性解2-SAT问题> Great_Influence关于P4782 [模板]2-SAT 问题的题解.在此对 ...
- xwiki使用中的问题
xwiki 内存限制 问题重现: xwiki启动后内存.cpu一直上涨,不回落,启动后服务访问速度越来越慢,最后无法访问 分析: xwiki在启动时会消耗大量内存和cpu,增加tomcat最大内存限制 ...
- Mongo Cursor
简介 在使用 Java 对数据库进行连接时,都会获取到一个 cursor ,cursor 实际指到的是我们查询数据库的query,而并不是 query 查询到的数据集. 此次在使用 mongo 的 c ...
- SpringMVC参数传递 HttpServletRequest,HttpServletResponse和HttpSession
SpringMVC参数传递 HttpServletRequest,HttpServletResponse和HttpSession 2017-11-27 16:44:51 douunderstand 阅 ...
- SSH三大框架整合配置详解
首先,三大框架整合,肯定是要导入相当多的jar包,这是不容置疑的! 这里就不一一列举了,直接截图吧: (1) 基于配置文件的整合: 第一步:我们需要在we ...
- webpack学习之路--demo1
1.不使用框架建立webpack项目时 (1).npm init -y 生成package.json文件 (2).npm install --save-dev webpack 在当前项目下安装webp ...
- 20191031-2 Beta阶段贡献分配规则
此次作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9910 贡献分分配规则: 组内一共五名同学,贡献分共计50分. 1.每人 ...