千家信息网

Spring Data JPA的配置与使用方法

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关Spring Data JPA的配置与使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先简单介绍一下S
千家信息网最后更新 2026年11月02日Spring Data JPA的配置与使用方法

本篇文章给大家分享的是有关Spring Data JPA的配置与使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

首先简单介绍一下SpringData:Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库、Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。

再介绍一下JPA:Java 持久化 API (JPA)是一个 Java 应用程序接口 规范,描述了使用 Java标准版平台(Java SE) 和 Java企业版平台(Java EE)的应用中的 关系数据 的管理。(摘自维基百科)

现在我们可以来聊一聊Spring Data JPA。从Spring Data的介绍以及JPA的介绍不难看出,Spring Data JPA是使用JPA标准的持久层工具。持久层工具,那就有意思了,我们已经有Hibernate和Mybatis等等好用的持久层工具了,为什么要用Spring Data JPA呢?这是一个好问题,我卖个关子,我们先来看看Spring Data如何与Spring进行整合。

1. Spring整合Spring Data JPA

1.1 添加依赖

    org.springframework.boot    spring-boot-starter-data-jpa    mysql    mysql-connector-java    6.0.6

1.2 配置属性

#通用数据源配置spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/springboot_jpa?charset=utf8mb4&useSSL=falsespring.datasource.username=rootspring.datasource.password=123456# Hikari 数据源专用配置spring.datasource.hikari.maximum-pool-size=20spring.datasource.hikari.minimum-idle=5# JPA 相关配置#在 SrpingBoot 2.0 版本中,Hibernate 创建数据表的时候,默认的数据库存储引擎选择的是 MyISAM (之前好像是 InnoDB,这点比较诡异)。这个参数是在建表的时候,将默认的存储引擎切换为 InnoDB 用的。spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect#配置在日志中打印出执行的 SQL 语句信息。spring.jpa.show-sql=true#配置指明在程序启动的时候要删除并且创建实体类对应的表。这个参数很危险,因为他会把对应的表删除掉然后重建。所以千万不要在生成环境中使用。只有在测试环境中,一开始初始化数据库结构的时候才能使用一次。spring.jpa.hibernate.ddl-auto=update

对spring.jpa.hibernate.ddl-auto属性感兴趣的同学,可以去下面这篇博客看看。jpa的hibernate.ddl-auto的几个属性值区别。

1.3 创建实体类

import lombok.Data;import javax.persistence.*;/* * @Description TODO * @author Raindrop * @date 2019/8/22 9:10 */@Data       //lombok构建Get和Set方法@Entity     //声明该类为实体类@Table(name = "SpringDataJpa")      //该实体类对应的表名public class Test {    @Id     //该属性为主键    @GeneratedValue(strategy =  GenerationType.IDENTITY)        //JPA通用策略生成器    @Column(name = "id")        //数据表中列名    private Integer id;    @Column(name = "username", columnDefinition = "varchar(50) not null")   //数据表中列名以及列类型    private String username;    @Column(name = "email", columnDefinition = "varchar(50) not null")   //数据表中列名以及列类型    private String email;    @Column(name = "sex", columnDefinition = "varchar(50) not null")   //数据表中列名以及列类型    private String sex;    @Column(name = "age", columnDefinition = "varchar(50) not null")   //数据表中列名以及列类型    private String age;}

1.4 创建dao层

好了,我们的准备工作都已经做完了,接下来我们就可以快乐的进行CRUD了。

创建Repository类

