mybatis批量操作
mybatis如何批量插入呢?常用的做法如下代码所示:
|
|
但是,这样有个影藏的bug:当user集合超过一定数量,会导致动态拼接的sql过长而导致执行报错。并且,批量更新就不能使用这种形式了。
使用mybatis批量提交方式
是否有一种通用的写法实现批量操作呢?查看github中mybatis的官方wiki,里面有批量操作的示例(传送门):
|
|
这种java代码形式的批量操作更加通用且直观。但是需要自己管理sqlsession,这部分自我管理sqlsession的代码不但容易忘记(特别是finally中的sqlsession.close),而且违反了DRY原则,代码也显得冗长。
使用java8 lambda改造
首先对于sqlsession的资源管理可以使用java7的特性,try-with-resources管理。例如以下代码:
|
|
然而,获取sqlsession和sql.commit等部分仍然是重复代码。调用者可能并不关心这些实现细节。
将批量操作独立为一个工具类,并使用java8 lambda改造:
|
|
客户端使用示例:
|
|