怎么利用MyBatis传List类型参数到数据库存储过程中实现批量插入数据?
MyBatis中参数是List类型时怎么处理?大家都知道MyBatis批处理大量数据是很难做到事务回滚的(事务由Spring管理),都将逻辑写在存储中又是及其头疼的一件事(参数长度也有限制),那么我想的是将参数在后台封装为单个或多个list集合,直接通过MyBatis将此参数传到数据库存储过程中,一来摆脱了MyBatis批量插入数据的诸多限制(例如:不能实时返回主键、foreach标签循环集合长度有限制),二来就是在存储中灵活的控制事务,但是这又会涉及两个问题,MyBatis的xml文件中该怎么封装,利用BaseTypeHandler吗?
对于这个问题,经过一天的研究终于算是跑通了,说一下解决办法:
1.建立数据库表,大家应该都有自己的库表了,所以这一步基本上就可以跳过了。我之所以在这里把库表贴出来是为了让大家对应里面的参数。
数据库表:
2.在数据库中建立相应的java对象(Oracle中的类型)和数组:
3.存储过程:
4.再看看mybatis的配置吧:
5.看看我是如何调用的?我直接贴我的server代码了,dao层的就没必要了:
6.非常关键的一点儿,细心的人应该会注意到,在mapper.xml配置中,有typeHandler配置,里面配置的实际上是我写的一个类,这个类的作用就是讲java中的list转换成数据库中我们建立的对象和数组,看代码吧:
以上所述是小编给大家介绍的Mybatis传list参数调用oracle存储过程的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.csdn.net/qq_32078397/article/details/61195720