mybatisplus 多表查询
时间: 2023-09-02 07:12:09 浏览: 101
MybatisPlus支持多种多表查询方式:
1.嵌套查询
使用MybatisPlus的wrapper构建多层嵌套查询,例如:
```java
QueryWrapper<User> userWrapper = new QueryWrapper<>();
userWrapper.lambda().eq(User::getUsername, "admin");
QueryWrapper<Role> roleWrapper = new QueryWrapper<>();
roleWrapper.lambda().inSql(Role::getId, "select role_id from t_user_role where user_id = (select id from t_user where username = 'admin')");
List<Role> roles = roleMapper.selectList(roleWrapper);
```
这里使用了两个wrapper,分别查询了用户和用户对应的角色,其中用户ID作为角色查询的条件。使用inSql将子查询的结果作为in条件。
2.联表查询
使用MybatisPlus的wrapper构建多表联合查询,例如:
```java
QueryWrapper<User> userWrapper = new QueryWrapper<>();
userWrapper.lambda().eq(User::getUsername, "admin");
QueryWrapper<Role> roleWrapper = new QueryWrapper<>();
roleWrapper.lambda().eq(Role::getRoleName, "admin");
List<UserRoleVO> userRoleVOS = userMapper.selectUserRoleVOList(userWrapper, roleWrapper);
```
这里使用了两个wrapper,分别查询了用户和角色,使用自定义的mapper方法selectUserRoleVOList完成联表查询。
3.使用@Sql注解
使用MybatisPlus的@Sql注解,直接在mapper接口中编写SQL语句,例如:
```java
@Sql("select u.*, r.role_name from t_user u left join t_user_role ur on u.id = ur.user_id left join t_role r on ur.role_id = r.id where u.username = #{username} and r.role_name = #{roleName}")
List<UserRoleVO> selectUserRoleVOList(@Param("username") String username, @Param("roleName") String roleName);
```
这里使用了@Sql注解,编写了多表联合查询的SQL语句,直接在mapper接口中使用。
阅读全文