使用LambdaQueryWrapper 写一个多表查询的例子
时间: 2023-11-04 12:01:43 浏览: 29
当然可以!LambdaQueryWrapper 是 MyBatis-Plus 提供的一个强大的 SQL 构造器,可以很方便地进行多表查询。下面是一个示例代码:
```
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getStatus, 1)
.inSql(User::getId, "select user_id from user_role where role_id = 1")
.orderByAsc(User::getCreateTime);
List<User> userList = userService.list(wrapper);
```
这个例子中,我们使用 LambdaQueryWrapper 查询了 status 为 1,且角色为 1 的用户列表,并按照创建时间升序排列。其中,inSql 方法可以使用子查询,非常方便。希望对你有所帮助!
相关问题
使用LambdaQueryWrapper 写一个多表查询的例子 不要使用insql
好的,这是一个比较简单的LambdaQueryWrapper多表查询的例子:
```
LambdaQueryWrapper<User> userWrapper = new LambdaQueryWrapper<>();
userWrapper.eq(User::getStatus, 1);
LambdaQueryWrapper<Order> orderWrapper = new LambdaQueryWrapper<>();
orderWrapper.eq(Order::getType, 2);
List<Order> orders = orderMapper.selectList(orderWrapper
.inSql("user_id", "SELECT id FROM user WHERE status = 1"));
List<User> users = userMapper.selectList(userWrapper
.inSql("id", "SELECT DISTINCT user_id FROM order WHERE type = 2"));
for (Order order : orders) {
for (User user : users) {
if (user.getId().equals(order.getUserId())) {
order.setUser(user);
break;
}
}
}
```
这是一个查询订单和用户表的例子,其中用户表和订单表是通过用户ID关联起来的。我们使用两个LambdaQueryWrapper对象来分别查询用户和订单表,并在每个对象中使用inSql方法来指定查询条件。最后通过两个for循环来将订单和用户关联起来。
lambdaquerywrapper多表查询的例子
LambdaQueryWrapper 是一个基于 Lambda 表达式的查询构造器,可以用于多表查询。以下是一个多表查询的例子:
```java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.select(User::getId, User::getUsername, Order::getOrderNo, Order::getAmount)
.eq(User::getUsername, "张三")
.eq(Order::getStatus, 1)
.eq(User::getId, Order::getUserId)
.orderByDesc(Order::getCreateTime);
List<Map<String, Object>> list = userMapper.selectMaps(wrapper);
```
这个例子中,我们查询了 User 和 Order 两张表的数据,并且只返回了部分字段。我们使用了 Lambda 表达式来指定查询条件和返回字段,使用了 selectMaps 方法来执行查询。