jeecgboot自动增加序号怎么设置
时间: 2025-03-25 15:11:04 浏览: 67
### JeecgBoot 中自动递增序号功能的配置
JeecgBoot 是一款基于 Spring Boot 和 MyBatis-Plus 的低代码开发平台,提供了丰富的扩展性和灵活性来满足不同的业务需求。对于实现字段的自动递增序号功能,可以通过数据库设计以及框架内置特性相结合的方式完成。
#### 数据库层面的设计
在 MySQL 或其他支持自增特性的关系型数据库中,可以将目标字段设置为主键并启用 `AUTO_INCREMENT` 属性[^1]。这种方式适用于唯一标识符的需求场景。如果需要的是非主键字段的递增逻辑,则需通过程序控制。
```sql
CREATE TABLE example_table (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
serial_number INT NOT NULL DEFAULT 0 COMMENT '序列号'
);
```
#### 使用 MyBatis-Plus 实现自动递增
MyBatis-Plus 提供了多种方式处理实体类属性默认值初始化和更新操作。以下是两种常见的解决方案:
##### 方法一:利用填充处理器(MetaObjectHandler)
创建一个继承于 `com.baomidou.mybatisplus.core.handlers.MetaObjectHandler` 的类,在其中定义插入前后的回调函数用于赋值给指定列初始值或者计算下一个可用编号[^2]。
```java
@Component
public class SerialNumberFiller implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "serialNumber", () -> getNextSerial(), Integer.class); // 自动填充新增记录时的流水码
}
private int getNextSerial() {
ExampleTableMapper mapper = SpringContextUtils.getBean(ExampleTableMapper.class);
QueryWrapper<ExampleTable> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("id").last("LIMIT 1");
ExampleTable lastRecord = mapper.selectOne(queryWrapper);
if (null != lastRecord && null != lastRecord.getSerialNumber()) {
return lastRecord.getSerialNumber() + 1;
} else {
return 1; // 如果表为空则返回第一个号码
}
}
}
```
##### 方法二:借助注解@TableName与@TableField
另一种更简洁的方法是在对应的 Entity 类上标注好映射关系之后,直接针对特定字段加上 `valueGenerator` 注解参数指向某个生成器实例名即可[^3]。
```java
@Data
@TableName("example_table")
public class ExampleEntity {
@TableId(type= IdType.AUTO)
private Long id;
@TableField(value="serial_number", fill= FieldFill.INSERT_UPDATE, generator="customSerialGen")
private Integer serialNumber;
}
// 定义自己的ValueGenerator Bean组件
@Bean(name="customSerialGen")
public ValueGenerator<Integer> customSerialGenerator(){
return new CustomSerialValueGenerator();
}
```
以上介绍了几种可能的技术路线去达成 jeecg-boot 应用中的连续整数编码管理目的。具体采用哪一种取决于实际项目环境和个人偏好等因素考虑决定。
阅读全文
相关推荐















