iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >jpa介绍以及在spring boot中使用详解
  • 878
分享到

jpa介绍以及在spring boot中使用详解

2024-04-02 19:04:59 878人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.什么是jpa呢?2.jpa具有什么优势?2.1标准化2.2容器级特性的支持2.3简单方便2.4查询能力2.5高级特性3.基于注解的使用3.1 JPA拥有哪些注解呢?4.代码实

1.什么是jpa呢?

JPA顾名思义就是Java Persistence api的意思,是jdk 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

2.jpa具有什么优势?

2.1标准化

JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

2.2容器级特性的支持

JPA框架中支持大数据集、事务并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

2.3简单方便

JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。

2.4查询能力

JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 sql 才能够提供的高级查询特性,甚至还能够支持子查询。

2.5高级特性

JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

3.基于注解的使用

本篇只介绍注解的使用,另一种基于xml方式的使用大家有兴趣可以自行了解一下。

3.1 JPA拥有哪些注解呢?

注解 解释
@Entity 声明类为实体或表。
@Table 声明表名。
@Basic 指定非约束明确的各个字段。
@Embedded 指定类或它的值是一个可嵌入的类的实例的实体的属性。
@Id 指定的类的属性,用于识别(一个表中的主键)。
@GeneratedValue 指定如何标识属性可以被初始化,例如自动、手动、或从序列表中获得的值。
@Transient 指定的属性,它是不持久的,即:该值永远不会存储在数据库中。
@Column 指定持久属性栏属性。
@SequenceGenerator 指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。
@TableGenerator 指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。
@AccessType 这种类型的注释用于设置访问类型。如果设置@AccessType(FIELD),则可以直接访问变量并且不需要getter和setter,但必须为public。如果设置@AccessType(PROPERTY),通过getter和setter方法访问Entity的变量。
@JoinColumn 指定一个实体组织或实体的集合。这是用在多对一和一对多关联。
@UniqueConstraint 指定的字段和用于主要或辅助表的唯一约束。
@ColumnResult 参考使用select子句的SQL查询中的列名。
@ManyToMany 定义了连接表之间的多对多一对多的关系。
@ManyToOne 定义了连接表之间的多对一的关系。
@OneToMany 定义了连接表之间存在一个一对多的关系。
@OneToOne 定义了连接表之间有一个一对一的关系。
@NamedQueries 指定命名查询的列表。
@NamedQuery 指定使用静态名称的查询。

了解了注解之后我们来看看如何使用吧

4.代码实战

4.1maven依赖

添加jpa起步依赖


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

4.2配置文件

在application.yml文件中添加如下配置


spring:
  datasource:
    url: jdbc:Mysql://localhost:3306/mytest
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    passWord: root
    driver-class-name: com.mysql.jdbc.Driver //驱动
  jpa:
    hibernate:
      ddl-auto: update //自动更新
    show-sql: true  //日志中显示sql语句

jpa.hibernate.ddl-auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:

  • create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
  • create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
  • update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
  • validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

以上我们完成了基本的配置工作,记下来看一下如何进行表与实体的映射,以及数据访问接口。

4.3创建实体以及数据访问接口

首先来看一下实体类Person.java


@Entity
@Getter
@Setter
public class Person {
    @Id
    @GeneratedValue
    private Long id;
    @Column(name = "name", nullable = true, length = 20)
    private String name;
    @Column(name = "agee", nullable = true, length = 4)
    private int age;
}

接着是PersonRepository.java,改接口只需要继承JpaRepository接口即可。


public interface PersonRepository extends JpaRepository<Person, Long> {
}

然后写一个rest接口以供测试使用。


@RestController
@RequestMapping(value = "person")
public class PerconController {
    @Autowired
    private PersonRepository personRepository;
    @PostMapping(path = "addPerson")
    public void addPerson(Person person) {
        personRepository.save(person);
    }
    @DeleteMapping(path = "deletePerson")
    public void deletePerson(Long id) {
        personRepository.delete(id);
    }
}

好了,让我们来运行一下程序看看结果吧,启动程序,查询数据库我们就可以看到,JPA以及自动帮我们创建了表

这里写图片描述

接下来我们调用一下addPerson接口。我们使用postman来测试:

这里写图片描述

然后通过查询数据库来看一下结果:

这里写图片描述

我们可以看到成功插入了数据,并且观察表结构可以看到,agee是我们定义的column名称,id为自增。并且从上面的repository接口代码我们可以看到,接口中并没有定义任何的方法,这是因为JpaRepository中帮我们定义了基础的增删改查方法,可以很方便的直接使用。

