mybatis plus 设置联合主键
时间: 2025-05-17 21:14:25 浏览: 15
### MyBatis Plus 设置复合主键或联合主键的方法
在 MyBatis Plus 中,可以通过特定的注解来实现复合主键(也称为联合主键)的功能。以下是具体方法:
#### 实体类配置
对于复合主键的支持,MyBatis Plus 提供了自定义注解 `@MppMultiId` 来标识多个字段作为主键的一部分[^1]。这些字段不再使用单主键标注 `@TableId`,而是通过组合的方式形成唯一约束。
以下是一个典型的实体类示例:
```java
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.annotations.MppMultiId;
import java.io.Serializable;
@TableName("etl_job")
public class Job implements Serializable {
private static final long serialVersionUID = 1L;
@MppMultiId // 复合主键之一
private String etlSystem;
@MppMultiId // 复合主键之二
private String etlJob;
// Getter 和 Setter 方法省略...
}
```
上述代码中,`etlSystem` 和 `etlJob` 被标记为复合主键的一部分[^2]。
---
#### Mapper 接口扩展
为了支持基于复合主键的操作,Mapper 需要继承 `MppBaseMapper<T>` 类型接口,而不是普通的 `BaseMapper<T>`。这使得框架能够识别并处理多主键逻辑。
例如:
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.mpp.MppBaseMapper;
public interface JobMapper extends MppBaseMapper<Job> {
}
```
这里的关键在于继承了 `MppBaseMapper`,它提供了针对复合主键场景下的 CRUD 支持功能[^3]。
---
#### 数据库表结构设计
数据库中的表也需要适配这种复合主键的设计模式。通常情况下,在创建数据表时会指定两个列共同构成主键关系。例如 SQL 定义如下:
```sql
CREATE TABLE etl_job (
etl_system VARCHAR(50) NOT NULL,
etl_job VARCHAR(50) NOT NULL,
PRIMARY KEY (etl_system, etl_job)
);
```
此语句明确了 `etl_system` 和 `etl_job` 是该表的联合主键。
---
#### 使用注意事项
- **查询条件匹配**:当执行更新、删除或其他依赖于主键的操作时,必须提供完整的复合主键值集合。
- **性能优化**:确保索引合理分布以提升涉及复杂主键操作的效率。
---
阅读全文
相关推荐


















