当前使用版本(必填,否则不予处理)

3.3.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用updateBatchById,集合为2197条数据,报错。

将2197条数据遍历使用updateById,则正常。 将日志调整为debug级,使用updateBatchById查看生成的sql,将sql直接在数据库运行也正常。

重现步骤(如果有就写完整)

报错信息

Cause: java.sql.BatchUpdateException: java.lang.NullPointerException

Comment From: lucheng

你这个我用3.3.2版本 也没复现

Comment From: miemieYaho

有复现demo?

Comment From: 112921482

大概定位到问题,并不是数量的问题。使用mysql数据库,表中有一个字段类型为date,对应entity的类型为LocalDate,如果该字段保存值,则报错,不保存的话updateBatchById不会保存,只有一条数据的时候也是如此,

Comment From: miemieYaho

那就是驱动问题,不支持jdbc4,mybatis底层全面升级为jdbc4了

Comment From: 112921482

那我现在要怎么解决呢?

Comment From: 112921482

问题是,我单独使用updateById不会报错,只有在使用updateBatchById才报错,这也是因为驱动问题吗?

Comment From: lucheng

本地也没复现,你把你的核心问题代码 发出来。 数据库是mysql吧, 字段date 属性是localdate 对吧

Comment From: 112921482

@Test void batchUpdateTest1() { List<PortalUser> portalUserList = portalUserService.list(); portalUserList.forEach(portalUser -> portalUser.setRealName(LocalDateTime.now().toString())); portalUserService.updateBatchById(portalUserList); } @Test void batchUpdateTest12() { List<PortalUser> portalUserList = portalUserService.list(); portalUserList.forEach(portalUser -> { portalUser.setRealName(LocalDateTime.now().toString()); portalUser.setBirthday(LocalDate.now()); }); portalUserService.updateBatchById(portalUserList); } 两个测试,第一个测试不设置生日可以通过,第二个设置则报错,数据库mysql,版本5.7.30

Comment From: miemieYaho

驱动版本?

Comment From: 112921482

springboot项目,springboot版本:2.3.0,mysql版本:8.0.20

Comment From: miemieYaho

pom里和mybatis有关的都有啥?

Comment From: 112921482

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.2</version>
    </dependency>

Comment From: miemieYaho

去掉,只保留mp的

Comment From: 112921482

去掉了,还是报错

Comment From: miemieYaho

那你整个复现demo吧

Comment From: 112921482

demo.zip

Comment From: 112921482

我用这个demo可以成功复现,复现的代码在测试类中,使用的数据库是mysql5.7.30

Comment From: miemieYaho

MyBatis-Plus updateBatchById批量更新报空指针异常 没毛病啊

Comment From: 112921482

要不链我的测试库试试?我数据库就报错啊

Comment From: miemieYaho

data-source-properties:
        cachePrepStmts: true
        prepStmtCacheSize: 250
        prepStmtCacheSqlLimit: 2048
        useServerPrepStmts: true
        useLocalSessionState: true
        rewriteBatchedStatements: true
        cacheResultSetMetadata: true
        cacheServerConfiguration: true
        elideSetAutoCommits: true
        maintainTimeStats: false

你这一坨配置的问题.搞不懂啥意思就别乱配,over

Comment From: 112921482

你有没有跑data.sql里面先插入一条数据。。。。

Comment From: 112921482

这是hikari的推荐配置啊我的哥,你跑的时候数据库有数据吗?

Comment From: miemieYaho

看图片,里面有debug的sql

Comment From: 112921482

要不连我的数据库试试?为啥我连自己的就报错呢???

Comment From: 112921482

试了下,真是配置的问题。。。按照hikari配的。。。我再研究研究,谢谢了

Comment From: lucheng

这很尴尬...