SpringData JPA的常用语法汇总

yizhihongxing

下面我将为你详细讲解SpringData JPA的常用语法汇总。

1.概述

SpringData JPA是Spring框架的一个子项目,它提供了一种非常方便的方式来简化JPA的使用,降低了编写JPA代码的复杂度。SpringData JPA主要是基于JPA规范来实现的,并对JPA规范进行了一些扩展,提供了一些更为方便的API和方法。

2.常用语法汇总

2.1基本查询

SpringData JPA提供了一个非常强大的查询语言,其主要是基于方法名来进行查询的,下面是一些示例:

  • 根据用户姓名进行查询
User findByUsername(String username);
  • 根据用户姓名和密码进行查询
User findByUsernameAndPassword(String username,String password);
  • 根据用户年龄进行查询
List<User> findByAge(int age);

2.2条件查询

除了基本查询以外,SpringData JPA还提供了一些条件查询的方法:

  • 根据用户姓名进行模糊查询
List<User> findByUsernameLike(String username);
  • 根据用户姓名进行模糊查询并按照年龄从大到小排序
List<User> findByUsernameLikeOrderByAgeDesc(String username);
  • 根据用户年龄查询最大的一条记录
User findFirstByOrderByAgeDesc();

2.3分页查询

SpringData JPA还提供了分页查询的方法,如下所示:

  • 查询所有数据并分页
Page<User> findAll(Pageable pageable);
  • 根据用户姓名进行模糊查询并分页
Page<User> findByUsernameLike(String username, Pageable pageable);
  • 查询年龄大于等于20岁的用户并分页
Page<User> findByAgeGreaterThanEqual(int age, Pageable pageable);

3.示例说明

下面是一个示例,假设我们有一个User实体类,其中包含了id、username、password和age四个字段。

3.1 创建User类

@Entity
@Table(name="tb_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String username;

    private String password;

    private Integer age;
}

3.2 创建UserRepository类

public interface UserRepository extends JpaRepository<User, Integer> {

    User findByUsername(String username);

    User findByUsernameAndPassword(String username,String password);

    List<User> findByAge(int age);

    List<User> findByUsernameLike(String username);

    List<User> findByUsernameLikeOrderByAgeDesc(String username);

    User findFirstByOrderByAgeDesc();

    Page<User> findAll(Pageable pageable);

    Page<User> findByUsernameLike(String username, Pageable pageable);

    Page<User> findByAgeGreaterThanEqual(int age, Pageable pageable);
}

3.3 创建测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void contextLoads() {
    }

    @Test
    public void testFindById(){
        User user = userRepository.getOne(1);
        Assert.assertNotNull(user);
    }

    @Test
    public void testFindByUsername(){
        User user = userRepository.findByUsername("admin");
        Assert.assertNotNull(user);
    }

    @Test
    public void testFindByUsernameAndPassword(){
        User user = userRepository.findByUsernameAndPassword("admin","admin");
        Assert.assertNotNull(user);
    }

    @Test
    public void testFindByAge(){
        List<User> userList = userRepository.findByAge(20);
        Assert.assertTrue(userList.size()>0);
    }

    @Test
    public void testFindByUsernameLike(){
        List<User> userList = userRepository.findByUsernameLike("%a%");
        Assert.assertTrue(userList.size()>0);
    }

    @Test
    public void testFindByUsernameLikeOrderByAgeDesc(){
        List<User> userList = userRepository.findByUsernameLikeOrderByAgeDesc("%a%");
        Assert.assertTrue(userList.size()>0);
    }

    @Test
    public void testFindFirstByOrderByAgeDesc(){
        User user = userRepository.findFirstByOrderByAgeDesc();
        Assert.assertNotNull(user);
    }

    @Test
    public void testFindAll(){
        Page<User> userPage = userRepository.findAll(new PageRequest(0,5));
        Assert.assertTrue(userPage.getTotalElements()>0);
    }

    @Test
    public void testFindByUsernameLikePage(){
        Page<User> userPage = userRepository.findByUsernameLike("%a%", new PageRequest(0,5));
        Assert.assertTrue(userPage.getTotalElements()>0);
    }

    @Test
    public void testFindByAgeGreaterThanEqualPage(){
        Page<User> userPage = userRepository.findByAgeGreaterThanEqual(20, new PageRequest(0,5));
        Assert.assertTrue(userPage.getTotalElements()>0);
    }

}

