商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Mybatis-plus之空值无法插入问题及解决

Mybatis-plus之空值无法插入问题及解决

  发布于2026-05-22 阅读(0)

扫一扫,手机访问

Mybatis-plus之空值无法插入

在使用MyBatis-Plus进行开发时,你可能会遇到一个让人有点头疼的问题:当实体类中某个字段的值为null时,执行插入操作会抛出异常,导致数据无法正常写入数据库。这通常不是业务逻辑错误,而是框架在类型映射时的一个“小脾气”。

遇到的异常

典型的错误信息长这样:

Mybatis-plus之空值无法插入问题及解决

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='couldDismantle', mode=IN, ja vaType=class ja va.lang.Long, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: JDBC requires that the JdbcType must be specified for all nullable parameters.

简单来说,就是MyBatis在准备SQL参数时,发现一个可为空的字段没有指定对应的数据库JDBC类型(JdbcType)。对于自动生成的插入代码,如果字段值为null,框架有时无法智能推断该用哪种JdbcType,于是就直接“罢工”了。

别担心,这个问题有清晰的解决思路。下面介绍两种主流方法,你可以根据项目配置习惯选择其一。

方法一:在YAML配置文件中全局设置

如果你的项目使用YAML作为配置文件(比如application.yml),这是最简洁的解决方式。只需在MyBatis的配置项下,添加一个关键设置:jdbc-type-for-null

mybatis:
  configuration:
    # 开启驼峰命名自动映射(按需)
    mapUnderscoreToCamelCase: true
    # 关键配置:为null值指定JDBC类型为NULL
    jdbc-type-for-null: 'null'
  # 你的Mapper XML文件位置
  mapper-locations: classpath*:mapper/*.xml

这里将jdbc-type-for-null设置为'null'(注意是字符串形式的‘null’),等于明确告诉MyBatis:“遇到值为null的参数,统一使用JdbcType.NULL来处理”。这样一来,插入空值就不再是问题了。

方法二:通过Ja va配置类进行设置

对于更喜欢通过Ja va代码进行显式配置的项目,可以通过自定义SqlSessionFactory来实现。这种方式尤其适合多数据源等复杂场景。

@Configuration
@MapperScan(basePackages = {"com.XXXX.mapper"}, sqlSessionFactoryRef = "XXXXXX")
public class DbYYConfig {

    @Autowired
    @Qualifier("XXXX")
    private DataSource dataSourceDb2;

    @Bean
    public SqlSessionFactory sqlSessionFactoryDb2() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSourceDb2);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        
        // 核心:创建Configuration对象并设置属性
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true); // 驼峰映射
        configuration.setJdbcTypeForNull(JdbcType.NULL); // 解决空值插入问题
        factoryBean.setConfiguration(configuration);
        
        return factoryBean.getObject();
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplateDb2() throws Exception {
        return new SqlSessionTemplate(sqlSessionFactoryDb2());
    }

}

关键在于第16行:configuration.setJdbcTypeForNull(JdbcType.NULL);。这行代码的作用与YAML配置中的jdbc-type-for-null完全一致,都是在框架层面为null值绑定一个明确的JDBC类型。

总结

MyBatis-Plus插入操作因空值报错,根源在于未明确指定null参数的JDBC类型。解决之道就是统一配置,让框架知道如何处理null。两种配置方式任选其一即可,通常修改YAML文件更为快捷,而在需要精细控制数据源或配置的场合,Ja va配置类则提供了更大的灵活性。希望这个梳理能帮助你顺利解决这个常见的开发小障碍。

本文转载于:https://www.jb51.net/program/3634393bh.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注