目录
id生成策略
新增成功后,注解ID是一个很长串的内容,我们更想按照数据库表字段进行自增长。
不同的表应用不同的id生成策略
日志:自增(1、2、3、4、......)
购物订单:特殊规则(PQ23534AJ4398)
外卖单:关联地区日期等信息(10 04 20220405 23 14)
关系表:可省略id
......
不同的业务采用的ID生成方式应该是不一样的,那么在MP中就需要用到一个注解@TableId
| 名称 | @TableId |
| 类型 | 属性注解 |
| 位置 | 模型类中用于表示主键的属性定义上方 |
| 作用 | 设置当前类中主键属性的生成策略 |
| 相关属性 | value(默认):设置数据表主键名称 type:设置注解属性的生成策略,值查照IdType的枚举值 |
代码演示
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主键自增,否则无效。
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,则数据就能添加成功。