QueryWrapper不能重复使用吗
时间: 2023-10-19 10:34:14 浏览: 80
QueryWrapper可以重复使用,它是MyBatis-Plus提供的一个便捷的查询条件构造器。你可以通过多次调用QueryWrapper对象的方法,连续地添加查询条件。每次添加条件后,QueryWrapper对象会将该条件存储起来,以便后续的查询操作使用。所以,你可以在不同的查询操作中复用同一个QueryWrapper对象。例如:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 20).like("name", "张");
List<User> userList = userMapper.selectList(wrapper);
// 清空之前的查询条件
wrapper.clear();
wrapper.eq("sex", "女").orderByDesc("id");
List<User> femaleUserList = userMapper.selectList(wrapper);
```
在上面的代码中,我们先使用QueryWrapper对象`wrapper`添加了查询条件`age=20`和`name like '张'`,然后执行了查询操作。接着,我们清空了之前的查询条件,并添加了新的查询条件`sex='女'`和排序规则`按id降序`,再次执行了查询操作。
注意,如果你要在多个线程中并发地使用QueryWrapper对象进行查询操作,应当使用线程安全的方式创建QueryWrapper对象,例如每个线程都创建一个新的QueryWrapper对象。
相关问题
QueryWrapper wrapper = new QueryWrapper<>();与QueryWrapper wrapper = new QueryWrapper();的区别
这两种写法本质上是相同的,都是创建一个空的QueryWrapper对象。只不过在Java 7及以下版本中,需要在尖括号中重复写一遍泛型类型,而在Java 8及以上版本中,可以使用“菱形语法”(diamond syntax)来省略重复写泛型类型。因此,QueryWrapper wrapper = new QueryWrapper<>();是Java 8及以上版本的写法,而QueryWrapper wrapper = new QueryWrapper();是Java 7及以下版本的写法。
@Override public SdFact checkCodeByLevel2Id(SdFact et) { if(et.getClassifyId() == null || et.getClassifyId().length() == 0) { throw Exp.instance(BizCode.biz_error, "事实表所属类别不能为空!"); } if(et.getTableCode() == null || et.getTableCode().length() == 0) { throw Exp.instance(BizCode.biz_error, "事实表编码不能为空!"); } SdClassify classify = classifyService.getById(et.getClassifyId()); if(classify.getLevel2Id() == null || classify.getLevel2Id().length() == 0) { throw Exp.instance(BizCode.biz_error, "事实表所属类别不能是一级或者二级!"); } QueryWrapper<SdClassify> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("level2_id",classify.getLevel2Id()); List<SdClassify> classifies = classifyService.getMapper().selectList(queryWrapper); if(CollectionUtils.isEmpty(classifies)) { throw Exp.instance(BizCode.biz_error, "事实表所属类别不能是一级或者二级!"); } List<String> classifyIds = classifies.stream().map(o -> o.getId()).collect(Collectors.toList()); QueryWrapper<SdFact> factQueryWrapper = new QueryWrapper<>(); factQueryWrapper.in("classify_id",classifyIds); factQueryWrapper.eq("table_code",et.getTableCode()); if(et.getId() != null) { factQueryWrapper.ne("id",et.getId()); } List<SdFact> facts = this.getMapper().selectList(factQueryWrapper); if(!CollectionUtils.isEmpty(facts)) { throw Exp.instance(BizCode.biz_error, "事实表编码在同一二级分类下不能重复!"); } return et; },多加一个功能,根据表格编码和子分类ID列表查询数据库中是否存在相同分类下的表格编码,若存在,则抛出异常;
根据你提供的代码,我假设你使用的是Java语言和MyBatis-Plus框架来操作数据库。下面是一个示例代码,其中包括了根据表格编码和子分类ID列表查询数据库中是否存在相同分类下的表格编码的功能:
```java
@Override
public SdFact checkCodeByLevel2Id(SdFact et) {
// 首先检查事实表所属类别是否为空
if (et.getClassifyId() == null || et.getClassifyId().length() == 0) {
throw Exp.instance(BizCode.biz_error, "事实表所属类别不能为空!");
}
// 检查事实表编码是否为空
if (et.getTableCode() == null || et.getTableCode().length() == 0) {
throw Exp.instance(BizCode.biz_error, "事实表编码不能为空!");
}
// 获取事实表所属类别信息
SdClassify classify = classifyService.getById(et.getClassifyId());
// 检查事实表所属类别是否是一级或二级分类
if (classify.getLevel2Id() == null || classify.getLevel2Id().length() == 0) {
throw Exp.instance(BizCode.biz_error, "事实表所属类别不能是一级或者二级!");
}
// 查询同一二级分类下的所有子分类信息
QueryWrapper<SdClassify> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("level2_id", classify.getLevel2Id());
List<SdClassify> classifies = classifyService.getMapper().selectList(queryWrapper);
if (CollectionUtils.isEmpty(classifies)) {
throw Exp.instance(BizCode.biz_error, "事实表所属类别不能是一级或者二级!");
}
// 获取同一二级分类下的所有子分类ID
List<String> classifyIds = classifies.stream().map(SdClassify::getId).collect(Collectors.toList());
// 查询是否存在相同分类下的表格编码
QueryWrapper<SdFact> factQueryWrapper = new QueryWrapper<>();
factQueryWrapper.in("classify_id", classifyIds);
factQueryWrapper.eq("table_code", et.getTableCode());
if (et.getId() != null) {
factQueryWrapper.ne("id", et.getId());
}
List<SdFact> facts = this.getMapper().selectList(factQueryWrapper);
if (!CollectionUtils.isEmpty(facts)) {
throw Exp.instance(BizCode.biz_error, "事实表编码在同一二级分类下不能重复!");
}
return et;
}
```
在这个示例代码中,我们首先检查事实表所属类别和编码是否为空,然后获取事实表所属类别信息,并检查其是否为一级或二级分类。接着,我们查询同一二级分类下的所有子分类信息,并获取它们的ID。最后,我们根据分类ID和表格编码查询数据库,如果存在相同分类下的表格编码则抛出异常,否则返回事实表对象。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![ziw](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)