继承spring-data-jpa 的paSpecificationExecutor实现条件查询
时间:2019-09-14
本文章向大家介绍继承spring-data-jpa 的paSpecificationExecutor实现条件查询,主要包括继承spring-data-jpa 的paSpecificationExecutor实现条件查询使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
dao:
package com.tensquare.base.dao;
import com.tensquare.base.pojo.Lable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface LableDao extends JpaRepository<Lable,String>, JpaSpecificationExecutor<Lable> {
}
service:
/**
* 动态条件构建 提取出单独的方法 为了方便调用
* @param
* @return
*/
private Specification<Lable> createSpecification(Lable lable) {
return new Specification<Lable>() {
@Override
public Predicate toPredicate(Root<Lable> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
//用于暂时存放查询条件的集合
ArrayList<Predicate> list = new ArrayList<>();
if (lable.getLabelname()!=null&&!"".equals(lable.getLabelname())){
Predicate predicate = cb.like(root.get("labelname"), "%" + lable.getLabelname() + "%");//where labelname like %xxx%
list.add(predicate);
}
if (lable.getState()!=null&&!"".equals(lable.getState())){
Predicate predicate = cb.equal(root.get("state"), lable.getState() );//where state = xxx
list.add(predicate);
}
//最终将查询条件拼好然后return
Predicate[] predicates = new Predicate[list.size()];
return cb.and( list.toArray(predicates));//where labelname like %xxx% and state = xxx
}
};
}
不分页:
public List<Lable> findSearch(Lable lable) {
//Spring Data JPA使用JpaSpecificationExecutor构建条件查询
return lableDao.findAll(createSpecification(lable));
}
分页:
public Page<Lable> pageQuery(int pageNum, int size, Lable lable) {
//封装分页对象
Pageable pageable = PageRequest.of(pageNum - 1, size);
return lableDao.findAll(createSpecification(lable),pageable);
}
controller:
@RequestMapping(value = "/search",method = RequestMethod.POST) |
|
原文地址:https://www.cnblogs.com/gdut-lss/p/11520072.html
- hadoop安装及配置入门篇
- 剖析Go编写的Socket服务器模块解耦及基础模块的设计
- hihocoder-平衡树·SBT
- mysql 查询数据库表结构
- Go语言基于Socket编写服务器端与客户端通信的实例
- 前端游戏编程基础-如何实现Canvas图像的拖拽、点击等操作
- 使用Go开发一个简单的服务器程序
- Golang URL解析
- golang实现基于redis和consul的可水平扩展的排行榜服务范例
- golang学习之旅:使用go语言操作mysql数据库
- golang微信支付服务端
- flume安装及配置介绍(二)
- Hbase关于Java常用API举例
- 【提问帖】GO中调用redis时,当并发量比较大时出现的问题。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- tf.random_normal_initializer:TensorFlow初始化器
- 使括号有效的最少添加
- 设计模式~观察者模式
- 网页无插件视频流媒体播放器EasyPlayerPro-IOS版如何解决有声音无画面的问题?
- (建议收藏)Java基础知识笔记二(详细)
- Android 手机如何拍摄RAW图
- 「干货」基本数据类型和引用数据类型的区别
- int 和 integer :装箱和拆箱的过程,会用到什么方法,你觉得这个会对性能有影响吗,原因是什么(百度一面)
- 数组:这个循环可以转懵很多人!
- 企业远程办公视频会议系统EasyRTC-SFU下侧边栏边框超限问题如何解决?
- 编写高质量可维护的代码:数据建模
- 新版企业远程办公视频通话系统EasyRTC-SFU,如何解决用户登录信息更新不及时的问题?
- 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!
- 33.Python字符串方法find以及与序列解包的技巧结合
- 代码审计从0到1 —— Centreon One-click To RCE