spring data jpa实现有条件的分页查询功能
前端部分代码。发送请求:
$('#grid').datagrid({
iconCls: 'icon-forward',
fit: true,
border: false,
rownumbers: true,
striped: true,
pageList: [30, 50, 100],
pagination: true,
toolbar: toolbar,
url: "../../courier_pageQuery.action",
idField: 'id',
columns: columns,
onDblClickRow: doDblClickRow
});
提交查询请求:
$("#searchBtn").click(function(){
//将数据转换为json格式
var params = $("#searchForm").serializeJson();
//将json对象绑定到datagrid上,完成带有条件的查询请求
$("#grid").datagrid('load',params);
//关闭查询窗口
$("#searchWindow").window('close');
});
Action:
//快递员分页查询
@Action(value="courier_pageQuery",results={@Result(name="success",type="json")})
public String pageQuery(){
Pageable pageable = new PageRequest(page-1,rows);
//封装条件查询对象Specification
Specification<Courier> specification = new Specification<Courier>(){
@Override
// Root 用于获取属性字段,CriteriaQuery可以用于简单条件查询,CriteriaBuilder 用于构造复杂条件查询
public Predicate toPredicate(Root<Courier> root,
CriteriaQuery<?> query, CriteriaBuilder cb) {
//集合 用于封装查询条件
List<Predicate> list = new ArrayList<Predicate>();
//简单单表查询
if(StringUtils.isNotBlank(courier.getCourierNum())){
Predicate p1 = cb.equal(root.get("courierNum").as(String.class),courier.getCourierNum());
list.add(p1);
}
if(StringUtils.isNotBlank(courier.getCompany())){
Predicate p2 = cb.like(root.get("company").as(String.class),"%"+courier.getCompany()+"%");
list.add(p2);
}
if(StringUtils.isNotBlank(courier.getType())){
Predicate p3 = cb.equal(root.get("type").as(String.class),courier.getType());
list.add(p3);
}
//多表查询
Join<Courier,Standard> standardJoin = root.join("standard",JoinType.INNER);
if(courier.getStandard().getName()!=null){
Predicate p4 = cb.like(standardJoin.get("name").as(String.class),"%"+courier.getStandard().getName()+"%" );
list.add(p4);
}
return cb.and(list.toArray(new Predicate[0]));
}
};
//调用业务层,返回Page
Page<Courier> pageData = courierService.findPageData(specification,pageable);
//将返回page对象转换为datagrid所需要的数据格式
Map<String,Object> result = new HashMap<String,Object>();
result.put("total", pageData.getTotalElements());
result.put("rows", pageData.getContent());
ActionContext.getContext().getValueStack().push(result);
return SUCCESS;
}
service层:
//快递员分页查询
@Override
public Page<Courier> findPageData(Specification<Courier> specification,
Pageable pageable) {
// TODO Auto-generated method stub
return courierRepository.findAll(specification,pageable);
}
dao层:
public interface CourierRepository extends JpaRepository<Courier,Integer>,JpaSpecificationExecutor<Courier> {
}