SpringDataJPA快速入门

SpringDataJPA快速入门

前言

之前在学习 SpringBoot 框架的时候,使用到了 SpringData JPA,但是当时只是简单的查询,没有用到稍微复杂的查询。

JPA 的 JPQL 语法规则对于简单的查询实属利器,大大加快了开发速度。不久前,在公司将用户推荐功能单独抽取出为一个独立项目,由于公司一直沿用的底层框架太老,只能使用 JDK1.6,JDK 1.9都出来了,实在不能忍?,果断引入了 SpringData JPA。

然后最近公司其他同事接手了该项目,但是不太了解 SpringData JPA 的使用,于是有了此文,不会就可以直接让他看本篇博客了哈哈。

环境准备

这里不讲解 SpringData JPA 与框架的整合,只讲解 JPA 语法的使用

Entity 实体类

@Entity // 表示为一个实体类
@Table("employee") // 表名 public class Employee { @Id //主键标识注解 @GeneratedValue // 主键生成方式 private Integer id; private String name; private Integer age; //Getter/Setter省略 }

Repository 接口

// 继承 JpaRepository 接口,第一个参数为查询的实体类,第二个为实体类的主键数据类型
public interface EmployeeRepository extends JpaRepository<Employee, Integer>{ }

插入测试数据

@Test
public void testAdd() throws Exception { for (int i = 0; i < 100; i++) { Employee employee = new Employee(); employee.setAge(i); employee.setName("test" + i); employeeRepository.save(employee); } }

JPA 查询语法讲解

使用 JPQL 进行查询

// 新增/更新
employeeRepository.save(employee);

// where name = ?1
employeeRepository.findByName("test1")

// where name = ?1 and age = ?2
employeeRepository.findByNameAndAge("test1", 20); // where age between ?1 and ?2 【包含头尾】 List<Employee> byAgeBetween = employeeRepository.findByAgeBetween(10, 16); // where age < ?1 List<Employee> list = employeeRepository.findByAgeLessThan(10); // where age > ?1 List<Employee> list = employeeRepository.findByAgeGreaterThan(90); // where name is null 【不包含为空字符串的数据】 List<Employee> list = employeeRepository.findByNameIsNull(); // where name like "test9%" 以test9为开头的name List<Employee> list = employeeRepository.findByNameLike("test9%"); 或者 List<Employee> employees = employeeRepository.findByNameStartingWith("test") // where name like "test_" 以test开头,且后面只模糊匹配一位 List<Employee> list2 = employeeRepository.findByNameLike("test_"); // where name like "%6" 模糊匹配以6结尾的 List<Employee> employees = employeeRepository.findByNameEndingWith(6) // where name in (?1, ?2) List<String> names = Arrays.asList("test1", "test2"); List<Employee> employees = employeeRepository.findByNameIn(names); // where age <> ?1 List<Employee> employees = employeeRepository.findByAgeNot(99); // where name = ?1 order by age desc List<Employee> findByNameOrderByAgeDesc(String name); 

使用自定义 Sql 以及 原生 Sql 查询

/** EmployeeRepository.java 添加方法 */

// 根据姓名与年龄查找,[通过占位符获取参数值]
@Query("select o from Employee o where name = ?1 and age = ?2")
List<Employee> queryEmployeeByParams(String name, Integer age); // 根据姓名与年龄查找,[通过命名参数获取参数值],必须使用 @Param 注解 @Query("select o from Employee o where name = :name and age = :age") List<Employee> queryEmployeeByParams2(@Param("name") String name, @Param("age") Integer age); // 原生SQL,与上面不同的是,上面使用的是对象名称以及对象属性名称,Native SQL使用数据库表名以及字段名 @Query(nativeQuery = true, value = "select * from employee where name = :name and age = :age") List<Employee> queryEmployeeByParams3(@Param("name") String name, @Param("age") Integer age); 

JPA 更新操作

/** 需要搭配使用 @Query 与 @Modifying 和 @Transactional 注解使用*/

@Modifying @Query("update Employee o set o.age = ?2 where o.id = ?1") Integer updateAge(Integer id, Integer age); 

在 Service 层调用

@Autowired
private EmployeeRepository employeeRepository;

