id生成策略
新增成功后,注解ID是一个很长串的内容,我们更想按照数据库表字段进行自增长。
不同的表应用不同的id生成策略
日志:自增(1、2、3、4、......)
购物订单:特殊规则(PQ23534AJ4398)
外卖单:关联地区日期等信息(10 04 20220405 23 14)
关系表:可省略id
......
不同的业务采用的ID生成方式应该是不一样的,那么在MP中就需要用到一个注解@TableId
名称 | @TableId |
类型 | 属性注解 |
位置 | 模型类中用于表示主键的属性定义上方 |
作用 | 设置当前类中主键属性的生成策略 |
相关属性 | value(默认):设置数据表主键名称 type:设置注解属性的生成策略,值查照IdType的枚举值 |
一、AUTO策略
代码演示
1、设置生成策略为AUTO
@Data @TableName("tbl_user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; @TableField(value="pwd",select=false) private String password; private Integer age; private String tel; @TableField(exist=false) p rivate Integer online; }
2、删除测试数据并修改自增值
因为之前生成的ID值比较长,会把MySQL的自动增长的值变的很大,所以需要将其调整为目前最小的id值
3、运行新增方法
会发现,新增成功,并且按照注解id自增
AUTO的作用是使用数据库ID自增,在使用该策略的时候一定要确保对应的数据表设置了ID主键自增,否则无效。
二、INPUT策略
1、设置生成策略为INPUT
@Data @TableName("tbl_user") public class User { @TableId(type = IdType.INPUT) private Long id; private String name; @TableField(value="pwd",select=false) private String password; private Integer age; private String tel; @TableField(exist=false) private Integer online; }
注意:这种ID生成策略,需要将表的自增策略删除掉
2、添加数据手动设置ID
@SpringBootTest class Mybatisplus03DqlApplicationTests { @Autowired private UserDao userDao; @Test void testSave(){ User user = new User(); //设置主键ID的值 user.setId(666L); user.setName("夏志121"); user.setPassword("ttjbyd"); user.setAge(12); user.setTel("4006184000"); userDao.insert(user); } }
3、运行新增方法
如果没有设置主键ID的值,则会报错,错误提示就是主键ID没有给值
如果设置了主键ID,则数据就能添加成功。