问题描述
有些需求,需要把上一步批量操作返回的主键作为下个表的关联使用,这个时候用mybatis批量操作,mybatis批量操作有些版本不能返回主键,只能一个一个的插入,这样就降低了效率。
问题跟踪
跟踪1
mybatis的主线版本,能够正确返回主键id,主线版本修复了这个问题,并且@Param可以自定义命名 可以自己自定义集合属性名字 执行成功并返回主键id
跟踪2
mybais的3.3.x-3.4.x源码里面判断参数的属性,并设值 在这些版本是修复了这个问题,但是还有限制,@Param只能是list或者是colletions或者是array才能返回id 接口方法里面的属性必须是list或者是colletions或者是array才能返回id 批量保存方法for里面的属性是list
跟踪3
项目如果用mybatis-plus,MybatisDefaultParameterHandler类已经处理了这种情况,如果是自定义的参数会转换成map,然后根据map再进行转换 获得参数之后,进行换行处理 获取主键属性,进行设值
总结
1、有时候出现问题得查看历史版本,并从提交问题单中找到解决的办法, 2、没有解决的方案,就重写框架代码,比如mybatisplus就是重写了ParameterHandler来进行参数的进一步处理。 3、在项目中如果确实没有好的解决办法,那就暂时放下,有空就不断的寻求最佳解决方案