如何实现后端开发框架(八)-自动生成主键ID
如何实现后端开发框架(八)-自动生成主键ID
1.问题描述
后端在设计数据库时每张表都需要设计一个主键,那么在开发框架上如何自动生成这个主键值呢?
2.实现思路
在开发框架上给每张数据库表都设计一个独立的主键字段,如果数据表还需要业务主键那么就设计额外字段进行处理。
主键ID生成方式强烈推荐使用UUID就行了,不用使用数据库生成方式(数据库序列,自增长方式等),使用UUID在系统初始数据准备,系统上线数据准备,数据库数据迁移时会非常方便。
我们利用MyBatis-Plus的主键生成策略功能来实现自动生成主键ID。
参考资料:https://baomidou.com/guides/key-generator/
3.实现步骤
往实体基类上添加通用主键ID,使用@TableId来标识主键字段,默认会使用雪花算法结合不含中划线的UUID作为ID生成方式。
如果想修改ID生成方式,例如使用数据库方式来生成ID,参考资料:https://baomidou.com/reference/#idtype
如果需要实现自定义业务ID生成,参考资料:https://baomidou.com/guides/key-generator/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Data
@EqualsAndHashCode()
public class MyBaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "ID")
protected String id;
/** 创建用户 */
@TableField(value = "CREATE_USER", fill = FieldFill.INSERT)
protected String createUser;
/** 创建时间 */
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
protected Date createTime;
/** 修改用户 */
@TableField(value = "UPDATE_USER", fill = FieldFill.INSERT_UPDATE)
protected String updateUser;
/** 修改时间 */
@TableField(value = "UPDATE_TIME", fill = FieldFill.INSERT_UPDATE)
protected Date updateTime;
@TableField(exist = false)
protected long pageSize;
@TableField(exist = false)
protected long currentPage;
}
4.测试代码
使用Mybatis-Plus的数据库新增API后,数据库ID就会按照配置的主键生成策略自动生成。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
@RequestMapping("/test/user")
public class UserController extends MyBaseController<UserService, User> {
/**
* 创建用户信息
*
* @param user
* @return
*/
@PostMapping(value = "/create")
public boolean create(@RequestBody User user) {
return myBaseService.save(user);
}
}
5.完整代码
完整代码见以下Git仓库中的”autogenerate-id”子项目:
https://github.com/randy0098/framework-samples
本文由作者按照
CC BY 4.0
进行授权