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

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

ural 1026. Questions and Answers 查询

1026. Questions and Answers Time limit: 2.0 second Memory limit: 64 MB Background The database of the Pentagon contains a top-secret information. We don’t know what the information is — you

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>

oracle分页和mysql分页

mysql 分页 --查前5 数据select * from table_name limit 0,5 select * from table_name limit 5 --limit关键字的用法:LIMIT [offset,] rows--offset指定要返回的第一行的偏移量,rows第二个指定返回行的最大数目。初始行的偏移量是0(不是1)。   oracle 分页 --查前1-9

LeetCode:64. 最大正方形 动态规划 时间复杂度O(nm)

64. 最大正方形 题目链接 题目描述 给定一个由 0 和 1 组成的二维矩阵,找出只包含 1 的最大正方形,并返回其面积。 示例1: 输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4 示例2: 输入: 0 1 1 0 01 1 1 1 11 1 1 1 11 1 1 1 1输出: 9 解题思路 这道题的思路是使用动态规划

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

DAY16:什么是慢查询,导致的原因,优化方法 | undo log、redo log、binlog的用处 | MySQL有哪些锁

目录 什么是慢查询,导致的原因,优化方法 undo log、redo log、binlog的用处  MySQL有哪些锁   什么是慢查询,导致的原因,优化方法 数据库查询的执行时间超过指定的超时时间时,就被称为慢查询。 导致的原因: 查询语句比较复杂:查询涉及多个表,包含复杂的连接和子查询,可能导致执行时间较长。查询数据量大:当查询的数据量庞大时,即使查询本身并不复杂,也可能导致