使用Easy-UI 和SSH JPA 按条件查询分页
2017-10-22 11:50
337 查看
1.需求:有条件分页查询 前提 页面部分
![](https://oscdn.geek-share.com/Uploads/Images/Content/201907/24/8a3ff85cddf781601a328255ff51bd09)
*给查询按钮添加点击事件
*将查询表单中的数据转换成符合EasyUI格式js对象到datagrid的load方法加载到datagrid,携带数据到后台(下面有代码)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201907/24/af789643d038fae65377947223aa2a7f)
*datagrid要求格式:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201907/24/f5b5eb0800fc1451468201c2df23baae)
*转换表单数据JS方法:(上边表单有调用此方法)
*datagrid的显示数据表格
![](https://oscdn.geek-share.com/Uploads/Images/Content/201907/24/2a3dccadb06f307429ab5717c8496c3d)
*页面的资源代码:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201907/24/387ec23533e9ffd3bd602ce247ba65a7)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201907/24/3d4d03b3b70c93cf6a258b7fc7eeedc6)
*上述条件查询form表单数据已经绑定datagrid,传递到后台的页面代码:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201907/24/e201fafccd103534cc81f31355469b23)
*Action 后台接收:(注意:datagrid会自动提交携带分页的两个参数 :当前页page和总目录数rows, 因此次加载是动态加载 返回前端json数据 {“total”:28,”rows”:[
{“productid”:”FI-SW-01”,”productname”:”Koi”}
]})所以会需要total 和rows 参数
*Action代码:
*Service代码:
*Dao层数据代码:
无需写代码jpa都给封装的好方法,在service调用即可
*有需要的朋友可以看看,不喜勿喷
*给查询按钮添加点击事件
*将查询表单中的数据转换成符合EasyUI格式js对象到datagrid的load方法加载到datagrid,携带数据到后台(下面有代码)
*datagrid要求格式:
*转换表单数据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的显示数据表格
*页面的资源代码:
*上述条件查询form表单数据已经绑定datagrid,传递到后台的页面代码:
*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), "%" 4000 + 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>{ }
*有需要的朋友可以看看,不喜勿喷
相关文章推荐
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- 使用MVC,实现多条件查询,排序与分页 的 存储过程
- 在ThinkPhp 中使用原生的 带条件查询 + 分页
- 使用AspNetPager进行分页,查询条件丢失问题
- ThinkPHP的使用(三)带查询条件的分页
- MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查询条件分页
- HQL查询-分页-条件-连接-过滤使用
- 如何正确使用page—taglib经行正确中文检索分页(同时查询条件任意)
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- 使用FileUpload工具实现文件上传与使用ThreadLocal容器传递数据实现分页查询下载
- 多条件查询分页
- AspNetPager分页控件使用(是否根据条件分页)
- yii 多条件查询,分页
- 分页和多条件查询功能
- mongodb_查询操作使用_条件查询、where子句等(转)
- 多条件查询以及分页存储过程(倒叙和顺序查询)
- 使用SQL按日期条件查询
- Oracle的rownum原理和使用(分页查询)