JPA动态查询之QBE查询

本文深入探讨了Java Persistence API (JPA) 中的Query By Example (QBE) 动态查询机制。QBE允许开发者通过实例化一个实体类并设置其属性来构建查询,从而实现灵活的数据过滤。通过这种方式,可以轻松地处理不同条件的查询需求,而无需编写复杂的 JPQL 或 Criteria 查询。文中将解释QBE的工作原理,并提供示例展示如何在实际应用中使用QBE进行动态查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public Map<String, Object> getAssetInventory(AssetInventoryDto dto, PageableDto pageableDto) {
		Pageable pageable = PageRequest.of(pageableDto.getPage() - 1, pageableDto.getSize(), Sort.Direction.DESC,
				"createTimestamp");
		AssetInventoryModel assetInventoryModel = new AssetInventoryModel();
		UserInfoDto userInfoDto = ((SpringSecureUserInfo) MineSecureUtility.currentUser()).getUserInfo();
		assetInventoryModel.setCreateId(userInfoDto.getId());
		//Sort.Order order = new Sort.Order(Sort.Direction.DESC, "").nullsFirst();//空值放前面
		ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("inventoryLoss").withIgnorePaths("quantity")
				.withIgnorePaths("inventoryProfit")// 忽略属性:是否关注。因为是基本类型,需要忽略掉
				.withMatcher("inventoryRunningNum", GenericPropertyMatchers.contains())// 全部模糊查询,即%{inventoryRunningNum}%
				.withMatcher("inventoryName", GenericPropertyMatchers.contains());

		if (!VGUtility.isEmpty(dto.getInventoryRunningNum())) {
			assetInventoryModel.setInventoryRunningNum(dto.getInventoryRunningNum());
		}
		if (!VGUtility.isEmpty(dto.getInventoryName())) {
			assetInventoryModel.setInventoryName(dto.getInventoryName());
		}
		if (!VGUtility.isEmpty(dto.getInventoryStatusStr())) {
			assetInventoryModel
					.setInventoryStatus(INVENTORY_CHECK.values()[Integer.parseInt(dto.getInventoryStatusStr())]);
		}

		Example<AssetInventoryModel> example = Example.of(assetInventoryModel, matcher);
		Page<AssetInventoryModel> list = assetInventoryDao.findAll(example, pageable);
		List<AssetInventoryDto> dtolist = new ArrayList<AssetInventoryDto>();
		list.getContent().stream().forEach(e -> {
			dtolist.add(convertAssetInventoryModelToDto(e));
		});
		Map<String, java.lang.Object> map = new HashMap<String, java.lang.Object>();
		long total = list.getTotalElements();
		map.put("total", total);
		map.put("rows", dtolist);
		return map;
	}

		

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值