mybatis-plus外键注解
时间: 2023-09-26 09:14:44 浏览: 629
MyBatis-Plus提供了三种方式来实现外键关系:
1. @TableField注解:使用此注解来标记外键字段,并且在insert/update语句时会自动将该字段的值设置为关联表的主键值。
2. @TableId注解:使用此注解来标记关联表的主键字段,然后使用@JoinColumn注解来标记外键字段。
3. @JoinColumn注解:使用此注解来标记外键字段,并且使用@OneToOne等注解来标记关联关系。
相关问题
mybatis-plus 外键关联
Mybatis-Plus 支持外键关联的操作,具体实现方式可以分为两种:
1. 通过 `@TableField` 注解指定关联属性,使用 `@TableField(exist = false)` 标识该属性为非数据库字段,然后通过 `@TableField(value = "foreign_key")` 指定关联的外键字段。具体代码如下:
```java
@Data
public class User {
private Long id;
private String name;
private Integer age;
@TableField(value = "dept_id")
private Long deptId;
}
@Data
public class Dept {
private Long id;
private String name;
}
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("select u.*, d.name as dept_name from user u left join dept d on u.dept_id = d.id where u.id=#{id}")
User selectUserWithDept(Long id);
}
```
2. 使用 Mybatis-Plus 提供的 `@TableName` 注解的 `excludeProperty` 属性指定不需要插入的属性,然后使用 `@TableId` 注解指定主键,使用 `@TableField` 注解指定外键。具体代码如下:
```java
@Data
@TableName(excludeProperty = "dept")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
@TableField("dept_id")
private Long deptId;
@TableField(exist = false)
private Dept dept;
}
@Data
@TableName("dept")
public class Dept {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
}
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("select u.*, d.name as dept_name from user u left join dept d on u.dept_id = d.id where u.id=#{id}")
@Results({
@Result(column = "dept_id", property = "deptId"),
@Result(column = "dept_name", property = "dept.name")
})
User selectUserWithDept(Long id);
}
```
这里使用 `@Results` 注解来指定结果集中的属性映射关系,其中 `column` 指定查询结果中的列名,`property` 指定实体类中的属性名。
@TableField以Mybatis-plus实现外键策略的代码举例
好的,可以的。以下是一个示例代码,展示了如何使用Mybatis-plus实现外键策略:
```
public class Order {
private Long id;
@TableField("user_id")
private Long userId;
private String itemName;
private BigDecimal amount;
// getters and setters
}
public class User {
private Long id;
private String name;
// getters and setters
}
public interface UserMapper extends BaseMapper<User> {
}
public interface OrderMapper extends BaseMapper<Order> {
@Select("SELECT * FROM user WHERE id = #{userId}")
User getUserByUserId(@Param("userId") Long userId);
}
```
在上述代码中,Order类具有一个user_id字段,它是外键,指向User表的id字段。
为了实现这个外键策略,我们需要在Order类中使用@TableField注解来指定外键字段名。然后,在OrderMapper中,我们定义了一个getUserByUserId方法,可以通过userId查询对应的User记录。
这样,使用Mybatis-plus实现外键策略就可以很简单地完成。
阅读全文