因为业务发展,个别数据表业务量增速过快,已达到分库分表需要,于是引入shardingjdbc组件进行分表,但是发现之前mybatis生成的数据表对应实体类主键id可以通过自己set值来实现自定义主键,尽管字段上写了注解
@Table(type=IdType.AUTO)
private int id;
user.setId(100);
userMapper.save(user);
INSERT INTO USER(id,name) VALUES(100,'张三')
引入sharding-jdbc后,发现自行setId后插入,会报错提示主键id不能为空,通过查看sql执行日志发现,里面并没有id字段,所以报错
INSERT INTO USER(name) VALUES('张三')
当然,我们可以通过mybatisplus注解生成主键
//uuid主键
@TableId(type = IdType.UUID)
//雪花算法主键
@TableId(type = IdType.ID_WORKER)
但是我们想要自定义主键:
1、自定义新的IdentifierGenerator替换默认的,但是有个问题,这个操作是全局的,假设我一些表想用uuid做主键,一些想用自增。
2、使用@TableId(type = IdType.INPUT)注解
本人工作中这么用是解决了问题,但是又有另一个问题,我想达到未引入shardingjdbc前的效果,也就是我加了
@TableId(type = IdType.UUID)
但是当我setId(“abc”),就能用我set的值,这个能否实现,知道的小伙伴可以留言讨论