详解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中Range函数的简单介绍

    Java中Range函数的简单介绍 在Java中,Range函数是一个非常重要和常用的函数,它可以对一定范围内的值进行处理和操作。在本文中,我们将向大家详细介绍Java中Range函数的基本用法和示例。 Range函数的基本用法 Java中的Range函数是指可以对一个范围内的值进行处理和操作的函数。范围可以是数字范围,也可以是其他类型的范围,如字符范围或时…

    Java 2023年5月26日
    00
  • SpringBoot在项目中访问静态资源步骤分析

    Spring Boot在项目中访问静态资源步骤分析 在Spring Boot应用程序中,我们经常需要访问静态资源,如图片、CSS、JavaScript等。为了实现这些功能,我们需要在Spring Boot应用程序中配置静态资源的访问路径。在本文中,我们将详细介绍如何在Spring Boot应用程序中访问静态资源,并提供两个示例说明。 步骤分析 在Spring…

    Java 2023年5月18日
    00
  • spring注解 @PropertySource配置数据源全流程

    Spring注解 @PropertySource 用于加载指定的属性源,是Spring Framework 4.0版本之后提供的新特性。它允许我们从外部文件或环境变量中读取配置信息,灵活地管理我们的应用程序的数据源。 下面是使用 @PropertySource 配置数据源的完整流程: 引入依赖 在项目的 pom.xml 文件中添加以下依赖: <depe…

    Java 2023年6月2日
    00
  • MyBatis与SpringMVC相结合实现文件上传、下载功能

    下面是关于“MyBatis与SpringMVC相结合实现文件上传、下载功能”的完整攻略,包含两个示例说明。 MyBatis与SpringMVC相结合实现文件上传、下载功能 在Web应用程序中,文件上传和下载是常见的功能。本文将介绍如何使用MyBatis和SpringMVC相结合实现文件上传和下载功能。 文件上传 1. 添加依赖 首先,我们需要添加以下依赖: …

    Java 2023年5月17日
    00
  • Java模拟多线程实现抢票代码实例

    以下是关于“Java模拟多线程实现抢票代码实例”的详细攻略: 什么是多线程 多线程是指在同一程序中,多个线程同时运行,实现多个任务同时执行的一种编程方式。在Java中,线程是比进程更小的执行单元,每个线程都可以独立地运行和完成自己的任务。 实现多线程的两种方式 继承Thread类 通过继承Thread类并重写它的run()方法来实现多线程。重写run()方法…

    Java 2023年5月18日
    00
  • 浅谈springboot多模块(modules)开发

    浅谈Spring Boot多模块开发 Spring Boot是一个非常流行的Java开发框架,它支持多模块开发。本文将详细介绍Spring Boot多模块开发的方法,包括创建模块、依赖管理、打包等。 1. 创建模块 在Spring Boot中,我们可以使用Maven或Gradle来创建模块。以下是一个使用Maven创建模块的示例: <project&g…

    Java 2023年5月14日
    00
  • Java基础之数组详解

    Java基础之数组详解 什么是数组 数组是一种存储多个相同类型元素的数据类型。在Java中,数组的大小是在创建时确定的,并且在程序运行时不能改变。数组元素可以是任何基本类型、引用类型或其他数组类型。数组是一个对象,因此在Java中,数组变量的值是数组的引用。 创建数组 可以使用new关键字创建一个数组。语法如下: type[] arrayName = new…

    Java 2023年5月26日
    00
  • MyBatis控制台显示SQL语句的方法实现

    下面是 “MyBatis控制台显示SQL语句的方法实现” 的完整攻略: 1. 添加MyBatis配置文件 在 application.properties 或 mybatis-config.xml 文件中声明 MyBatis 显示 SQL 的配置。在 mybatis-config.xml 中的 \<configuration> 节点内添加如下配置…

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