欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Easy-UI 和SSH JPA 按条件查询分页

程序员文章站 2024-01-22 22:56:34
...

1.需求:有条件分页查询 前提 页面部分
使用Easy-UI 和SSH JPA 按条件查询分页
*给查询按钮添加点击事件
*将查询表单中的数据转换成符合EasyUI格式js对象到datagrid的load方法加载到datagrid,携带数据到后台(下面有代码)
使用Easy-UI 和SSH JPA 按条件查询分页
*datagrid要求格式:
使用Easy-UI 和SSH JPA 按条件查询分页
*转换表单数据JS方法:(上边表单有调用此方法)

$.fn.serializeJson = function() {
                var serializeObj = {};
                var array = this.serializeArray();
                var str = this.serialize();
                $(array).each(function() {
                    if(serializeObj[this.name]) {
                        if($.isArray(serializeObj[this.name])) {
                            serializeObj[this.name].push(this.value);
                        } else {
                            serializeObj[this.name] = [serializeObj[this.name], this.value];
                        }
                    } else {
                        serializeObj[this.name] = this.value;
                    }
                });
                return serializeObj;
            };

*datagrid的显示数据表格
使用Easy-UI 和SSH JPA 按条件查询分页
*页面的资源代码:
使用Easy-UI 和SSH JPA 按条件查询分页
使用Easy-UI 和SSH JPA 按条件查询分页
*上述条件查询form表单数据已经绑定datagrid,传递到后台的页面代码:
使用Easy-UI 和SSH JPA 按条件查询分页

*Action 后台接收:(注意:datagrid会自动提交携带分页的两个参数 :当前页page和总目录数rows, 因此次加载是动态加载 返回前端json数据 {“total”:28,”rows”:[
{“productid”:”FI-SW-01”,”productname”:”Koi”}
]})所以会需要total 和rows 参数
*Action代码:

@SuppressWarnings("all")
@Controller
@Scope("prototype")
@Namespace("/")
@ParentPackage("json-default")
public class CourierAction extends ActionSupport implements ModelDriven<Courier> {

    private Courier courier = new Courier();
    @Autowired
    private CourierService courierService;

    @Override
    public Courier getModel() {
        return courier;
    }



    private Integer page;
    private Integer rows;

    public void setPage(Integer page) {
        this.page = page;
    }

    public void setRows(Integer rows) {
        this.rows = rows;
    }

    @Action(value = "courier_queryPage", results = { @Result(name = "success", type = "json") })
    public String queryPage() {
        Pageable pageable = new PageRequest(page - 1, rows);
        Specification<Courier> specification = new Specification<Courier>() {

            @Override
            /**
             * 构造条件查询方法,如果发发返回null,代表无条件查询 root 参数获取条件表达式 name=? age=?
             * criteriaQuery 参数 构造简单查询条件返回 提供where方法 criteriaBulider 参数
             * 够造predicate对象 条件对象 够造复杂的查询效果
             */
            public Predicate toPredicate(Root<Courier> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                // 查询当前root跟对象courier
                List<Predicate> 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);

                }
                // 多表查询(查询当前对象 关联对象 对应数据表)
                // 使用courier(root),关联standard
                Join<Object, Object> standardRoot = root.join("standard", JoinType.INNER);
                if (courier.getStandard() != null && StringUtils.isNotBlank(courier.getStandard().getName())) {
                    // 进行收派标准名称 模糊查询
                    // standard.name like %?%
                    Predicate p4 = cb.like(standardRoot.get("name").as(String.class),
                            "%" + courier.getStandard().getName() + "%");
                    list.add(p4);
                }
                return cb.and(list.toArray(new Predicate[0]));
            }
        };
        Page<Courier> pagedata = courierService.findQueryPage(specification, pageable);
        //也可以将这两个参数封装成一个bean类,更方便点
        Map<String, Object> map = new HashMap<>();
        map.put("total", pagedata.getTotalElements());
        map.put("rows", pagedata.getContent());
        ActionContext.getContext().getValueStack().push(map);
        return SUCCESS;
        }

*Service代码:

@Service
@Transactional
public class CourierServiceImpl implements CourierService {
@Autowired
private CourierDao courierDao;

    @Override
    public Page<Courier> findQueryPage(Specification<Courier> specification,Pageable pageable) {
        // TODO Auto-generated method stub
        return courierDao.findAll(specification,pageable);

    }

*Dao层数据代码:
无需写代码jpa都给封装的好方法,在service调用即可


public interface CourierDao extends JpaRepository<Courier, Integer>,JpaSpecificationExecutor<Courier>{
}

*有需要的朋友可以看看,不喜勿喷