Mybatis使用纪要

一、生产问题记录

1、id由自增主键改为雪花算法

1)场景:
新建了一个表,开始设置为自增主键,后来考虑到数据迁移、合并数据自增主键会很麻烦,所以想改用雪花算法生成的id
2)问题:
第一步改数据库表设置,取消主键自增;这个没问题。
第二步,对应实体类,主键用mybatis的注解@TableId(type= IdType.ASSIGN_ID)设置为雪花算法生成。要用雪花算法生成主键,新增方法必须用mybatis自带的插入方法,手写sql则mybatis不会生成主键,会导致插入错误。

完成上述修改后,我以为就改好了,但是自测新增发现还是报错

SQLException: Field 'id' doesn't have a default value

意思是,没有传id值,表配置又不是自增主键,所以id为空、插入失败
3)解决方法:
经过排查我发现,我的新增接口调用的不是mybatis的basemapper中的新增方法。
我的mapper接口文件、xml文件,是用mybatis逆向工程插件生成的,可能是勾选了某些配置,它生成mapper接口问题、xml文件时,给里边添加了一些常用的增删改查方法;新增方法insert(T entity);与basemapper中的新增方法名称格式完全一样,但是这个逆向工程生成的新增方法没有插入id(一开始表是自增主键,id不用配置、由数据库自动生成),当功能接口调用时它会优先调用mapper中的方法(它认为手写的方法优先,而mapper中的方法、也就是逆向工程生成的方法被认为是手写的方法)。

所以解决方法就是,删掉逆向工程生成的insert方法(或者改名字,不要与basemapper插入方法一样)。

2、实体类中有表中没有的字段,导致使用basemapper新增方法插入失败

解决方法:使用mybatis注解@TableField(exist = false)
将表中没有的字段进行非表字段标识

你可能感兴趣的:(数据库,后端,mybatis)