mybatisplus嵌套查询
时间: 2023-11-08 09:06:01 浏览: 154
mybatisplus支持使用LambdaQueryWrapper进行嵌套查询,可以通过nested方法实现。例如:
```
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.nested(i -> i.eq(User::getName, "Tom").or().eq(User::getName, "Jerry"));
List<User> userList = userMapper.selectList(wrapper);
```
以上代码实现了一个嵌套查询,查询条件为name为Tom或者name为Jerry的用户列表。
相关问题
mybatisplus 嵌套查询
mybatisplus 支持使用 LambdaWrapper 进行嵌套查询,具体可以参考官方文档中的示例代码:
```java
LambdaQueryWrapper<User> lambdaQueryWrapper = Wrappers.<User>lambdaQuery();
lambdaQueryWrapper.inSql(User::getId, "select user_id from user_role where role_id = 2");
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
```
以上代码实现了一个嵌套查询,查询条件为 `user_id` 在 `user_role` 表中 `role_id` 为 2 的记录中。
mybatisplus 嵌套事务
mybatisplus 默认使用 Spring 的事务管理器,因此可以使用 Spring 的事务注解来控制事务。在嵌套事务的情况下,可以使用 @Transactional 注解的 propagation 属性来指定事务的传播行为。如果需要在嵌套事务中进行回滚,则需要在外层事务中抛出 RuntimeException 或 Error 异常。
例如,以下代码演示了如何在嵌套事务中进行回滚:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Transactional
public void updateUser(User user) {
userMapper.updateById(user);
try {
// 嵌套事务
updateUserDetail(user);
} catch (Exception e) {
// 抛出异常,回滚事务
throw new RuntimeException(e);
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateUserDetail(User user) {
// 更新用户详情
// 抛出异常,回滚事务
throw new RuntimeException("更新用户详情失败");
}
}
```
在上面的代码中,updateUser 方法和 updateUserDetail 方法都使用了 @Transactional 注解。updateUser 方法中调用了 updateUserDetail 方法,由于 updateUserDetail 方法的 propagation 属性设置为 REQUIRES_NEW,因此会开启一个新的事务。当 updateUserDetail 方法抛出异常时,由于该方法是在新的事务中执行的,因此只会回滚 updateUserDetail 方法中的操作,而不会影响到 updateUser 方法中的操作。
阅读全文