SpringDataJpa-动态查询并且分页

2023-12-15 21:48

本文主要是介绍SpringDataJpa-动态查询并且分页,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.商品实体

/*** @Description 商品实体* @Author yuxiang* @CreatedDate 2019/10/30 12:04*/
@Entity
@Table(name = "item")
@Data
public class ItemEntity extends BaseEntity implements Serializable {/*** 商品名称*/private String itemName;/*** 价格*/private Double price;/*** 商品分类*/private String classNumber;/*** 商品牌子*/private String brand;/*** 是否在售卖 1表示上架中 0表示已经下架*/private int isSaled;public ItemEntity(){}public ItemEntity(String itemName, Double price, String classNumber, String brand, int isSaled) {this.itemName = itemName;this.price = price;this.classNumber = classNumber;this.brand = brand;this.isSaled = isSaled;}
}

2.respository

一定要实现接口JpaSpecificationExecutor

public interface ItemRepository extends JpaRepository<ItemEntity,Long> , JpaSpecificationExecutor<ItemEntity> {
}

3.service 及serviceImpl

service

/*** @Description 商品服务* @Author yuxiang* @CreatedDate 2019/10/30 17:31*/
public interface ItemService {/*** 根据表单查询商品* @param searchForm* @param pageNumber* @param pageSize* @return*/Page<ItemEntity> searchItemsByForm(ItemSearchForm searchForm, Integer pageNumber, Integer pageSize);
}

serviceImpl

@Service
public class ItemServiceImpl implements ItemService {@Autowiredprivate ItemRepository itemRepository;@Overridepublic Page<ItemEntity> searchItemsByForm(ItemSearchForm searchForm,Integer pageNumber,Integer pageSize){//Specification查询构造器Specification<ItemEntity> specification = new Specification<ItemEntity>() {@Overridepublic Predicate toPredicate(Root<ItemEntity> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {List<Predicate> predicates = new ArrayList<>();//添加搜素条件if (StringUtils.isNotEmpty(searchForm.getClassName())&&StringUtils.isNotBlank(searchForm.getClassName())){//分类用equalpredicates.add(criteriaBuilder.equal(root.get("className"),searchForm.getClassName()));}if (StringUtils.isNotEmpty(searchForm.getBrand())&&StringUtils.isNotBlank(searchForm.getBrand())){predicates.add(criteriaBuilder.like(root.get("brand"),"%"+searchForm.getBrand()+"%"));}if (StringUtils.isNotEmpty(searchForm.getItemNumber())&&StringUtils.isNotBlank(searchForm.getItemNumber())){predicates.add(criteriaBuilder.like(root.get("id"),"%"+searchForm.getItemNumber()+"%"));}if (StringUtils.isNotEmpty(searchForm.getItemName())&&StringUtils.isNotBlank(searchForm.getItemName())){predicates.add(criteriaBuilder.like(root.get("itemName"),"%"+searchForm.getItemName()+"%"));}//把搜索条件用and连接起来return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));}};Pageable pageable = PageRequest.of(pageNumber,pageSize, Sort.Direction.DESC,"updateTime");//new PageRequest(page,size,Sort)已过时,这是官方推荐的方法return itemRepository.findAll(specification,pageable);}
}

在Contoller中使用

@PostMapping("/searchItem")public  List<ItemEntity> searchItem(@RequestBody ItemSearchForm searchForm,@RequestParam(value = "pageNumber",defaultValue = "1")Integer pageNumber,@RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize){ApiResponse response;Page<ItemEntity> page = itemService.searchItemsByForm(searchForm, pageNumber, pageSize);//返回商品列表return page.getContent();}

这篇关于SpringDataJpa-动态查询并且分页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/498002

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下