接下来我们来看一下如何编写自己的方法。我们以根据name查询person为例。添加一个rest接口


    @GET
    @Produces(TYPE_JSON)
    @Path("getPerson")
    public Object getPerson(@QueryParam("name") String name) {
        return personRepository.findByName(name);
    }

并在repository接口中添加如下查询方法:


Person findByName(String name);

重启之后让我们来看一下查询结果

这里写图片描述

我们可以看到通过name获取到了想要的结果。我们也可以在日志中看到hibernate输出的日志:


Hibernate: select person0_.id as id1_0_, person0_.agee as agee2_0_, person0_.name as name3_0_ from person person0_ where person0_.name=?

那么JPA是通过什么规则来根据方法名生成sql语句查询的呢?

其实JPA在这里遵循Convention over configuration(约定大约配置)的原则,遵循spring 以及JPQL定义的方法命名。Spring提供了一套可以通过命名规则进行查询构建的机制。这套机制会把方法名首先过滤一些关键字,比如 find…By, read…By, query…By, count…By 和 get…By 。系统会根据关键字将命名解析成2个子语句,第一个 By 是区分这两个子语句的关键词。这个 By 之前的子语句是查询子语句(指明返回要查询的对象),后面的部分是条件子语句。如果直接就是 findBy… 返回的就是定义Respository时指定的领域对象集合,同时JPQL中也定义了丰富的关键字:and、or、Between等等,下面我们来看一下JPQL中有哪些关键字:

Keyword Sample JPQL snippet
And findByLastnameAndFirstname … where x.lastname = ?1 and
Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2
Is,Equals findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1
Between findByStartDateBetween … where x.startDate between ?1 and ?2
LessThan findByAgeLessThan … where x.age < ?1
LessThanEqual findByAgeLessThanEqual … where x.age ⇐ ?1
GreaterThan findByAgeGreaterThan … where x.age > ?1
GreaterThanEqual findByAgeGreaterThanEqual … where x.age >= ?1
After findByStartDateAfter … where x.startDate > ?1
Before findByStartDateBefore … where x.startDate < ?1
IsNull findByAgeIsNull … where x.age is null
IsNotNull,NotNull findByAge(Is)NotNull … where x.age not null
Like findByFirstnameLike … where x.firstname like ?1
NotLike findByFirstnameNotLike … where x.firstname not like ?1
StartingWith findByFirstnameStartingWith … where x.firstname like ?1 (parameter bound with appended %)
EndingWith findByFirstnameEndingWith … where x.firstname like ?1 (parameter bound with prepended %)
Containing findByFirstnameContaining … where x.firstname like ?1 (parameter bound wrapped in %)
OrderBy findByAgeOrderByLastnameDesc … where x.age = ?1 order by x.lastname desc
Not findByLastnameNot … where x.lastname <> ?1
In findByAgeIn(Collection ages) … where x.age in ?1
NotIn findByAgeNotIn(Collection age) … where x.age not in ?1
TRUE findByActiveTrue() … where x.active = true
FALSE findByActiveFalse() … where x.active = false
IgnoreCase findByFirstnameIgnoreCase … where UPPER(x.firstame) = UPPER(?1)
……

以上就是jpa的简单实用和介绍。

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: jpa介绍以及在spring boot中使用详解

