我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JPA Specification常用查询有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JPA Specification常用查询有哪些

这篇文章主要讲解了“JPA Specification常用查询有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JPA Specification常用查询有哪些”吧!

    JPA Specification常用查询+排序

    1.第一步:继承父类

    public interface TblCarton2RCardLogRepository extends JpaRepository<TblCarton2RCardLog, String>,JpaSpecificationExecutor<TblCarton2RCardLog> {

    2.第二步

    tblCarton2RCardLogRepository.findAll(new Specification<TblCarton2RCardLog>() {    @Override    public  Predicate toPredicate(Root<TblCarton2RCardLog> root, CriteriaQuery<?> query,CriteriaBuilder cb) {        List<Predicate> list = new ArrayList<Predicate>();        list.add(cb.equal(root.get("cartonNo").as(String.class), cartonNo));//某普通字段        list.add(cb.equal(root.get("id").get("rCard").as(String.class), rCard));//主键中某字段        list.add(cb.like(root.get("mocode").as(String.class), "%" + mocode + "%"));//like        list.add(cb.between(root.get("frozenDate").as(Long.class), frozenDateStart, frozenDateEnd));//between and        list.add(cb.greaterThanOrEqualTo(root.get("id").get("rcard").as(String.class), rCardStart));//大于等于        list.add(root.get("id").get("lotNo").as(String.class).in(lotNos));//in        //ORDER BY packdate DESC,packtime DESC        Predicate[] p = new Predicate[list.size()];        query.where(cb.and(list.toArray(p)));        query.orderBy(cb.desc(root.get("packDate")),cb.desc(root.get("packTime")));        return query.getRestriction();    }});

    JPA Specification复杂查询+排序

    刚使用spring-data-jpa,遇到不少难题,网上查了很多资料,发现讲jpa的不多,发个我刚做过的接口的过程吧。

    需求

    JPA Specification常用查询有哪些

    看到图了吗?需要实现搜索以及各种字段的排序还要分页,还有可能有选择各种条件的下拉列表,是不是很变态?

    开始了

    一、dao

    需要先处理dao层,这里喜欢叫repository。做一个实体类的dao层接口,继承JpaSpecificationExecutor,再写一个查询接口。

    JPA Specification常用查询有哪些

    二、service

    JPA Specification常用查询有哪些

    在这里主要处理的是查询条件,我这里是搜索功能的模糊查询,当然如果有更多的查询也可以添加进这里。这里需要注意的是specification。

    三、排序

    需要先建一个辅助的实体类,属性名我取和需要排序的实体类一样的名字,但是注意属性都是String类型的啊。后面细说,先上我建的辅助类。

    @Datapublic class DeptSort {private String id;//编码private String name;//名称private String highDeptName;//上级部门private String principal;//负责人private String deptType;//部门类型private String enable;//启用}

    字段都是需要排序的字段,这是为了好区分,叫别的也可以。

    下面是controller层,排序功能的具体实现。

    public ResponseModel table(@RequestParam("search")String search,@RequestParam("pageNumber")Integer pageNumber,@RequestParam("pageSize")Integer pageSize,@RequestBody DeptSort deptSort){ResponseModel model = null;try {List<Sort.Order> orders = new ArrayList<Sort.Order>();if (StringUtils.isNotBlank(deptSort.getId())){orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getId()),"id"));}if (StringUtils.isNotBlank(deptSort.getName())){orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getName()),"name"));}if (StringUtils.isNotBlank(deptSort.getHighDeptName())){orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getHighDeptName()),"highDeptName"));}if (StringUtils.isNotBlank(deptSort.getPrincipal())){orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getPrincipal()),"principal"));}if (StringUtils.isNotBlank(deptSort.getDeptType())){orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getDeptType()),"deptType"));}if (StringUtils.isNotBlank(deptSort.getEnable())){orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getEnable()),"enable"));}//orders不能为空,所以如果为空设置按id排序[/code][code] if (orders.size() == 0){orders.add(new Sort.Order(Sort.Direction.ASC,"id"));}Sort sort = new Sort(orders);Pageable pageable = new PageRequest(pageNumber,pageSize,sort);Page<Businessdept> all = service.findAll(search, pageable);model = ResponseModel.getSuccessResponseModel().setData(all);}catch (Exception e){e.printStackTrace();model = ResponseModel.getFailedResponseModel();}return model;}

    需要的参数有搜索内容search,还有DeptSort辅助类。首先建立

    List<Sort.Order> orders = new ArrayList<Sort.Order>();

    集合,然后if判断将参数加入集合。

    需要说明的是类似

    orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getEnable()),"enable"))

    语句,“enable”是需要查询的Businessdept里的字段,不是辅助类的,当然这里我的辅助类和Businessdept类一致,但是不一样的同学需要注意了。

    前端

    对于前端传递的参数有什么要求呢?

    JPA Specification常用查询有哪些

    deptSort的各个属性的参数只能限定两种asc和desc,即升序和降序。上图的功能需求只需要传deptSort里的一个属性就可以了,这里传两个参数演示一下。

    查询成功的数据不展示了,给大家看一个后台的SQL语句

    Hibernate:  selectcount(businessde0_.id) as col_0_0_ fromt_department businessde0_ where(businessde0_.name like ?) and businessde0_.delete_is=1Hibernate:  selectbusinessde0_.id as id1_3_,businessde0_.delete_is as delete_i2_3_,businessde0_.dept_type as dept_typ3_3_,businessde0_.enable as enable4_3_,businessde0_.high_dept_id as high_dep5_3_,businessde0_.high_dept_name as high_dep6_3_,businessde0_.name as name7_3_,businessde0_.principal as principa8_3_ fromt_department businessde0_ where(businessde0_.name like ?) and businessde0_.delete_is=1 order bybusinessde0_.dept_type asc,businessde0_.enable desc limit ?

    可以看到条件查询,升序、降序都有。

    感谢各位的阅读,以上就是“JPA Specification常用查询有哪些”的内容了,经过本文的学习后,相信大家对JPA Specification常用查询有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    JPA Specification常用查询有哪些

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    JPA Specification常用查询有哪些

    这篇文章主要讲解了“JPA Specification常用查询有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JPA Specification常用查询有哪些”吧!JPA Specifi
    2023-06-25

    Jpa Specification怎么实现and和or同时使用查询

    这篇文章主要为大家展示了“Jpa Specification怎么实现and和or同时使用查询”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Jpa Specification怎么实现and和or同
    2023-06-25

    oracle常用经典SQL查询有哪些

    本篇文章为大家展示了oracle常用经典SQL查询有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。oracle常用经典SQL查询常用SQL查询:1、查看表空间的名称及大小select t.tab
    2023-06-06

    SpringData JPA的常用语法有哪些

    今天小编给大家分享一下SpringData JPA的常用语法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言Spri
    2023-07-02

    MySql常用查询优化策略有哪些

    本篇内容介绍了“MySql常用查询优化策略有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!查询优化可以说,对于大多数系统来说,读多写少一
    2022-12-02

    plsql查询的常见问题有哪些

    一些常见的PL/SQL查询问题包括:语法错误:在查询语句中使用了错误的关键字、缺少了分号或括号等。数据类型不匹配:在查询中使用了不兼容的数据类型,或者尝试将不兼容的数据类型进行比较。表或视图不存在:在查询中使用了不存在的表或视图。列名
    plsql查询的常见问题有哪些
    2024-02-29

    MySQL条件查询语句常用操作有哪些

    这篇文章主要介绍“MySQL条件查询语句常用操作有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL条件查询语句常用操作有哪些”文章能帮助大家解决问题。顾名思义, 条件查询就是使用wher
    2023-06-30

    Spring Data JPA 实体类中常用注解有哪些

    本篇内容主要讲解“Spring Data JPA 实体类中常用注解有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Data JPA 实体类中常用注解有哪些”吧!javax.pe
    2023-06-25

    ADO查询知识有哪些

    这篇文章主要介绍“ADO查询知识有哪些”,在日常操作中,相信很多人在ADO查询知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO查询知识有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!不论
    2023-06-17

    SQL随机查询有哪些

    这篇文章主要介绍“SQL随机查询有哪些”,在日常操作中,相信很多人在SQL随机查询有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL随机查询有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!SQ
    2023-06-08

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录