spring data jpa实现有条件的分页查询功能

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 specification = new Specification(){

        @Override
        // Root 用于获取属性字段,CriteriaQuery可以用于简单条件查询,CriteriaBuilder 用于构造复杂条件查询
        public Predicate toPredicate(Root root,
                CriteriaQuery query, CriteriaBuilder cb) {
            //集合 用于封装查询条件
            List list = new ArrayList();
            //简单单表查询
            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 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 pageData = courierService.findPageData(specification,pageable);
    //将返回page对象转换为datagrid所需要的数据格式
    Map result = new HashMap();
    result.put("total", pageData.getTotalElements());
    result.put("rows", pageData.getContent());
    ActionContext.getContext().getValueStack().push(result);
    return SUCCESS;
}

service层:

//快递员分页查询
@Override
public Page findPageData(Specification specification,
        Pageable pageable) {
    // TODO Auto-generated method stub
    return courierRepository.findAll(specification,pageable);
}

dao层:

public interface CourierRepository extends JpaRepository,JpaSpecificationExecutor {

}

你可能感兴趣的:(项目实战,经验分享,后台编程,学亮说JAVA)