mybatisplus复合主键
时间: 2025-02-21 19:30:25 浏览: 49
### MyBatis Plus 中实现复合主键的方法
MyBatis Plus 提供了特定的方式用于处理实体类中的复合主键。对于复合主键的支持,可以通过定义一个包含多个属性作为联合主键的类来表示这些组合键。
#### 方法一:使用 `@KeySequence` 和自定义注解
虽然官方文档中提到不直接支持复合主键[^2],但在实际应用中可以采用变通方法之一是创建一个新的 Java 类用来封装所有的主键字段,并将其设置为实体对象的一个成员变量,在该类上标注 `@TableField(exist=false)` 来表明这不是数据库表里的列而是辅助性的结构体;接着在这个新类里声明各个组成部分并分别加上 `@TableId(type= IdType.INPUT)` 注释指定为主键部分[^1]。
```java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
public class CompositeKey {
@TableId(value="id_1", type = IdType.INPUT)
private Long idOne;
@TableId(value="id_2", type = IdType.INPUT)
private String idTwo;
// getters and setters...
}
```
然后在对应的 Entity 对象里面引入这个复合主键:
```java
@TableField(exist=false)
private CompositeKey compositeKey;
```
#### 方法二:利用继承机制
另一种方式则是让实体类去继承实现了 Serializable 接口的基础 POJO 类,此基础类包含了构成复合主键所需的所有字段以及相应的 getter/setter 方法。这种方式下不需要额外添加任何特殊标记,只需确保子类正确覆盖父类中的 equals() 及 hashCode() 即可正常工作。
```java
// BaseCompositePrimaryKey.java
public abstract class BaseCompositePrimaryKey implements java.io.Serializable {
protected Integer partA;
protected String partB;
public boolean equals(Object obj){
...
}
public int hashCode(){
...
}
}
@Entity
public class ChildEntity extends BaseCompositePrimaryKey{
// other fields...
}
```
以上两种方案都可以有效地解决 MyBatis Plus 下复合主键的问题,具体选择取决于项目需求和个人偏好。
阅读全文
相关推荐










