mybatis-plus关联映射
时间: 2023-11-17 21:56:22 浏览: 245
mybatis-plus支持多种关联映射方式,包括一对一、一对多、多对一、多对多等。其中,一对一和一对多的映射比较简单,多对一和多对多的映射需要使用@ManyToOne和@ManyToMany注解来实现。
举个例子,如果有一个用户表和一个订单表,一个用户可以有多个订单,那么可以使用@OneToMany注解来实现:
```java
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
@OneToMany(mappedBy = "user")
private List<Order> orders;
}
public class Order {
@TableId(type = IdType.AUTO)
private Long id;
private String orderNo;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
```
其中,User类中的orders属性使用@OneToMany注解标注,mappedBy属性指定了Order类中的user属性与User类中的orders属性的映射关系。Order类中的user属性使用@ManyToOne注解标注,JoinColumn注解指定了user_id字段与User表中的id字段的映射关系。
相关问题
mybatis-plus-join关联查询
mybatis-plus-join是一个用于简化mybatis联表查询的工具,它可以帮助开发者在不编写繁琐的SQL语句和XML文件的情况下实现联表查询。通过引入mybatis-plus-join的starter工程,我们可以轻松地实现表的连表功能。具体使用方法可以参考插件文档\[2\]\[3\],其中包含了详细的使用说明和示例。通过使用mybatis-plus-join,开发者可以更加方便地进行一对多和一对一映射查询。
#### 引用[.reference_title]
- *1* *2* *3* [MybatisPlus多表连接查询](https://blog.csdn.net/bjdiys/article/details/130230405)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
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` 指定实体类中的属性名。
阅读全文