本文链接: https://www.lsjlt.com/news/132253.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • jpa介绍以及在spring boot中使用详解
    目录1.什么是jpa呢?2.jpa具有什么优势?2.1标准化2.2容器级特性的支持2.3简单方便2.4查询能力2.5高级特性3.基于注解的使用3.1 JPA拥有哪些注解呢?4.代码实...
    99+
    2024-04-02
  • jpa在spring boot中的使用方式
    本篇内容介绍了“jpa在spring boot中的使用方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录什么是jpa呢?jpa具有什么优...
    99+
    2023-06-20
  • 详解在Spring Boot中使用Https
    本文介绍如何在Spring Boot中,使用Https提供服务,并将Http请求自动重定向到Https。Https证书巧妇难为无米之炊,开始的开始,要先取得Https证书。你可以向证书机构申请证书,也可以自己制作根证书。创建Web配置类在代...
    99+
    2023-05-31
    spring boot https
  • spring boot项目application.properties文件存放及使用介绍
    一、方法一多环境配置文件 我们一般都会有多个应用环境,开发环境、测试环境、生产环境,各个环境的配置会略有不同,我可以根据这个创建多份配置文件,由主配置文件来控制读取那个子配置 创建...
    99+
    2024-04-02
  • 在Spring Boot中使用Spring-data-jpa实现分页查询
    在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式。1、引入起步依赖   <dependency> <gro...
    99+
    2023-05-31
    spring boot data
  • Python中,hasattr()函数的详细介绍以及使用
    引言 在Python中,hasattr()函数是一种重要的工具,用于判断对象是否具有指定的属性或方法。通过使用hasattr()函数,我们可以在运行时动态地检查对象的能力,提高代码的灵活性和可维护性。...
    99+
    2023-09-02
    python 开发语言
  • 深入浅析JPA在Spring Boot中的使用方法
    深入浅析JPA在Spring Boot中的使用方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是JPA一说JavaWeb,很多小伙伴都知道SSH,这个H代表的就是hi...
    99+
    2023-05-31
    springboot jpa
  • jpa与 kotlin如何正确的在spring boot中使用
    今天就跟大家聊聊有关 jpa与 kotlin如何正确的在spring boot中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。kotlin里面的data class来创建enti...
    99+
    2023-05-31
    springboot kotlin jpa
  • libmp3lame及API介绍和使用详解
    目录API介绍简单使用API介绍 API地址是对libmp3lame.so的编码部分最基础接口的介绍,本库特包含了增加id3标签和mp3的解码的支持。这里并不是完整的文档,但是你可以...
    99+
    2023-05-18
    libmp3lame API使用 libmp3lame API
  • Spring注解 @EventListener 的介绍与使用示例以及异常处理
    文章目录 基本概念用途事件处理条件处理器返回值异常处理异步监听器监听器排序源码 使用示例单一事件监听器使用classes实现多事件监听器使用condition筛选监听的事件有返回值的监听...
    99+
    2023-09-04
    spring java spring boot
  • 详解在Spring Boot中使用数据库事务
    我们在前面已经分别介绍了如何在spring Boot中使用JPA以及如何在Spring Boot中输出REST资源。那么关于数据库访问还有一个核心操作那就是事务的处理了,前面两篇博客小伙伴们已经见识到Spring Boot带给我们的巨大便利...
    99+
    2023-05-31
    spring boot 数据库
  • Spring Boot 使用Druid详解
    Druid是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能,下面来说明如何在 SpringBoot 中配置使用Druid。步骤: 在pom.xml中加载依赖 在application.properties中加入数据源配置...
    99+
    2023-05-31
    spring boot druid
  • MVVM和MVVMLight框架介绍及在项目中的使用详解
    一、MVVM 和 MVVMLight介绍 MVVM是Model-View-ViewModel的简写。类似于目前比较流行的MVC、MVP设计模式,主要目的是为了分离视图(View)和模...
    99+
    2024-04-02
  • sql索引的介绍以及使用规则详析
    目录1.索引概述1.1索引介绍1.2索引的优劣势2.索引结构2.1 概述3. 索引分类3.1 索引分类3.2 聚集索引&二级索引索引使用4.1索引语法4.2创建演示5.索引法则总结1.索引概述 1.1索...
    99+
    2023-04-03
    sql索引用法 sql中的索引 sql索引使用规则是什么
  • MyBatis元素resultMap介绍及使用详解
    1.resultMap resultMap 元素是 MyBatis 中最重要最强大的元素。解决类属性名和数据库中表字段名不一致问题ResultMap 的设计思想是,对简单的语句做到零...
    99+
    2024-04-02
  • Mysql数据库与JPA如何在Spring Boot项目中使用
    本篇文章为大家展示了Mysql数据库与JPA如何在Spring Boot项目中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.Maven pom.xml文件在你的项目中增加如下依赖文件<...
    99+
    2023-05-31
    springboot jpa mysql
  • KVM 介绍及作用详解
    目录一、虚拟化1、背景2、虚拟化技术介绍3、虚拟化技术发展4、虚拟化类型5、虚拟化的特性特性:二、KVM概述1、KVM简介2、KVM的作用3、KVM 虚拟化架构/三种模式4、KVM核...
    99+
    2024-04-02
  • Python 之plt.plot()的介绍以及使用
    文章目录 介绍代码实例 介绍 plt.plot() 是Matplotlib库中用于绘制线图(折线图)的主要函数之一。它的作用是将一组数据点连接起来,以可视化数据的趋势、关系或模式。以下是...
    99+
    2023-10-23
    python 开发语言
  • Spring Boot中如何使用Swagger详解
    目录Swagger 简介 配置 Swagger 添加依赖为项目开启 Swagger创建 SwaggerConfig 配置类访问 Swagger 前端页面控制器相关注解实体相关注解总结...
    99+
    2024-04-02
  • ReentrantLock介绍及使用(超详细)
    点击 Mr.绵羊的知识星球 解锁更多优质文章。 目录 一、介绍 1. 简介 2. 是什么类型的锁 3. 优点 4. 原理 5. 主要方法 6. 使用时注意事项 二、实际应用 1. 案例一 2. 案例二 一、介绍 1. 简介     ...
    99+
    2023-09-20
    java 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作