0
点赞
收藏
分享

微信扫一扫

MyBatis-Plus中IdType策略不生效的问题

问题背景

  • 在开发过程中,我们经常会使用 MyBatis-Plus 来简化与数据库的交互,其中 IdType 是一个重要的配置项,用于指定实体类中主键的生成策略。然而,在使用 Mapper 文件进行插入操作时,有时候会遇到 IdType 策略不生效的情况,这引发了我对问题的深入探索。
  • 今天在修改公司接口时,顺手测试了一下新增功能,发现报错:Column 'xx_id' cannot be null,奇怪,明明这是一个很老的接口了,为什么还会有这个错误呢?

解决过程

  • 我检查了实体类中的主键字段是否正确使用了 @TableId 注解,并指定了正确的主键策略。确认配置没有问题。
  • 然后我查看了git日志,发现这个服务的功能最早并不是用mybatis-plus实现的,这就明了了,我开始怀疑问题可能是由于 Mapper 文件并不直接处理 IdType 策略,而是依赖于数据库的主键生成机制。于是,我尝试使用 baseMapper 进行插入操作。

// 示例代码
@Autowired
private MyEntityMapper myEntityMapper;

// 使用baseMapper进行插入操作
MyEntity entity = new MyEntity();
entity.setName("John Doe");
myEntityMapper.insert(entity);

神奇的事情发生了,使用 baseMapper 进行插入操作后,IdType 策略居然生效了!主键值按照配置的方式生成,问题解决了。

原因分析

经过对问题的排查和解决过程,我总结了以下原因:

  • IdType策略在Mapper文件中不会生效,是因为MyBatis-Plus并不直接处理实体类的主键生成策略,而是依赖于数据库的主键生成机制。
  • 使用baseMapper进行插入操作时MyBatis-Plus会在内部处理IdType策略,从而生效。

总结

  • 这个问题的解决过程让我更深入地了解了 MyBatis-Plus 的工作原理。当遇到 IdType 策略不生效的问题时,我们可以尝试使用 baseMapper 进行操作,同时需要手动配置 Mapper 文件中的主键生成策略。
  • 通过持续的学习和不断地解决问题,我们能够更好地掌握工具和框架的使用,提高开发效率和代码质量。希望本文对遇到类似问题的读者有所帮助。
举报

相关推荐

0 条评论