JPA Predicate cb.or的简单使用(oninput动态即时搜索)

一、实现功能描述

搜索框可根据商品名称或商品编码 动态、即时搜索商品:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码实现:

1.oninput:
在这里插入图片描述

function searchGoods(){
		$("#dg").datagrid('load',{
			"codeOrName":$("#s_codeOrName").val()
		});
	}

在这里插入图片描述
2.Controller:

/**
	 * 根据条件分页查询没有库存的商品信息
	 * @param codeOrName
	 * @param page
	 * @param rows
	 * @return
	 * @throws Exception
	 */
	@ResponseBody
	@RequestMapping("/listNoInventoryQuantity")
	@RequiresPermissions(value="期初库存")
	public Map<String,Object> listNoInventoryQuantity(@RequestParam(value="codeOrName",required=false)String codeOrName,@RequestParam(value="page",required=false)Integer page,@RequestParam(value="rows",required=false)Integer rows)throws Exception{
		Map<String,Object> resultMap=new HashMap<>();
		List<Goods> goodsList=goodsService.listNoInventoryQuantityByCodeOrName(codeOrName, page, rows, Direction.ASC, "id");
		Long total=goodsService.getCountNoInventoryQuantityByCodeOrName(codeOrName);
		resultMap.put("rows", goodsList);
		resultMap.put("total", total);
		logService.save(new Log(Log.SEARCH_ACTION,"查询商品信息(无库存)"));
		
		return resultMap;
	}
	

3.ServiceImpl:

/*
	 根据商品编码或商品名称条件分页查询没有库存(也就是库存为0的商品)的商品信息
	 */
	@Override
	public List<Goods> listNoInventoryQuantityByCodeOrName(String codeOrName, Integer page, Integer pageSize,
			Direction direction, String... properties) {
		Pageable pageable=new PageRequest(page-1,pageSize);
		Page<Goods> pageGoods=goodsRepository.findAll(new Specification<Goods>() {

			@Override
			public Predicate toPredicate(Root<Goods> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
				Predicate predicate=cb.conjunction();
				if(StringUtil.isNotEmpty(codeOrName)) {
					predicate.getExpressions().add(cb.or(cb.like(root.get("code"), "%"+codeOrName+"%"),cb.like(root.get("name"), "%"+codeOrName+"%")));
				}
				
				predicate.getExpressions().add(cb.equal(root.get("inventoryQuantity"), 0));
				return predicate;
			}
			
		}, pageable);
		return pageGoods.getContent();
	}

	/*
	根据商品编码或商品名称条件分页查询没有库存的商品信息的总记录数
	 */
	@Override
	public Long getCountNoInventoryQuantityByCodeOrName(String codeOrName) {
		Long count=goodsRepository.count(new Specification<Goods>(){

			@Override
			public Predicate toPredicate(Root<Goods> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
				Predicate predicate=cb.conjunction();
				if(StringUtil.isNotEmpty(codeOrName)) {
					predicate.getExpressions().add(cb.or(cb.like(root.get("code"), "%"+codeOrName+"%"),cb.like(root.get("name"), "%"+codeOrName+"%")));
				}
				
				predicate.getExpressions().add(cb.equal(root.get("inventoryQuantity"), 0));
				return predicate;
			}
			
		});
		
		return count;
	}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值