以上就是一个简单的SpringData JPA的示例,其中包含了基本的查询、条件查询和分页查询。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringData JPA的常用语法汇总 - Python技术站

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

相关文章

  • Java util concurrent及基本线程原理简介

    Java util concurrent及基本线程原理简介 线程基本概念 线程是操作系统进行任务调度和执行的基本单位,一个进程可以拥有多个线程。 线程是轻量级的,相对于进程来说占用较少的资源。 线程也是并发编程的基石,不同的线程可以同时执行不同的任务,提高了应用程序的并发性。 线程的状态 新建状态 线程是尚未启动的状态,实例化了一个Thread对象,还未调用…

    Java 2023年5月18日
    00
  • 解决Spring boot 嵌入的tomcat不启动问题

    当我们在使用Spring Boot构建Web应用的时候,通常会内嵌Tomcat容器来运行我们的应用,但是有时候,我们会遇到Tomcat容器启动失败的问题。本文将给出解决Spring boot嵌入的Tomcat不启动问题的完整攻略。 问题分析 当我们在使用Spring Boot启动我们的Web应用时,会发现程序无法启动,控制台会打印很多错误信息,其中包含了如下…

    Java 2023年5月19日
    00
  • java开发中遇到的异常汇总详解

    Java开发中遇到的常见异常汇总详解 1. 空指针异常 空指针异常是Java开发中最常见的异常之一,它通常发生在尝试调用空对象的方法或访问空对象的成员变量时。 可以通过以下代码来模拟: String str = null; System.out.println(str.length()); 这段代码试图计算空字符串的长度,但由于str为null,因此会抛出空…

    Java 2023年5月20日
    00
  • 详解重试框架Spring retry实践

    详解重试框架Spring Retry实践 Spring Retry是一个用于在Spring应用程序中执行重试逻辑的框架。它提供了很多有用的功能,例如定时重试、重试策略的配置、异常处理等。在这篇文章中,我们将为您介绍Spring Retry的基本概念和使用方法,并提供一些示例来帮助您更好地了解Spring Retry的使用。 引入Spring Retry 在使…

    Java 2023年5月19日
    00
  • 关于.java编译成.class 与 .class反编译成.java问题

    关于 Java 编译成 .class 和 .class 反编译成 .java 的问题,这里提供完整的攻略如下: Java 编译成 .class 在 Java 中,我们编写的代码以 .java 文件的形式存储,但是计算机并不能直接运行这些代码,需要将其编译成目标格式的二进制代码。 Java 编译器可以将 Java 代码编译成字节码(bytecode),并将其保…

    Java 2023年5月26日
    00
  • Java如何判断字符串中是否包含某个字符

    如果需要在Java中判断一个字符串是否包含某个字符,可以使用String类的contains()方法或indexOf()方法。 方法1:contains()方法 contains()方法用于判断一个字符串中是否包含另一个字符串。它返回一个布尔值,表示待判断的字符串是否包含指定的字符或字符串。 下面是一个例子: String str = "hello…

    Java 2023年5月27日
    00
  • 基于Java实现马踏棋盘游戏算法

    基于Java实现马踏棋盘游戏算法 什么是马踏棋盘游戏? 马踏棋盘游戏(英文名Knight’s Tour)是一种经典的棋盘游戏,该游戏要求在一个 $n \times n$ 的棋盘上,使用国际象棋中马的移动方式,从一个初始位置出发,依次移动,走遍所有的格子,且每个格子只能走一次。 算法思路 基于深度优先搜索(DFS)的回溯算法是解决马踏棋盘游戏的最优算法,其基本…

    Java 2023年5月19日
    00
  • Java缓存技术的作用是什么?

    Java缓存技术是在应用程序和数据库之间的一种中间层,用于存储暂时性数据,尤其是读取频繁但更新较少的数据。它的作用是减轻应用程序和数据库之间的负担,提高应用程序的响应速度和性能。下面我们将详细介绍如何使用Java缓存技术。 1. 选择合适的Java缓存框架 Java缓存框架有很多种,常见的有Guava Cache、Ehcache、Redis等。根据应用的不同…

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