mybatis采坑记及源码分析

简介: 问题描述有些需求,需要把上一步批量操作返回的主键作为下个表的关联使用,这个时候用mybatis批量操作,mybatis批量操作有些版本不能返回主键,只能一个一个的插入,这样就降低了效率。接口

问题描述

有些需求,需要把上一步批量操作返回的主键作为下个表的关联使用,这个时候用mybatis批量操作,mybatis批量操作有些版本不能返回主键,只能一个一个的插入,这样就降低了效率。

问题跟踪

跟踪1

mybatis的主线版本,能够正确返回主键id,主线版本修复了这个问题,并且@Param可以自定义命名


可以自己自定义集合属性名字


执行成功并返回主键id

跟踪2

mybais的3.3.x-3.4.x源码里面判断参数的属性,并设值br/>在这些版本是修复了这个问题,但是还有限制,@Param只能是list或者是colletions或者是array才能返回id


接口方法里面的属性必须是list或者是colletions或者是array才能返回id


批量保存方法for里面的属性是list

跟踪3

项目如果用mybatis-plus,
MybatisDefaultParameterHandler类已经处理了这种情况,如果是自定义的参数会转换成map,然后根据map再进行转换


获得参数之后,进行换行处理


获取主键属性,进行
设值

总结

1、有时候出现问题得查看历史版本,并从提交问题单中找到解决的办法,
2、没有解决的方案,就重写框架代码,比如mybatisplus就是重写了ParameterHandler来进行参数的进一步处理。
3、在项目中如果确实没有好的解决办法,那就暂时放下,有空就不断的寻求最佳解决方案


相关文章
|
7月前
|
SQL Java 数据库连接
Mybatis源码分析系列之第三篇:Mybatis的操作类型对象
Mybatis源码分析系列之第三篇:Mybatis的操作类型对象
|
SQL XML Java
源码分析系列教程(08) - 手写MyBatis(注解版)
源码分析系列教程(08) - 手写MyBatis(注解版)
124 0
|
2月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
177 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
7月前
|
存储 缓存 Java
探秘MyBatis缓存原理:Cache接口与实现类源码分析
探秘MyBatis缓存原理:Cache接口与实现类源码分析
117 2
探秘MyBatis缓存原理:Cache接口与实现类源码分析
|
7月前
|
SQL Java 数据库连接
MyBatis源码篇:mybatis拦截器源码分析
MyBatis源码篇:mybatis拦截器源码分析
|
7月前
|
缓存 Java 数据库连接
|
7月前
|
SQL Java 数据库连接
|
7月前
|
设计模式 SQL Java
Mybatis源码分析系列之第四篇:Mybatis中代理设计模型源码详解
Mybatis源码分析系列之第四篇:Mybatis中代理设计模型源码详解
|
7月前
|
存储 SQL Java
Mybatis源码分析系列之第二篇:Mybatis的数据存储对象
Mybatis源码分析系列之第二篇:Mybatis的数据存储对象
|
7月前
|
Java 关系型数据库 数据库连接
Mybatis源码分析系列之第一篇:回顾一下MyBatis的使用
Mybatis源码分析系列之第一篇:回顾一下MyBatis的使用