mybatisplus @one
时间: 2024-12-31 20:41:03 浏览: 11
### MyBatis-Plus 中 @One 注解的使用方法
#### 定义实体类关系映射
为了展示如何使用 `@One` 注解,假设存在两个表:`user` 和 `department`。其中 `user` 表中的某个字段关联到 `department` 表。
```java
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long deptId;
```
在 `User` 实体中定义外键字段来表示部门 ID[^3]。
#### 创建 Department 实体类
```java
@Data
public class Department {
private Long id;
private String name;
}
```
此部分描述了 `Department` 类的基础结构[^1]。
#### 配置 User 实体类并应用 @One 注解
通过 `@One` 注解可以指定一对一的关系,并设置联合查询的方式:
```java
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
@Data
public class User extends Model<User> {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long id;
/**
* 编码
*/
private String code;
/**
* 名称
*/
private String name;
/**
* 状态 1启用 0停用
*/
private String status;
/**
* 创建时间
*/
private Date gmtCreate;
/**
* 修改时间
*/
private Date gmtModified;
/**
* 所属部门ID
*/
@TableField(exist = false)
private Long deptId;
/**
* 关联的部门对象
*/
@One(select = "com.example.mapper.DepartmentMapper.selectById")
private Department department;
}
```
这里特别注意的是 `select` 属性指定了用于加载关联数据的方法路径,即 `DepartmentMapper.selectById` 方法用来根据 `deptId` 获取对应的 `Department` 对象实例。
当执行涉及 `User` 的查询操作时,如果启用了懒加载机制,则会在实际访问 `department` 字段的时候才发起 SQL 请求去获取相应的 `Department` 数据;如果是急切加载模式下则会立即连同用户的详情一起查出来[^2]。
阅读全文