queryWrapper.select();无效
时间: 2024-06-02 13:10:49 浏览: 118
`queryWrapper.select()` 是 MyBatis-Plus 提供的方法,用于设置查询时要返回的字段。它需要配合实体类的 `@TableField` 注解一起使用。
如果你发现 `queryWrapper.select()` 方法无效,可能是以下原因:
1. 实体类中没有使用 `@TableField` 注解标注字段。需要在实体类的字段上使用 `@TableField` 注解来指定数据库表中对应的字段名。
2. `queryWrapper.select()` 中传入的字段不存在。请确保传入的字段名与数据库表中的字段名一致。
3. `queryWrapper.select()` 中传入的字段名使用了驼峰命名法,而数据库中的字段名使用了下划线命名法。需要将字段名转换为下划线命名法,例如:`queryWrapper.select("user_name")`。
4. 查询语句中存在其他的条件限制,导致 `queryWrapper.select()` 方法无效。请确保 `queryWrapper.select()` 方法在查询语句的最后面。
如果以上方法都无效,请检查是否有其他地方对查询语句进行了干扰,例如使用了 `BaseMapper.selectList()` 方法等。
相关问题
优化这段代码( ApplyFinanceDTO dto = new ApplyFinanceDTO(); dto.setId(applyNo); Result<ApplyFinanceVO> financeResult = applyFeign.selectInfoById(dto); if(financeResult == null || !financeResult.isSuccess()){ throw new BusinessException("融资申请信息获取失败"); } ApplyFinanceVO financeVO = financeResult.getResult(); QueryWrapper<ContractTemplate> wrapper = new QueryWrapper<>(); wrapper .eq(financeVO.getBusinessType() != null, "BUSINESS_TYPE", financeVO.getBusinessType()) .eq(financeVO.getFundType() != null, "EXCLUSIVE_CODE", financeVO.getFundType()) .eq( "TEMPLATE_STATUS", InitConstants.STRING_1) .or(queryWrapper -> queryWrapper.eq( "IS_UNIVERSAL", InitConstants.STRING_1).eq( "TEMPLATE_STATUS", InitConstants.STRING_1)); wrapper.orderByAsc("ID", "TEMPLATE_ID"); List<ContractTemplate> contractTemplates = contractTemplateService.getBaseMapper().selectList(wrapper); CollectContractParam contractParam = new CollectContractParam(applyNo, contractTemplates, null); List<TemplateParam> templateParamAndValue = createContractService.getTemplateParamAndValue(contractParam); contractParam.setParams(templateParamAndValue); pdfUtil.createContractAssignment(contractParam); return Constant.SUCCESS;)
以下是优化后的代码:
ApplyFinanceDTO dto = new ApplyFinanceDTO();
dto.setId(applyNo);
Result<ApplyFinanceVO> financeResult = applyFeign.selectInfoById(dto);
if (financeResult == null || !financeResult.isSuccess()) {
throw new BusinessException("融资申请信息获取失败");
}
ApplyFinanceVO financeVO = financeResult.getResult();
QueryWrapper<ContractTemplate> wrapper = new QueryWrapper<>();
wrapper.eq(financeVO.getBusinessType() != null, "BUSINESS_TYPE", financeVO.getBusinessType())
.eq(financeVO.getFundType() != null, "EXCLUSIVE_CODE", financeVO.getFundType())
.eq("TEMPLATE_STATUS", InitConstants.STRING_1)
.or(queryWrapper -> queryWrapper.eq("IS_UNIVERSAL", InitConstants.STRING_1).eq("TEMPLATE_STATUS", InitConstants.STRING_1))
.orderByAsc("ID", "TEMPLATE_ID");
List<ContractTemplate> contractTemplates = contractTemplateService.list(wrapper);
CollectContractParam contractParam = new CollectContractParam(applyNo, contractTemplates, null);
List<TemplateParam> templateParamAndValue = createContractService.getTemplateParamAndValue(contractParam);
contractParam.setParams(templateParamAndValue);
pdfUtil.createContractAssignment(contractParam);
return Constant.SUCCESS;
优化方法:
1. 使用 list() 方法代替 selectList() 方法,从而避免基类中的两次无效 count() 查询
2. 删除 wrapper.eq() 方法中的显式非空检查,因为 QueryWrapper 内部自动处理为 IS NOT NULL
3. 将 orderByAsc() 方法放在 QueryWrapper 链式调用的最后,以提高代码可读性
Page<ModelPage> modelPagePage = modelPageMapper.selectPage(page, queryWrapper)分页未生效
如果你使用 MyBatis-Plus 进行分页查询,而分页未生效,可能有以下原因:
1. 没有设置分页参数
在使用 MyBatis-Plus 进行分页查询时,需要设置分页参数,例如设置每页记录数和当前页码。可以使用 Page 对象来设置分页参数,例如:
```
Page<ModelPage> page = new Page<>(current, size); // current为当前页码,size为每页记录数
```
2. 没有使用 MyBatis-Plus 的分页查询方法
MyBatis-Plus 提供了许多方便的分页查询方法,例如 `selectPage`、`selectMapsPage` 等。如果你没有使用这些方法进行分页查询,那么分页可能无法生效。例如,可以使用以下代码进行分页查询:
```
Page<ModelPage> modelPagePage = modelPageMapper.selectPage(page, queryWrapper);
```
其中,`selectPage` 方法的第一个参数是 `Page` 对象,第二个参数是查询条件。注意,这里的 `modelPageMapper` 是继承了 `BaseMapper` 的自定义 Mapper 接口。
3. 没有在 Mapper 接口上加上 @Repository 注解
如果你没有在 Mapper 接口上加上 `@Repository` 注解,那么 Spring 无法扫描到该 Mapper 接口,并且无法将其注入到其他服务中。因此,如果你的 Mapper 接口没有被注入到其他服务中,那么分页也可能无法生效。例如,在 Mapper 接口上加上 `@Repository` 注解:
```
@Repository
public interface ModelPageMapper extends BaseMapper<ModelPage> {
// ...
}
```
以上是一些可能导致分页无效的原因,你可以仔细检查一下代码,看看是否有遗漏。
阅读全文