spring data jpa实现有条件的分页查询功能
Spring 实现 查询 功能 Data 分页 条件 jpa
2023-09-14 09:15:20 时间
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> {
}
相关文章
- Spring Boot + minio 实现高性能存储服务,So Easy~!
- Spring学习笔记(三十四)——Springboot集成Spring Security
- SSM框架实现用户查询、注册、登录——IDEA整合Spring、Spring MVC、Mybatis 框架「建议收藏」
- spring注解有哪些_Spring 注解
- 聊聊如何基于spring @Cacheable扩展实现缓存自动过期时间以及自动刷新
- 试试使用Spring Event组合@Async注解,轻松实现代码的解耦和异步
- Spring Boot 实现万能文件在线预览
- spring-websocket实现聊天室功能
- Spring Boot 如何集成JWT实现Token验证
- Spring Cloud Security实现微服务间的安全通信示例
- Spring Security 的 Filter 链和 Filter 顺序(三)
- Spring IOC/BeanFactory/ApplicationContext的工作流程/实现原理/初始化/依赖注入源码详解编程语言
- Spring Aop实现机制分析原理详解编程语言
- MyBatis Spring SqlSessionFactoryBean 配置详解编程语言
- spring架构利器:JFinal MySQL Spring(jfinalmysql)
- Spring Boot 2.0 配置图文教程
- Spring框架致力于搭建基于MSSQL的稳健开发体系(spring mssql)