原创作品,出自 “晓风残月xj” 博客,欢迎转载,转载时请务必注明出处(http://blog.youkuaiyun.com/xiaofengcanyuexj)。
由于各种原因,可能存在诸多不足,欢迎斧正!
最近DBA说数据库DB log插入insert语句时返回returning *,占用网络带宽,希望优化掉。其实本没有时间查看mybatis源码的,今天看了下,造成returning *的原因和解决方案如下,希望可以帮助解决相同的问题。
先盗图一张,说明mybatis的执行时调用顺序,原图出处 ,在此表示感谢:
配置:mybatis+postgresql.version 9.4-1201-jdbc4
1、下面是SimpleStatementHandler的update方法:
在MappedStatement中,有如下方法:
public Builder(Configuration configuration, String id, SqlSource sqlSource, SqlCommandType sqlCommandType) {
this.mappedStatement.configuration = configuration;
this.mappedStatement.id = id;
this.mappedStatement.sqlSource = sqlSource;
this.mappedStatement.statementType = StatementType.PREPARED;
this.mappedStatement.parameterMap = (new org.apache.ibatis.mapping.ParameterMap.Builder(configuration, "defaultParameterMap", (Class)null, new ArrayList(

博客探讨了在mybatis与postgresql结合使用时,由于insert语句返回returning *导致的网络带宽占用问题。DBA希望进行优化,作者分析了mybatis的执行流程,发现jdbc驱动在特定情况下会自动添加returning *。提出了几种解决方案,包括更改标签类型、设置useGeneratedKeys属性,以及在sql语句中指定返回字段。
最低0.47元/天 解锁文章
4296

被折叠的 条评论
为什么被折叠?



