若依框架怎么设置主键自增
时间: 2024-12-31 13:34:48 浏览: 12
### 若依框架中配置主键自增的方法
在若依框架中,可以通过两种方式来配置主键自增:全局设置和局部设置。
#### 全局设置
对于全局设定,可以在 `application.yml` 文件下进行修改。默认情况下,若依Plus项目采用的是雪花算法作为ID生成策略。为了更改此行为以支持自增或其他形式的主键生成机制,可以调整相应的配置项[^1]:
```yaml
ruoyi:
plus:
id-type: auto # 将id-type设为auto表示使用数据库内置的自动增长功能
```
#### 局部设置
当仅希望特定实体类应用不同的主键生成逻辑时,则可以选择局部设置的方式。这通常涉及到 MyBatis 的 `<selectKey>` 标签以及可能需要配合使用的 Oracle 序列或 MySQL 自动增量特性。
##### 对于MySQL环境下的局部设置:
通过MyBatis插件可以直接利用SQL语句获取最后插入记录的 ID 来完成这一需求。具体做法是在对应的 XML 映射文件内加入如下片段[^2]:
```xml
<insert id="insertUser">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
<selectKey keyProperty="userId" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
```
此处的关键在于理解各个属性的作用:
- **keyProperty**: 表明查询得到的新ID应该赋给哪个Java对象成员变量;
- **resultType**: 定义返回的数据类型;
- **order**: 描述何时执行该子查询,“BEFORE”意味着先取新ID再做INSERT;而“AFTER”则是指做完INSERT之后再去查新的ID值。
##### 针对Oracle环境下实现主键自增:
由于Oracle本身并不像某些关系型数据库那样提供简单的AUTO_INCREMENT关键字,因此往往借助序列(sequence)+触发器(trigger)的方式来达成目的。以下是创建序列与触发器的一个简单例子[^4]:
```sql
CREATE SEQUENCE seq_user_id START WITH 1 INCREMENT BY 1 NOCACHE;
CREATE OR REPLACE TRIGGER trg_user_insert
BEFORE INSERT ON users FOR EACH ROW
BEGIN
:new.user_id := seq_user_id.NEXTVAL;
END;
/
```
上述脚本首先建立了名为 `seq_user_id` 的序列用于产生唯一的编号,接着定义了一个行级前触发型触发器 `trg_user_insert` ,每当有新纪录准备被插入到表users之前都会调用一次NEXTVAL函数从而赋予其唯一标识符。
阅读全文