津爱改装车|来,全搞懂,原来Mybatis执行一个sql有这么多类型,绝( 三 )
执行日志:
[DEBUG][main] o.a.i.l.j.BaseJdbcLogger.debug ==>Preparing: insert into `user` (name) values(?); [DEBUG][main] o.a.i.l.j.BaseJdbcLogger.debug ==> Parameters: Sat Jul 04 15:07:30 CST 2020(String) [DEBUG][main] o.a.i.l.j.BaseJdbcLogger.debug ==> Parameters: Sat Jul 04 15:07:30 CST 2020(String) [DEBUG][main] o.a.i.l.j.BaseJdbcLogger.debug ==>Preparing: update `user` set name=? where id = ? [DEBUG][main] o.a.i.l.j.BaseJdbcLogger.debug ==> Parameters: Sat Jul 04 15:07:30 CST 2020(String), 2(Integer) [DEBUG][main] o.a.i.l.j.BaseJdbcLogger.debug ==> Parameters: Sat Jul 04 15:07:30 CST 2020(String), 3(Integer) [DEBUG][main] o.a.i.l.j.BaseJdbcLogger.debug ==>Preparing: insert into `user` (name) values(?); [DEBUG][main] o.a.i.l.j.BaseJdbcLogger.debug ==> Parameters: Sat Jul 04 15:07:30 CST 2020(String) [DEBUG][main] o.a.i.t.j.JdbcTransaction.commit Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4b3ed2f0] 第 1 个结果[1, 1]第 2 个结果[1, 1]第 3 个结果[1]
从日志可以看到看到清晰的执行过程 。
- 第一个insert语句后面跟着两个参数 , 是一个statement 。 对应第 1 个结果
- 第二个update语句后面跟着两个参数 , 是一个statement 。 对应第 2 个结果
- 第三个insert语句后面跟着两个参数 , 是一个statement 。 对应第 3 个结果
这是因为 Mybatis 为了保证批次和逻辑顺序一致做了优化 , 并不是相同的sql就放到相同的statement 。 而是要按照执行顺序把相同的sql当作一个批次 。
从代码中可以看到这部分逻辑:
public int doUpdate(MappedStatement ms, Object parameterObject) throws SQLException {if (sql.equals(currentSql) && ms.equals(currentStatement)) {使用当前的 statement} else {创建新的statement}}
总结网络上有些文章介绍使用 foreach 的方式执行批量操作 , 我个人不建议这样操作 。- 因为 JDBC 已经提供了批量操作的接口 , 符合规范 , 兼容性和性能更好 。
- foreach拼接的 sql 比较长 , 会增加网络流量 , 而且驱动对sql长度是有限制的 , 并且要增加allowMultiQueries参数 。
- foreach 拼接的 sql 每次都不一定相同 , 服务器会重新编译 。
【津爱改装车|来,全搞懂,原来Mybatis执行一个sql有这么多类型,绝】作者:但莫链接:来源:掘金
推荐阅读
- 律师谈站姐盗用吴磊航空里程积分|律师谈站姐盗用吴磊航空里程积分是怎么回事?什么情况?终于真相了,原来是这样!
- 扬子晚报|路边草丛“闪闪反光”,原来是粗心驾驶员丢失的货物,司机接到民警电话浑然不知
- 新鲜滴趣事|原来这些不是真的,印度的火车真的挂满人吗?看到真实的印度
- 半岛都市报|19岁女孩颅内感染!这件事很多人都爱做,网友吓蒙:原来我真的命大
- |冲上热搜第一!3万多名网友吓懵:原来我真的命大,19岁女孩颅内感染
- 那熟悉的脸|唯一拥有“坐骑”的妖怪,原来与龙族有关!,西游记中法力高强
- 阿娇头部受重伤被送医|阿娇头部受重伤被送医是怎么回事?什么情况?终于真相了,原来是这样!
- 王思聪带女生现身楼盘看房|王思聪带女生现身楼盘看房是怎么回事?什么情况?终于真相了,原来是这样!
- 站姐盗用吴磊里程积分|站姐盗用吴磊里程积分是怎么回事?什么情况?终于真相了,原来是这样!
- |19岁女孩颅内感染,冲上热搜第一!3万多名网友吓懵:原来我真的命大