@Transactional // 必须开启事务
public void update(Integer id, Integer age) { employeeRepository.save(id, age); }

分页查询

// EmployeeRepository 接口定义
Page<Employee> findByNameStartingWith(String name, Pageable pageable);

// 测试类 EmployeeRepositoryTest.java // 普通分页查询 @Test public void testFindByNameStartingWith() { // 注意 page 从 0 开始 Pageable request = new PageRequest(0, 10); Page<Employee> result = employeeRepository.findByNameStartingWith("test", request); for (Employee employee : result.getContent()) { System.out.println(employee); } } // 带排序条件的分页查询 @Test public void testFindByNameStartingWith() { Sort.Order order = new Sort.Order(Sort.Direction.DESC, "id"); Sort sort = new Sort(order); Pageable request = new PageRequest(0, 10, sort); Page<Employee> result = employeeRepository.findByNameStartingWith("test", request); for (Employee employee : result.getContent()) { System.out.println(employee); } }

动态 SQL 查询

在 Java 开发中,动态 SQL 是必不可少的,JPA 也可以实现,Repository 多继承一个接口 JpaSpecificationExecutor 即可。

// 修改之前的 EmployeeRepository, 使其多继承 JpaSpecificationExecutor 接口
public interface EmployeeRepository extends JpaRepository<Employee, Integer>, JpaSpecificationExecutor<Employee>{ // ...... } Pageable request = new PageRequest(0, 10); Specification<Employee> specification = new Specification<Employee>() { public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> query, CriteriaBuilder cb) { Path<Integer> path = root.get("age"); return cb.gt(path, 50); } }; Page<Employee> all = employeeRepository.findAll(specification, request);

后记

这里感谢一下慕课网,快速入门多亏了 imooc 上的课程。

参考课程:

  • https://www.imooc.com/learn/821

转载于:https://www.cnblogs.com/zt007/p/11578445.html

腾讯音乐 QQ音乐商业化客户端开发工程师:岗位深度解析与面试攻略 腾讯音乐QQ音乐商业化客户端开发工程师岗位要求3年以上Android开发经验,熟练掌握Kotlin/Java及跨端开发技术。核心职责包括QQ音乐客户端功能开发、架构优化、性能提升及技术攻关。岗位要求计算机相关本科以上学历,具备完整项目开发经验,熟悉TCP/IP等网络协议,能独立解决复杂技术问题。面试重点考察项目经验、架构设计、性能优化及新技术研究能力,建议候选人准备具体案例,量化成果,并熟悉Flutter等跨端技术。该职位强调技术深度与产品思维的结合,需展现扎实的编程基础、问题解决能力和团队协作精神。 阅读详情

相关推荐

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 882

Spring Data JPA 快速入门看这一篇就够了

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率! Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工...

java_leejin的博客 851

四路独立可控供电USB 2.0智能集线器设计

USB集线器是连接外设的基础接口设备,其供电管理能力直接影响系统可靠性与远程运维效率。传统HUB仅提供固定VBUS输出,缺乏端口级电源控制机制,难以实现软复位、故障隔离与功耗优化。本方案基于USB 2.0协议透明转发原理,通过硬件级电子负载开关(如MT9700)与独立MCU(ESP32-C3)协同,构建具备四路独立限流(680mA)、纳秒级通断响应、WiFi/MQTT远程管控能力的智能供电架构。技术价值体现在协议无侵入、控制域与数据域物理隔离、默认安全上电策略等工程实践要点,广泛适用于工业远程调试、实验室设

weixin_36289742的博客 193

SpringBoot之数据库操作JPA

1. 背景Jpa是继承了Hibernate,所以用起来很方便。 使用的过程一共分为3部分: 首先: 写相关的实体类,根据自己的开发需要会自动建表原理是基于ORM框架。(注意点,好像必须要有主键ID,正在验证。) /** * @Description: JPA实体类Entity的注解配置。 * @Param: * @return: * @Author: 葛春光 * @Date: 2020/7/10 */ @Entity @Table(name = "Tll_employee") public ..

gcglhd的博客 474

Nifi SNI 问题解决方案

Nifi 在配置 SSL 时,如果没有正确设置主机名(SNI),就会导致。为了解决这个问题,我们需要重新配置 Nifi 的 SSL 证书,并确保所有相关配置项(如服务器地址、证书路径和密码等)正确无误。以下是一个详细的解决步骤,以帮助你正确配置 Nifi 并解决 SNI 错误。文件中的配置项(如服务器地址、端口和证书路径),以及正确设置用户凭证。通过这些配置,你可以确保 Nifi 在支持 HTTPS 的同时,正确处理 SSL/TLS 的 SNI 问题。文件,配置服务器地址、端口以及证书路径和密码。

m0_58786911的博客 2293

Disk Drill 使用教程

Disk Drill只需单击几下,即可恢复USB闪存驱动器上已删除的数据,包括丢失的照片,文档和其他文件类型。Disk Drill是真正的多合一应用程序,可在Mac上恢复闪存驱动器。Disk Drill将自动应用最佳的笔式驱动器恢复算法来恢复Mac数据。 USB闪存驱动器是一种传输和存储信息的好方法,但是如果错误地丢失或删除了存储在其中的文件,会发生什么呢?当您需要Mac的闪存驱动器数据恢复软件时,Disk Drill是您的最佳选择。Disk Drill将扫描您的USB闪存驱动器(也称为笔式驱动器)并查找

zjj778899的博客 1万+

Spring 三种数据库连接方式、传统连接、JdbcTemplate、Spring Jpa data(下)

我现在经常用到Spring JPA Data 和逆向工程一样方便 GitHub地址:https://github.com/binlian/binglian-Spring-JPA-Data 它有自己的定义规则,可以不用在写那些SQL语句了, 可以根据id name来查询 两个一起查询等 public Employee findByName(String name); 这传代码就是 ...

xiaoxin0630的博客 2131

AD9026芯片开发实战:从Example Code到API调用的关键步骤解析

本文详细解析了AD9026芯片开发的核心流程,重点阐述了如何从官方提供的Example Code入手,逐步理解硬件平台发现、HAL层初始化、配置加载、芯片复位、固件启动、JESD链路建立等关键API调用序列。通过剖析示例工程的结构与核心文件,为开发者在自定义硬件平台上移植和调试AD9026驱动提供了清晰的实战指南。

java5的博客 787

SpringDataJPA之快速入门