package run.halo.app.repository;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.Query;import run.halo.app.model.entity.*;import java.util.List;public interface RaindropUserRepository extends JpaRepository {    //自定义方法 根据方法名来创建sql语句    //形成的SQL语句:select * from spring_data_jpa where userName = ?1    RaindropUser findByUsername(String userName);    //自定义方法 根据方法名来创建sql语句    //形成的SQL语句:select * from spring_data_jpa where sex = ?1 and email=?2    RaindropUser findBySexAndEmail(String sex, String email);    //切记切记,native的使用方法   JPA使用nativeQuery=true来区分是不是原生SQL    //以下方法是错误的,不可以使用原生的sql,而要是用对应的实体类以及属性来表示列和表名    //@Query("select id,username from spring_data_jpa where age < :age")    @Query("select new run.halo.app.model.entity.RaindropUser(raindrop.id," +            "raindrop.username,raindrop.email,raindrop.sex," +            "raindrop.age) from RaindropUser raindrop where raindrop.age < ?1")    List findByLtAge(Integer age);//    该示例也是错的//    @Query("select new run.halo.app.model.entity.RaindropUser(a.id,a.username,a.email,a.sex,a.age) from spring_data_jpa a where age > ?1")//    RaindropUser findByRtAge(Integer age);}

1.5 测试类

    @Test    public void Test(){        RaindropUser raindropUser = new RaindropUser();//        raindropUser.setEmail("123123@gmail.com");//        raindropUser.setAge(12);//        raindropUser.setUsername("Raindrop");//        raindropUser.setSex("man");//        继承自JpaRepository类都有一些基础方法,稍后讲解。该方法为保存数据//        raindropUserRepository.save(raindropUser);        List list = raindropUserRepository.findByLtAge(15);        System.out.println("List: " + list.get(0));//        RaindropUser raindropUser1 = raindropUserRepository.findByRtAge(10);//        System.out.println(raindropUser);//        System.out.println(raindropUser1);    }

1.6 JAP方法解析

我们在Repository类中定义了findByUsername以及findBySexAndEmail方法,SpringData会根据方法名自动生成SQL语句来执行。

重点词汇以及生成的SQL语句

KeywordSampleJPQL snippet
AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2
OrfindByLastnameOrFirstname… where x.lastname = ?1 or x.firstname = ?2
Is,EqualsfindByFirstnameIs,findByFirstnameEquals… where x.firstname = ?1
BetweenfindByStartDateBetween… where x.startDate between ?1 and ?2
LessThanfindByAgeLessThan… where x.age < ?1
LessThanEqualfindByAgeLessThanEqual… where x.age ⇐ ?1
GreaterThanfindByAgeGreaterThan… where x.age > ?1
GreaterThanEqualfindByAgeGreaterThanEqual… where x.age >= ?1
AfterfindByStartDateAfter… where x.startDate > ?1
BeforefindByStartDateBefore… where x.startDate < ?1
IsNullfindByAgeIsNull… where x.age is null
IsNotNull,NotNullfindByAge(Is)NotNull… where x.age not null
LikefindByFirstnameLike… where x.firstname like ?1
NotLikefindByFirstnameNotLike… where x.firstname not like ?1
StartingWithfindByFirstnameStartingWith… where x.firstname like ?1 (parameter bound with appended %)
EndingWithfindByFirstnameEndingWith… where x.firstname like ?1 (parameter bound with prepended %)
ContainingfindByFirstnameContaining… where x.firstname like ?1 (parameter bound wrapped in %)
OrderByfindByAgeOrderByLastnameDesc… where x.age = ?1 order by x.lastname desc
NotfindByLastnameNot… where x.lastname <> ?1
InfindByAgeIn(Collection ages)… where x.age in ?1
NotInfindByAgeNotIn(Collectionage)… where x.age not in ?1
TRUEfindByActiveTrue()… where x.active = true
FALSEfindByActiveFalse()… where x.active = false
IgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstame) = UPPER(?1)

以上就是Spring Data JPA的配置与使用方法,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

数据 方法 配置 语句 数据表 实体 属性 数据库 时候 类型 生成 使用方法 工具 应用 参数 平台 引擎 数据源 更多 标准 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融监管科技数据 互联网络科技有限公司 上海喔噻互联网科技 无线互联网科技 融贸通互联网科技 上海卓越科技 互联网 互联网 科技馆 剑昆互联网络科技有限公司临桂 宝灵互联网科技有限公司 移动互联网科技公司 知域互联网科技有限公司大骗子 深圳市优智互联网科技有限公司 中国科技创新与世界互联网大会 保险科技服务互联网营销体系 云南省自由互联网科技有限公司 启辰互联网科技 广州有谷有贝互联网科技有限公司 北京品多多互联网科技有限公司 恒生互联网科技趋势 互联网高科技绘画 互联网佳科技有限公司 西安纸贵互联网科技有限公司 网络科技有限互联网 互联网科技开发公司 西安互联网科技 杭州互联网科技公司 中国科技互联网公司收入 开一家科技互联网公司需要多少钱 广州智享互联网科技 三亚科技创新互联网基地
0