返回顶部
首页 > 资讯 > 精选 >Spring Data JPA中in条件参数的传递方式有哪些
  • 585
分享到

Spring Data JPA中in条件参数的传递方式有哪些

2023-06-15 11:06:15 585人浏览 薄情痞子
摘要

这篇文章主要介绍spring Data JPA中in条件参数的传递方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!关于Spring Data JPA中自定义sql 条件的 in参数记录此文做一个记录,以便以后

这篇文章主要介绍spring Data JPA中in条件参数的传递方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

关于Spring Data JPA中自定义sql 条件的 in参数记录

此文做一个记录,以便以后观看,也希望正在遇到同样问题的同学能有所启发,如果你有更好的方法,或我的做法有问题,请告知下,非常感谢。

下面写两种简单做法,注意下地方:

在此我只记录HQL 中 in 后面参数问题,细节查询方法相关代码就略过,还请见谅

查询接口:

public abstract List query(String paramString, Map paramMap, int start, int max);

做法一:拼接条件

不管 in 后面括号里面有多少个参数,使用动态拼接,拼接 HQL过程就不贴代码了,结果以下样式:

HQL

String hql = “select obj from Goods obj where obj.id in(:id_1,:id_2,id_3……)” ;

查询操作

Map<String, Long> paramMap = new HashedMap();paramMap.put(“id_1”,Long.valueOf(4));paramMap.put(“id_2”, Long.valueOf(5));~~~~~~~~~ 省略多个参数拼接 ~~~~~~~~~~~~~~~~~~List<Goods> goods = goodsService.query(hql , paramMap, 1, 100);

采用这种动态拼接的方式拼接,也是可以查询到数据的,但是有一点一点需要注意,大家都知道 Object作为超类,能够作为大泛型,但是在此,如果作为 paramMap 的泛型后,在添加参数值时,如果实体对象中,id属性类型是什么类型,一定要转换过去 eg:

paramMap.put(“id_1”,Long.valueOf(4)); ——————(因为我的id 是 Long 类型)

做法二:使用集合

HQL

String hql = “select obj from Goods obj where obj.id in(:id)”;

的查询操作:

Map<String, Object> paramMap = new HashedMap();ArrayList<Object> list = new ArrayList<>();list.add(Long.valueOf(4));list.add(Long.valueOf(5));paramMap.put(“id”, list);List<Goods> goods = goodsService.query(“select obj from Goods obj where obj.GC.id in(:id)”, paramMap, -1, -1);

而之前的做法是,但是这样写看起来也没毛病,毕竟Object 作为超类,一个Long 还是可以匹配的,编译不会异常,但是跑起来后,当你访问到这块就会出问题,具体异常就补贴了,你可以自己试试:

Map<String, Object> paramMap = new HashedMap();ArrayList<Object> list = new ArrayList<>();list.add(4);list.add(5);paramMap.put(“id”, list);List<Goods> goods = goodsService.query(“select obj from Goods obj where obj.gc.id in(:id)”, paramMap, -1, -1);

在此再次注意:

在 hql中,条件字段是什么类型,传参数时一定要注意,如果泛型是大类型,进行实际添加值时,一定要进行进行转化下对应的类型

到此,以上是两种HQL思路,但是由于我是做Android的,公司又没有Java后台开发的,也是困扰我一会儿。

但是在网上搜到解决方案,有说这个参数要写成 Collection<>,其实小数据类型也是可以的,毕竟这个 Collection,作为Java的一个大接口,看到的时候还是比较少。