  Spring Data JPA:Spring Data JPA 是 spring data 项目下的一个模块。提供了一套基于 JPA标准操作数据库的简化方案。底层默认的是依赖 Hibernate JPA 来实现的。   Spring Data JPA 的技术特点:我们只需要定义接口并集成 Spring Data JPA 中所提供的接口就可以了。不需要编写接口实现类。 SpringDataJPA...

波波烤鸭的博客 2498

3GPP LTE/NR信道模型

CDL(Clustered Delay Line):簇延迟线模型,包括CDL-A、CDL-B、CDL-C三个用于NLOS的信道模型,以及CDL-D、CDL-E两个用于LOS的信道模型。

LinkEverything的博客 1万+

CUDA编程00 - 配置CUDA开发环境

第一步:在一台装有Nvidia显卡和驱动的机器上,用nvidia-smi命令查看显卡所支持cuda版本。安装时按提示下一步即可,安装完成用 nvcc -V 命令检查是否成功。第二步: 到Nvidia官网下载CUDA Toolkit并安装,第三步:编写HelloWorld。

GPU全栈博主 1359

SpringDataJPA 快速入门

SpringDataJPA 介绍及使用

Demo_Null 3326

如何让C++程序生成dump文件?生成dump文件的方式有哪些?如何使用Windbg分析dump文件?

本文详细介绍了如何让C++程序生成dump文件、生成dump文件的多种方式以及如何使用Windbg分析dump文件,并给出了对应的实战分析案例,有一定的实战参考价值。

dvlinker的技术专栏 5万+

SpringDataJPA--快速入门

Spring Data JPA 与 JPA和hibernate之间的关系 JPA是一套规范,内部是有接口和抽象类组成的。hibernate是一套成熟的ORM框架,而且Hibernate实现了JPA规范,所以也可以称hibernate为JPA的一种实现方式,我们使用JPA的API编程,意味着站在更高的角度上看待问题(面向接口编程) Spring Data JPA是Spring提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案。 Spring Data JPA的快速入门

qq_43404873的博客 278

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringDataJPA - 1:快速入门

以下内容均以localhost数据库sql_demo为例,表名:user_demo maven相关坐标 <properties> <spring.version>5.0.2.RELEASE</spring.version> <hibernate.version>5.0.7.Final</hibernate.version> <slf4j.version>1.6.6</slf

sunlibincn 175

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringDataJpa快速入门,包括springdatajpa与hibernate、jpa之间的关系;Spring Data JPA的入门案例环境的搭建、CRUD等操作。

对Spring Data JPA做了一个基本的简介,包括springdatajpa与hibernate、jpa之间的关系;Spring Data JPA的入门案例环境的搭建、CRUD等操作。 文章目录SpringDataJPA的概述Spring Data JPA与JPA与hibernate之间的关系Spring Data JPA快速入门Spring Data JPA实现CRUD SpringD...

coderxz的博客 339

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring Data JPA之Spring Data JPA快速入门(三)

Spring Data JPA之Spring Data JPA快速入门Spring Data JPA概述Spring Data JPA 、 JPA、hibernate三者的关系Spring Data JPA的快速入门1.添加依赖2.Spring Data JPA与Spring整合使用JPA注解配置映射关系创建Spring Data JPA规范的Dao层接口基本CRUD操作零零 Spring Data JPA概述 Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装

积跬步,至千里。 808

Spring Data JPA快速入门

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可以极大的简化JPA的写法,是在JPA规范下的专门用来进行数据持久化的解决方案。使用它开发者只需要简单的代码就可以实现对数据库的访问和操作。

龙源IT 的博客 673

SpringBoot在项目中使用Jpa(SpringDataJpa快速入门)实现增删改查

SpringBoot在项目中使用Jpa(SpringDataJpa快速入门)实现增删改查 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关 系,并将运行期的实体对象持久化到数据库中。 在ORM框架中,Hibernate是一支很大的部队,使用很广泛,也很方便,能力也很强,同时Hibernate也是和JPA整 合的比较良好,我们可以认为JPA是标准,事实上也是,JPA几乎都是接口,实现都是Hibernate在做,宏观上面看,

weixin_36873225的博客 828

SpringDataJpa入门

一、SpringDataJpa 1.1、概述 Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率! 1.2、SpringDataJpa、Jpa、H...

王港 527

2024年最全SpringDataJPA之快速入门,java基础面试知识题库

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。

ghfgjfg679的博客 716

SpringDataJpa学习(七) Spring Data JPA的快速入门

1、搭建Spring Data JPA开发环境 案例:客户的基本crud i.环境搭建 创建工程导入坐标 配置spring的配置文件 编写实体类(customer),使用jpa注解配置映射关系 ii.编写一个符合Spring Data JPA规范的dao层接口 *只需要编写dao层接口,不需要编写dao层实现类 *dao层接口规范 1.需要继承两个接口(JpaRepository,JpaS...

爱喵的Hero的博客 426

day02-SpringDataJPA

JPA第二天第1章Spring Data JPA的概述1.1Spring Data JPA概述1.2Spring Data JPA的特性1.3Spring Data JPA 与 JPA和hibernate之间的关系第2章Spring Data JPA的快速入门2.1需求说明2.2搭建Spring Data JPA的开发环境2.2.1引入Spring Data JPA的坐标2.2.2整合Spring Data JPA与Spring2.2.3使用JPA注解配置映射关系2.3使用Spring Data JPA完成

hu_zhi_chao的博客 573

SpringBoot在项目中结合Lombok使用Jpa(SpringDataJpa快速入门)实现增删改查

SpringBoot项目中使用Jpa(SpringDataJpa) 前言 请查看博主的SpringDataJpa系列文章。欢迎关注! JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关 系,并将运行期的实体对象持久化到数据库中。 在ORM框架中,Hibernate是一支很大的部队,使用很广泛,也很方...

Mr_chen的博客 2628
上一篇: 接口可以继承多个接口总结
下一篇: Spring Data JPA 动态拼接条件的通用设计模式
dengken829873708
博客等级 码龄12年 5粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值