Spring Data JPA 使用Specification 实现动态查询

2023-10-29

实体对象

package com.zzg.entity;



import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
public class User {
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增长策略
	private Integer useId;
	
	@Column
	private String useName;
	
	@Column
	private String useSex;
	
	@Column
	private Integer useAge;
	
	@Column
	private String useIdNo;
	
	@Column
	private String usePhoneNum;
	
	@Column
	private String useEmail;
	
	@Column
	private Date createTime;
	
	@Column
	private Date modifyTime;
	
	@Column
	private String useState;
}

Dao层定义

package com.zzg.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

import com.zzg.entity.User;

@Repository
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {

}

Controller层定义:使用Specification 实现动态查询

package com.zzg.controller;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import com.zzg.dao.UserRepository;
import com.zzg.entity.User;

@RestController
public class UserController {
	@Autowired
	private UserRepository userRepository;
	
	
	@GetMapping("/user/{id}")
    public User findById(@PathVariable Integer id) {
        return userRepository.findOne(new Specification<User>() {
			
			@Override
			public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
				// TODO Auto-generated method stub
				 List<Predicate> predicates = new ArrayList<Predicate>();
	             // 用户编号
	             predicates.add(criteriaBuilder.equal(root.<Integer> get("useId"), id));
	                
				return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
			}
		}).orElse(null);
    }

}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data JPA 使用Specification 实现动态查询 的相关文章

随机推荐

  • 车辆总线-MVB通讯

    概述 MVB Multifunction vehicle bus 为多功能车辆总线 它是列车通信网 TCN Train Communication Network 的一部分 TCN 网络由 WTB Wire Train Bus MVB 构成
  • Q-learning 理解以及简单实现

    强化学习 reinforcement learning 的过程 强化学习中有状态 state 动作 action 奖赏 reward 这三个要素 智能体需要根据当前状态来采取动作 获得相应的奖赏之后 再去改进这些动作 使得下次再到相同状态时
  • MoviePy介绍

    MoivePy是一个用于视频编辑的Python库 可以 剪切 拼接 标题插入 视频合成 视频处理和创建自定义效果 它支持Windows Linux Mac 源码地址 https github com Zulko moviepy 最新发布版本
  • 前端如何调用后端接口进行数据交互(极简)

    前端调用后端接口 获得数据并渲染 一 介绍 一个完善的系统 前后端交互是必不可少的 这个过程可以分成下面几步 前端向后端发起请求 后端接口接收前端的参数后 开始层层调用方法处理数据 后端将最终数据返回给前端接口 前端请求成功后 将数据渲染至
  • ubuntu安装tomcat7

    1 上传tomcat7源码包 百度云盘链接 https pan baidu com s 1Yo4DVOcm667F iKhGwpPBw 密码 ce1h 2 先安装 JDK cd opt tar zxvf jdk 8u161 linux x6
  • 解决GitHub密码授权访问即将失效的问题

    解决GitHub密码授权访问即将失效的问题 前言 1 网络中的解决方法 2 GitHub密码授权弃用通知 3 创建个人访问令牌 4 IDEA设置Token访问GitHub 4 1 忘记密码 4 2 Token授权 5 GitHub 客户端
  • 非Unicode程序创建非本地字符集的文件路径

    开发中需要用到纯MFC的程序完成整包的文件释放 过程大概是根据整包中的文件路径记录在当前执行路径下建立子目录 创建文件 然后将整包中的内存数据写入该文件 正常英文或中文系统下路径创建及文件读写都没有遇到问题 但在路径名称或文件名称出现非本地
  • 前端常见的适配方法

    作为一个真正的前端攻城狮 我们经常会谈到web前端怎么做适配 然而平常经常做的事 一旦问起来突然好像脑子一片空白 只能想到rem flex 媒体查询那些 因此想记录一篇文章以此警醒自己 一 固定布局 pc端 静态布局 以像素作为页面的基本单
  • 谁在为网络安全制造标尺?

    我们想帮助企业往后退一步 去全局的看一下自己的安全能力建设水平如何 以及在当下的阶段最应该做的安全建设是什么 度量 对应的是更清晰的认知 而对企业安全而言 这种认知 也更在成为一把新的标尺 作者 皮爷 出品 产业家 6月开始 吕一平开始频繁
  • MySQL存储引擎:MyISAM和InnoDB区别详解

    1 MyISAM和InnoDB区别 1 1 区别 InnoDB MyISAM 构造 由 frm文件 表空间 分为独立表空间或者共享表空间 和日志文件 redo log 组成 MyISAM在磁盘上存储成三个文件 其中 frm文件存储表定义 M
  • 百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)、和 WGS-84 坐标系之间的转换

    百度坐标 BD 09 国测局坐标 火星坐标 GCJ 02 和 WGS 84 坐标系之间的转换 Created by Wandergis on 2015 7 8 提供了百度坐标 BD 09 国测局坐标 火星坐标 GCJ 02 和 WGS 84
  • CentOS 7安装Zabbix 4.4

    我们当前部署Zabbix是在Centos7的基础上部署Zabbix4 4版本 我的服务器配置是双路四核CPU 8GBRAM 以下安装步骤仅供参考 大家也可以参考官方资料 https www zabbix com documentation
  • 142 环形链表

    142 环形链表 给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 重点在于如何判断是否有环 采用快慢指针的做法 快指针每次走2步 慢指针每次走1步 快指针相对慢指针每次多走一步 这样确保如果有环
  • Map Reduce和流处理

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由 从流域到海域翻译 发表于腾讯云 社区 map 和reduce 是在集群式设备上用来做大规模数据处理的方法 用户定义一个特定的映射 函数将使用该映射对一系列键值对进行处理 直接
  • C++日期累加

    日期累加 题目描述 设计一个程序能计算一个日期加上若干天后是什么日期 输入描述 输入第一行表示样例个数m 接下来m行每行四个整数分别表示年月日和累加的天数 输出描述 输出m行 每行按yyyy mm dd的个数输出 include
  • 深度学习(二):张量和基本运算

    张量是一个类型化的n维数组 tf Tensor 是tensorflow基本数据格式 张量的阶就是数组的维度 张量的属性 图 形状 名字 op print a graph 输出程序所在的内存地址 print a shape 输出张量a的维度
  • QtIFW学习

    1 构建Qt安装程序 1 1 Qt应用程序结构 1 2 不同操作系统常用的打包工具 1 2 1 多平台 GUI 安装程序 跨平台安装工具 1 2 2 windows 1 2 3 Linux 1 3 静态库与动态库的区别 2 程序打包过程 3
  • 一个注解就能下载任意对象?SpringBoot如此强大?

    下载功能应该是比较常见的功能了 虽然一个项目里面可能出现的不多 但是基本上每个项目都会有 而且有些下载功能其实还是比较繁杂的 倒不是难 而是麻烦 如果我说现在只需要一个注解就能帮你下载任意的对象 是不是觉得非常的方便 Download so
  • github一些有趣的使用场景和基本使用方法

    文章目录 github的使用入门 安装 Git 创建 GitHub 帐户 在本地设置 Git 克隆仓库 进行修改和提交 推送更改 拉取更新 删除Github上废弃的仓库 注意 github更多有趣的使用场景 协作和社交编程 文档和知识库 学
  • Spring Data JPA 使用Specification 实现动态查询

    实体对象 package com zzg entity import java util Date import javax persistence Column import javax persistence Entity import