MyBatisPlus批量操作
前言
使用mybatis plus自带的插入语句,有些不给力,如果你定义了自增的id,那么在批量插入的时候,就会出现下面的一些问题,但是如果你去掉了实体类的自增id,虽然可以执行批量插入,但是在执行update方法的时候,因为无法根据主键进行更新,所以更新的时候,就会有问题。最好的办法就是自定义批量插入语句。
1.定义xml
1 | <!--批量插入操作--> |
2.修改mapper
1 | /** |
3.使用
1 | List<Daily> subList=new ArrayList(); |
问题
1.Error getting generated key or setting result to parameter object
在执行批量插入的时候,虽然可以插入成功,但是报了一个错误:必须执行该语句才能获得结果。如果我的实体类中没有id这个字段,插入的时候是不报错的。也就是说批量插入的操作,这个主键的生成策略还是有影响的。
【解决方法】
(1) 第一种:曲线救国的思想就是在批量插入的时候,不要使用id主键。要么就要自己去拼接insert into 方法。比如下面的更新和插入的例子
1 |
|
(2) 第二种:就是在使用jdbc的时候,指定批量操作
1 | // mysql |
1.mybatis批量insert出现Error getting generated key or setting result to parameter object解决办法
2.[2.3.1]sqlserver2008R2 insertBatch 报[必须执行该语句才能获得结果] 这个问题四年前就有了,到现在也没有一个明确的解决方案。里面提到了一个 为什么不用 mp idWroker 完美解决呢?
3.mybatis plus 报错com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果 这里采用的就是报错不予处理的方式解决的问题。因为是主键ID回填,但是要求该数据库提供的 JDBC 驱动可以支持返回批量插入的主键值(JDBC提供了接口,但并不是所有数据库都完美实现了该接口)因此到目前为止,可以完美支持该功能的仅有MySQL数据库。由于SQL Server数据库官方提供的 JDBC 只能返回最后一个插入数据的主键值,所以不能支持该功能。
4.mybatis-plus使用上需要注意的问题 一种是在mysql的数据源中加入allowMultiQueries=true,还有一种结果在sql中使用igrone,我试了一下在其后加上allowMultiQueries=true,发现可以实现。
5.MyBatis-Plus id主键使用ID_WORKER策略踩坑记录 官方说这里默认使用ID_WORKER策略,实际上就是一种id生成策略。
6.mybatis 中 使用 allowMultiQueries=true datasource.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=databaseName;allowMultiQueries=true
7.mybatis(6)—实现批量操作allowMultiQueries=true配置 批量插入时,可以构建多个value()。最终与数据库执行时只是一条sql语句。
2.Mapped Statements collection does not contain value for deleteByid
在执行批量删除的时候,报了这个错误。因为我自定义了 mapper.xml 但是里面没有deleteByid的声明,理论上不应该啊,不是兼容的吗?我还需要单独创建一个deleteByid接口吗?
【解决方法】
我就是在xml文件和mapper映射文件中增加了一个 deleteById 方法
1 | <delete id="deleteById" parameterType="int"> |
1.mybatis IllegalArgumentException: Mapped Statements collection does not contain value
2.mybatis-plus批量删除_Mybatis Plus mapper的多种姿势删除数据
3.mybatis 中之批量删除操作
3.传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求
在执行批量插入的时候,出现了这个问题,我插入的时候,插入的条数是339条,参数的个数为11个,总共 339*11=3729,超过了2100个数量,需要分批插入。
1 | <insert id="batchSave" parameterType="java.util.List"> |
【解决方法】
参数过多,那就只能分批插入了,11个参数,总共2100,一次只能插入190条。
1 | /** |
1.传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
2.解决传入的请求具有过多的参数,该服务器支持最多 2100 个参数
3.关于数据库操作参数过多的异常 将一句sql中执行N次插入换成N条sql进行执行即可