Spring Data JPA in 查询例子

    @SuppressWarnings("unchecked")    @RequestMapping(method = RequestMethod.POST, value = "/findAll")    public @ResponseBody    Iterable<Customer> findAll(@RequestBody Customer customer) {               Pageable pageable = new PageRequest(customer.getPageNumber(), customer.getSize(), Sort.Direction.DESC,                "creationTime");        Specification<Customer> specification = new Specification<Customer>() {            @Override            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {                List<Predicate> list = new ArrayList<Predicate>();                                // 所属用户                String userId = customer.getUserId();                if (!StringUtils.isEmpty(userId)) {                    if (userId.contains(",")) { // in查询                        String[] ids = userId.split(",");                        CriteriaBuilder.In<Object> in = cb.in(root.get("userId"));                        for (int i = 0; i < ids.length; i++) {                            in.value(ids[i]);                        }                        list.add(in);                    } else { // 普通查询                        list.add(cb.equal(root.get("userId").as(String.class), userId));                    }                }                return cb.and(list.toArray(new Predicate[list.size()]));            }        };        return this.customerRepository.findAll(specification, pageable);    }

以上是“Spring Data JPA中in条件参数的传递方式有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Spring Data JPA中in条件参数的传递方式有哪些

本文链接: https://lsjlt.com/news/280044.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring Data JPA中in条件参数的传递方式有哪些
    这篇文章主要介绍Spring Data JPA中in条件参数的传递方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!关于Spring Data JPA中自定义sql 条件的 in参数记录此文做一个记录,以便以后...
    99+
    2023-06-15
  • Spring Data JPA中 in 条件参数的传递方式
    关于Spring Data JPA中自定义sql 条件的 in参数记录 此文做一个记录,以便以后观看,也希望正在遇到同样问题的同学能有所启发,如果你有更好的方法,或我的做法有问题,请...
    99+
    2024-04-02
  • Spring MVC传递接收参数方式有哪些
    这篇文章主要介绍“Spring MVC传递接收参数方式有哪些”,在日常操作中,相信很多人在Spring MVC传递接收参数方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring MVC传递接收参...
    99+
    2023-06-25
  • ajax中data传参的方式有哪些
    这篇文章主要介绍ajax中data传参的方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:1. POST方式: function orderCancel(o...
    99+
    2024-04-02
  • React传递参数的方式有哪些
    本篇内容介绍了“React传递参数的方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!父子组件之间传递参数父组件往子组件传值,直接用t...
    99+
    2023-06-20
  • python传递参数的方式有哪些
    在Python中,有以下几种方式可以传递参数:1. 位置参数:按照参数顺序传递,参数的位置和数量必须与函数定义中的参数一致。```p...
    99+
    2023-09-27
    python
  • c#参数传递的方式有哪些
    在C#中,参数传递的方式有以下几种:1. 值传递(By Value):将实参的值复制给形参,即在函数内部对形参的修改不会影响实参的值...
    99+
    2023-10-18
    c#
  • java参数传递的方式有哪些
    在Java中,参数传递的方式有以下几种: 值传递:基本类型和不可变对象通过值传递方式进行参数传递。在值传递中,传递的是实际值的副...
    99+
    2024-02-29
    java
  • python中函数传递参数的方式有哪些
    本篇文章为大家展示了python中函数传递参数的方式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不...
    99+
    2023-06-14
  • C++ 中函数参数的传递方式有哪些?
    c++++ 中,传递给函数的参数可通过三种方式传递:传值传递(创建形参副本)、传引用传递(直接访问实参)、传指针传递(访问实参的内存地址)。根据函数行为和内存管理要求选择最佳传递方式,权...
    99+
    2024-04-12
    c++ 函数参数传递方式 作用域
  • JavaScript函数参数的传递方式有哪些
    这篇文章主要介绍了JavaScript函数参数的传递方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript使用一个变量...
    99+
    2024-04-02
  • PHP 函数的参数传递方式有哪些?
    php 函数参数可以通过引用或按值传递。按值传递不会修改外部变量,而引用传递会直接修改外部变量,使用 &amp; 符号启用。引用传递常用于修改数组元素和优化性能。 PHP 函数...
    99+
    2024-04-10
    php 参数传递
  • C++ 函数参数传递方式有哪些?
    在 c++++ 中,有四种参数传递方式:1. 传值(副本)2. 传引用 3. 传常引用 4. 传指针。传值和传引用用于修改原值,常引用用于只读访问,而传指针用于操作内存地址。 C++ ...
    99+
    2024-04-12
    c++ 函数参数传递
  • python可变参数的传递方式有哪些
    这篇文章主要讲解了“python可变参数的传递方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python可变参数的传递方式有哪些”吧!1、包裹位置传递,所有的传入参数都会被args...
    99+
    2023-06-20
  • java线程传递参数的方式有哪些
    在Java中,线程传递参数的方式有以下几种: 使用构造函数传递参数:可以在创建线程对象时,通过构造函数将参数传递给线程对象。通过...
    99+
    2023-10-27
    java
  • SpringMVC中参数的传递方法有哪些
    这篇文章主要介绍“SpringMVC中参数的传递方法有哪些”,在日常操作中,相信很多人在SpringMVC中参数的传递方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • vb中传递参数的方法有哪些
    在VB中,传递参数的方法有以下几种: 通过值传递(ByVal):将参数的值传递给函数或子程序,不会影响原始变量的值。 通过引...
    99+
    2024-04-02
  • PHP函数参数传递方式有哪些区别?
    php 函数参数传递方式有两种:值传递和引用传递。值传递传递的是变量值的副本,对副本的修改不会影响原始变量;引用传递传递的是变量本身的引用,对引用的修改会直接影响原始变量。在表单处理中,...
    99+
    2024-04-19
    php 参数传递方式 表单提交
  • java传递参数的方法有哪些
    在Java中,传递参数的方法有以下几种:1. 值传递:基本数据类型(如int、char、boolean等)和字符串类型(String...
    99+
    2023-09-15
    java
  • SQL存储过程中In参数的传递方式
    本篇内容介绍了“SQL存储过程中In参数的传递方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.SQL...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作