详解Spring Data Jpa 模糊查询的正确用法

详解Spring Data JPA 模糊查询的正确用法

Spring Data JPA是基于JPA规范的一个简化操作数据库的框架,在使用Spring Data JPA进行数据库操作时,经常会使用模糊查询,下面是模糊查询的正确用法及示例。

特定字段模糊查询

特定字段模糊查询是针对某一个特定的字段进行模糊查询,示例代码如下:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    /**
     * 根据用户名模糊查询用户信息
     *
     * @param name 用户名
     * @return 用户信息列表
     */
    List<User> findByNameLike(String name);
}

在上述示例代码中,findByNameLike是Spring Data JPA定义的查询方法,其中name为要查询的字段名称,使用Like关键字可以实现模糊匹配。在使用时只需传入模糊匹配的字符串即可。

动态字段模糊查询

动态字段模糊查询是一种根据多个字段进行模糊查询的方法,可以做到根据用户输入的不同字段进行模糊匹配,示例代码如下:

@Repository
public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
    /**
     * 动态模糊查询
     *
     * @param name     用户名
     * @param phone    电话号码
     * @param criteria 查询条件
     * @return 用户信息列表
     */
    default List<User> dynamicQuery(String name, String phone, QueryCriteria criteria) {
        return findAll((Specification<User>) (root, query, criteriaBuilder) -> {
            List<Predicate> predicates = new ArrayList<>();
            if (StringUtils.isNotBlank(name)) {
                predicates.add(criteriaBuilder.like(root.get("name"), "%" + name + "%"));
            }
            if (StringUtils.isNotBlank(phone)) {
                predicates.add(criteriaBuilder.like(root.get("phone"), "%" + phone + "%"));
            }

            // 判断是否有查询条件
            if (criteria != null && criteria.getCriterias() != null && criteria.getCriterias().size() > 0) {
                for (Criteria criteria1 : criteria.getCriterias()) {
                    if (StringUtils.isNotBlank(criteria1.getCriteriaKey()) && StringUtils.isNotBlank(criteria1.getCriteriaValue())) {
                        predicates.add(criteriaBuilder.like(root.get(criteria1.getCriteriaKey()), "%" + criteria1.getCriteriaValue() + "%"));
                    }
                }
            }

            // 复杂条件查询
            if (predicates.size() > 0) {
                return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
            } else {
                return criteriaBuilder.conjunction();
            }
        });
    }
}

在上述示例代码中,dynamicQuery方法是定义的动态模糊查询,方法中需要传入要查询的用户名、电话及可变条件列表。在方法中使用了findAllJpaSpecificationExecutor来实现动态查询,其中Specification是Spring Data JPA提供的条件查询接口,用于实现复杂查询条件。

至此,使用Spring Data JPA实现模糊查询的方法及示例代码已经完成。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring Data Jpa 模糊查询的正确用法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java C++ 题解leetcode857雇佣K名工人最低成本vector pair

    题目描述: 给定两个长度为N的整数数组,W数组表示每个工人的工资,Q数组表示每个工人完成工作的质量。现在要雇佣K名工人去完成一些工作,每个工人只能完成一项工作,工人完成一项工作的质量就是该工作质量的总和,而这些工作的总成本是所有工人的工资总和。求最小的总成本。 思路分析: 先将工资按比例排序,使用最小堆,维护当前最小的K个工资,同时记录下当前最小K个工资的序…

    Java 2023年5月20日
    00
  • 在Java的Struts框架下进行web编程的入门教程

    在Java的Struts框架下进行web编程的入门教程 什么是Struts框架? Struts框架是基于Java Servlet和Java Server Pages技术的Web应用框架,提供了处理用户请求和生成响应的框架。它是MVC开发模式的一种实现,能够更好地分离应用程序的模型、视图和控制器。Struts在Web应用开发中已经非常成熟,并且拥有丰富的生态圈…

    Java 2023年5月19日
    00
  • 详解Java中雪花算法的实现

    详解Java中雪花算法的实现 需求概述 在分布式系统中,为了保证业务数据的唯一性,需要生成唯一的ID。传统的ID生成方式可能出现因为高并发而重复的情况,而雪花算法(Snowflake)正是为了解决这个问题而出现的。 本文会详细介绍Java中雪花算法的实现,及其原理。 雪花算法的基本原理 雪花算法是Twitter开源的分布式ID生成算法,采用一个64位的lon…

    Java 2023年5月19日
    00
  • 如何避免Java内存泄漏?

    如何避免Java内存泄漏? 内存泄漏通常指一块已经不再使用的内存没有被释放,导致可用内存减少或出现内存溢出等情况。Java虚拟机有自己的内存管理器,可以自动回收不再使用的内存资源,但是程序员也需要在代码中注意一些内存管理的问题,以避免Java内存泄漏。 以下是一些避免Java内存泄漏的方法: 避免使用静态变量 在Java程序中静态变量是一种方便的数据存储方式…

    Java 2023年5月11日
    00
  • Java Tomcat 启动闪退问题解决集

    让我来详细讲解“Java Tomcat 启动闪退问题解决集”。 Java Tomcat 启动闪退问题解决集 问题描述 在启动 Java Tomcat 时,可能会遇到闪退的问题。这种情况可能由多种原因导致,比如 Tomcat 配置文件出错、JVM 虚拟机内存溢出等。本文将提供一些解决 Tomcat 启动闪退的方法。 检查 Tomcat 配置文件 启动 Tomc…

    Java 2023年5月19日
    00
  • Java中List.contains(Object object)方法使用

    Java中的List.contains(Object object)方法用于判断List容器中是否包含指定的对象。这个方法返回一个boolean类型,当包含指定对象时返回true,否则返回false。下面就是使用List.contains()方法的完整攻略: 方法签名 下面是List.contains(Object object)方法的定义签名(注意,该方法…

    Java 2023年5月26日
    00
  • javaweb前端向后端传值的几种方式总结(附代码)

    以下是对“javaweb前端向后端传值的几种方式总结(附代码)”的详细讲解攻略。 前言 在Web开发中,前端页面需要向后端服务器传递数据以完成后续逻辑的处理,而后端需要获取前端传递的数据进行处理并返回相应的结果。在这个过程中,前后端数据传递是非常重要的,因此准确地传递和获取数据是保证Web应用程序正常运行的基础。接下来,我们将介绍JavaWeb前端向后端传值…

    Java 2023年6月15日
    00
  • AJAX省市区三级联动下拉菜单(java版)

    标题:实现AJAX省市区三级联动下拉菜单(Java版) 介绍:AJAX省市区三级联动下拉菜单是一种常见的网页交互方式。本文将介绍如何使用Java实现一个AJAX省市区三级联动下拉菜单。 步骤一:创建三个下拉框 首先,在web页面上创建三个下拉框,分别表示省、市、区。同时,为每个下拉框设置一个唯一的ID属性。 示例一: <select id="…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部