mybatisplus多表查询
时间: 2023-05-16 18:06:27 浏览: 74
可以使用MybatisPlus的Wrapper来实现多表查询,例如:
```
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("user.id", "user.name", "order.order_no", "order.amount")
.eq("user.id", 1)
.leftJoin("order", "user.id = order.user_id");
List<Map<String, Object>> list = userMapper.selectMaps(wrapper);
```
这个例子中,我们查询了用户表和订单表,使用了左连接,查询了用户的ID和姓名,以及订单的订单号和金额。最后使用selectMaps方法返回查询结果。
相关问题
mybatisplus 多表查询
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接口中使用。
mybatisplus多表查询分页
mybatisplus多表查询分页可以通过使用MybatisPlus的Wrapper和Page对象来实现。
首先,需要创建一个Wrapper对象,并在其中添加需要查询的条件和关联表。例如:
```java
Wrapper<User> wrapper = new QueryWrapper<User>()
.eq("user_type", "admin")
.like("user_name", "张")
.orderByAsc("user_id")
.last("limit 10");
wrapper.inSql("dept_id", "select dept_id from dept where dept_name like '%财务%'");
```
这个Wrapper对象可以用来查询User表中用户类型为admin,用户名包含张的用户,并按照用户ID升序排序,最后只返回前10条数据。同时,还添加了一个关联查询,查询部门名称中包含财务的部门。
接下来,需要使用Page对象来进行分页查询。例如:
```java
IPage<User> page = new Page<>(1, 10);
IPage<User> result = userMapper.selectPage(page, wrapper);
```
这个例子中,使用Page对象来进行分页查询,查询第1页的10条数据。使用selectPage方法来执行查询,并将Wrapper对象作为参数传入。最终返回的结果是一个IPage对象,包含了查询到的数据和分页信息。
综上所述,使用MybatisPlus的Wrapper和Page对象,可以方便地实现多表查询和分页查询。