mybatisplus多表关联查询
时间: 2023-05-12 14:06:34 浏览: 131
MybatisPlus支持多表关联查询,可以使用@Join注解来实现。例如,如果要查询用户表和订单表的信息,可以使用以下代码:
```
@TableName("user")
public class User {
@TableId
private Long id;
private String name;
private Integer age;
}
@TableName("order")
public class Order {
@TableId
private Long id;
private Long userId;
private BigDecimal amount;
}
@Join(value = "LEFT", column = "id", refColumn = "userId")
public class UserOrderVO extends User {
private BigDecimal amount;
}
```
这里定义了两个实体类User和Order,以及一个VO类UserOrderVO,使用@Join注解将User和Order关联起来,查询结果会将User和Order的信息合并到UserOrderVO中。
相关问题
mybatisplus多表关联查询条件查询
在 MyBatis Plus 中进行多表关联查询条件查询可以使用 Wrapper 来构建查询条件。以下是一个示例:
```java
// 导入相关类
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
// 创建 QueryWrapper 对象
QueryWrapper<EntityA> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("columnA", valueA);
// 进行关联查询
queryWrapper.inSql("columnB", "SELECT columnB FROM tableB WHERE conditionB");
// 执行查询
List<EntityA> result = entityAMapper.selectList(queryWrapper);
```
在上述代码中,我们使用 QueryWrapper 对象构建查询条件。`eq` 方法用于添加等于条件,`inSql` 方法用于添加子查询条件。最后,使用 selectList 方法执行查询。
注意,EntityA 和 EntityB 是实体类,entityAMapper 是对应的 MyBatis Mapper 接口。根据你的具体场景,需要替换成对应的实体类和 Mapper 接口。
这只是一个简单的示例,你可以根据实际需求自定义更复杂的查询条件。MyBatis Plus 还提供了丰富的查询方法和条件构造器,可以满足各种查询需求。
mybatisplus多表关联查询demo
当然,我可以为您提供一个使用Mybatis Plus进行多表关联查询的示例。以下是示例代码:
```java
public interface UserMapper extends BaseMapper<User> {
/**
* 多表关联查询示例
* @param id 用户id
* @return UserVo
*/
UserVo getUserVoById(Long id);
}
```
```java
public interface RoleMapper extends BaseMapper<Role> {
/**
* 多表关联查询示例
* @param id 用户id
* @return List<Role>
*/
List<Role> selectRolesByUserId(@Param("userId") Long id);
}
```
```java
public interface UserRoleMapper extends BaseMapper<UserRole> {
}
```
```java
@AllArgsConstructor
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
private final RoleMapper roleMapper;
private final UserRoleMapper userRoleMapper;
@Override
public UserVo getUserVoById(Long id) {
// 从user表中查询出id为传入参数id的用户
User user = getById(id);
if (user == null) {
return null;
}
// 从user_role表中查询出user_id为传入参数id的记录
QueryWrapper<UserRole> userRoleWrapper = new QueryWrapper<>();
userRoleWrapper.eq("user_id", id);
List<UserRole> userRoles = userRoleMapper.selectList(userRoleWrapper);
if (CollectionUtils.isEmpty(userRoles)) {
return null;
}
// 将查询出的roleId封装到List中
List<Long> roleIds = userRoles.stream().map(UserRole::getRoleId).collect(Collectors.toList());
// 根据roleIds查询对应的role
List<Role> roles = roleMapper.selectBatchIds(roleIds);
return UserVo.builder().user(user).roles(roles).build();
}
}
```
这个示例展示了如何使用Mybatis Plus进行多表关联查询,包括查询User表,查询UserRole表,查询Role表。希望能对您有所帮助。
阅读全文