最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合JPA 基礎(chǔ)使用示例教程

 更新時間:2024年10月08日 09:46:36   作者:寰夢  
JPA(Java Persistence API)是Java提供的一套數(shù)據(jù)持久化標準,通過對象-關(guān)系映射(ORM)技術(shù)實現(xiàn)Java對象與數(shù)據(jù)庫表之間的映射,它提供了一系列注解和接口,簡化了數(shù)據(jù)庫操作,使得開發(fā)者可以通過操作對象來進行數(shù)據(jù)庫交互,而無需編寫復雜的SQL語句

一、什么是JPA ‌‌

1.JPA的定義和基本概念‌‌

‌JPA(Java Persistence API)‌是Java中用于進行持久化操作的一種規(guī)范,它定義了一系列用于操作關(guān)系型數(shù)據(jù)庫的API接口。通過這些接口,開發(fā)人員可以方便地進行數(shù)據(jù)庫的增刪改查等操作,而無需關(guān)注具體的數(shù)據(jù)庫操作細節(jié)。JPA通過JDK 5.0注解或XML描述對象-關(guān)系表的映射關(guān)系,并將運行期的實體對象持久化到數(shù)據(jù)庫中。

‌2.JPA的核心概念‌

JPA的核心概念包括對象-關(guān)系映射(ORM)和實體對象持久化。ORM技術(shù)是一種將對象模型和關(guān)系模型進行映射的技術(shù),通過ORM,開發(fā)人員可以將Java對象直接映射到數(shù)據(jù)庫表中,從而避免了手動編寫SQL語句的繁瑣工作。JPA提供了一套注解和配置方式,可以方便地將Java類與數(shù)據(jù)庫表進行映射,使得開發(fā)人員可以直接操作Java對象,而無需手動維護SQL語句。

‌3.JPA的用途和目標‌

JPA的目標是簡化企業(yè)應(yīng)用開發(fā),使得開發(fā)者能夠更容易地實現(xiàn)對象與數(shù)據(jù)庫表之間的映射關(guān)系。它定義了對象-關(guān)系映射(ORM)以及實體對象持久化的標準接口,旨在規(guī)范和簡化Java對象的持久化工作。通過提供統(tǒng)一的API和封裝數(shù)據(jù)庫操作細節(jié),JPA使得開發(fā)人員可以更加方便地進行數(shù)據(jù)庫操作,提高了代碼的可維護性和可讀性。

‌4.JPA的優(yōu)勢‌

使用JPA的優(yōu)勢包括提高代碼的可維護性和可讀性。通過使用JPA,開發(fā)人員可以使用面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)庫,無需直接操作SQL語句,這使得代碼更加直觀和易于理解。此外,JPA還提供了一些高級特性,如緩存管理、事務(wù)管理等,這些特性可以幫助開發(fā)人員更好地進行性能優(yōu)化和并發(fā)控制。

二、JPA的使用

1.準備數(shù)據(jù)庫腳本

DROP TABLE IF EXISTS user;
CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主鍵ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年齡',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
    PRIMARY KEY (id)
);

2.初始化數(shù)據(jù)

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

3.xml文件導入依賴

<!-- JPA框架 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

4.引入JPA配置

spring:
  jpa:
      hibernate:
        # ddl-auto 枚舉:
        # none(默認):禁用DDL處理
        # validate:驗證schema,不對數(shù)據(jù)庫做任何操作
        # update:更新schema
        # create:創(chuàng)建schema,并銷毀之前數(shù)據(jù)
        # create-drop:會話創(chuàng)建時創(chuàng)建schema,會話關(guān)閉時銷毀schema
        ddl-auto: update
      # jpa配置:在控制臺顯示Hibernate的sql(可選)
      show-sql: true

(1)加載數(shù)據(jù)庫驅(qū)動,springboot3.0開始mysql驅(qū)動改為com.mysql.cj.jdbc.Driver,而非com.mysql.jdbc.Driver。

(2)jpa底層實現(xiàn)采用hibernate,自動建表配置使用update,表示第一次創(chuàng)建schema,后續(xù)只做更新操作。

5.創(chuàng)建實體對象

import lombok.Data;
import javax.persistence.*;
@Entity
@Data
@Table(name = "user")
public class UserDO  {
    private static final long serialVersionUID = -2952735933715107252L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

6.定義Repository接口

public interface UserRepository extends JpaRepository<UserDO, Long> {
    /**
     * 根據(jù)用戶姓名查找用戶
     *
     * @param name 用戶姓名
     * @return 找到的用戶對象,如果不存在返回 null
     */
    UserDO findByName(String name);
    /**
     * 根據(jù)用戶姓名或電子郵箱查找用戶
     *
     * @param name  用戶姓名
     * @param email 用戶電子郵箱
     * @return 找到的用戶對象,如果不存在返回 null
     */
    UserDO findByNameOrEmail(String name, String email);
    /**
     * 根據(jù)用戶姓名計數(shù)用戶數(shù)量
     *
     * @param name 用戶姓名
     * @return 具有該姓名的用戶數(shù)量
     */
    Long countByName(String name);
    /**
     * 根據(jù)用戶名進行模糊搜索
     *
     * @param name 用戶姓名(可以包含通配符)
     * @return 匹配的用戶列表
     */
    List<UserDO> findByNameLike(String name);
    /**
     * 根據(jù)用戶姓名忽略大小寫查找用戶
     *
     * @param name 用戶姓名
     * @return 找到的用戶對象,如果不存在返回 null
     */
    UserDO findByNameIgnoreCase(String name);
    /**
     * 根據(jù)用戶姓名查找用戶,并按年齡降序排列
     *
     * @param name 用戶姓名
     * @return 匹配的用戶列表,按年齡降序排列
     */
    List<UserDO> findByNameContainingOrderByAgeDesc(String name);
    /**
     * 根據(jù)用戶姓名進行分頁查詢
     *
     * @param name     用戶姓名
     * @param pageable 分頁信息
     * @return 包含用戶對象的分頁結(jié)果
     */
    Page<UserDO> findByName(String name, Pageable pageable);
}

注:Repository接口用于定義對實體對象UserDO進行持久化操作的方法。

7.創(chuàng)建controller層調(diào)用Repository接口方法

這里只是簡單測了根據(jù)ID查詢

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserRepository userRepository;
    /**
     * 測試單條查詢
     */
    @GetMapping("/id")
    public void testSelectOne() {
        // 從 UserRepository 中查找 ID 為 1 的用戶
        Optional<UserDO> user = userRepository.findById(1L);
        System.out.println(user);
    }
}

測試效果:

三、JPA的常用

1.常用注解

注解

描述

@Entity

聲明該類為實體類。

@Table

指定實體類映射的數(shù)據(jù)庫表,通常與@Entity注解一起使用。

@Id

聲明實體類的屬性或字段作為數(shù)據(jù)庫表的主鍵。

@GeneratedValue

指定主鍵的生成策略。

@Column

用于標注實體類中的屬性與數(shù)據(jù)庫表中的字段之間的映射關(guān)系。

@Transient

聲明實體類的屬性或字段不是持久化的。

@Basic

指定實體類屬性的存取策略。

@Temporal

指定java.util.Date或java.util.Calendar

屬性映射到數(shù)據(jù)庫類型時的時間精度。

@Enumerated

指定枚舉類型的屬性映射。

@OneToOne

指定一對一的關(guān)聯(lián)映射。

@OneToMany

指定一對多的關(guān)聯(lián)映射。

@ManyToOne

指定多對一的關(guān)聯(lián)映射。

@ManyToMany

指定多對多的關(guān)聯(lián)映射。

@JoinColumn

指定關(guān)聯(lián)的外鍵列。

@MapKey

指定映射關(guān)系中的鍵。

2.常用查詢方法

方法類型

方法名稱

描述

查詢方法

findBy/getBy/queryBy/readBy

后面跟要查詢的字段名,用于精確匹配。

find/get/query/read

后面跟要查詢的字段名,使用條件表達式進行模糊匹配。

findAll/getAll

不跟字段名,表示查詢所有記錄。

支持的關(guān)鍵字

And

連接多個查詢條件,相當于 SQL 中的 AND。

Or

連接多個查詢條件,相當于 SQL 中的 OR。

Between

查詢字段在某個范圍內(nèi)的記錄。

LessThan/LessThanEqual

查詢字段小于或小于等于某個值的記錄。

GreaterThan/GreaterThanEqual

查詢字段大于或大于等于某個值的記錄。

IsNull/IsNotNull

查詢字段為空或不為空的記錄。

Like/NotLike

模糊查詢字段值。

OrderBy

指定查詢結(jié)果的排序方式。

刪除方法

deleteBy/removeBy

后面跟要查詢的字段名,用于精確匹配。

delete/remove

后面跟要查詢的字段名,使用條件表達式進行模糊匹配。

統(tǒng)計方法

countBy

后面跟要查詢的字段名,用于精確匹配。

count

不跟字段名,表示統(tǒng)計所有記錄數(shù)。

更新方法

updateBy

后面跟要查詢的字段名,用于精確匹配。

update

后面跟要查詢的字段名,使用條件表達式進行模糊匹配。

支持的關(guān)鍵字

Set

設(shè)置要更新的字段的值。

Where

指定更新操作的條件。

 3.部分查詢關(guān)鍵字映射示例

部分查詢關(guān)鍵字映射示例

關(guān)鍵字

使用示例

And

findByLastnameAndFirstname

Or

findByLastnameOrFirstname

Is,Equals

findByFirstnameIs,findByFirstnameEquals

Between

findByStartDateBetween

LessThan

findByAgeLessThan

LessThanEqual

findByAgeLessThanEqual

GreaterThan

findByAgeGreaterThan

GreaterThanEqual

findByAgeGreaterThanEqual

After

findByStartDateAfter

Before

findByStartDateBefore

IsNull

findByAgeIsNull

IsNotNull,NotNull

findByAge(Is)NotNull

Like

findByFirstnameLike

NotLike

findByFirstnameNotLike

StartingWith

findByFirstnameStartingWith

EndingWith

findByFirstnameEndingWith

Containing

findByFirstnameContaining

OrderBy

findByAgeOrderByLastnameDesc

Not

findByLastnameNot

In

findByAgeIn(Collection ages)

NotIn

findByAgeNotIn(Collection ages)

TRUE

findByActiveTrue()

FALSE

findByActiveFalse()

IgnoreCase

findByFirstnameIgnoreCase

到此這篇關(guān)于SpringBoot整合JPA 基礎(chǔ)使用的文章就介紹到這了,更多相關(guān)SpringBoot整合JPA 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java ClassCastException報錯:java.util.HashSet cannot be cast to java.util.List的解決方法

    Java ClassCastException報錯:java.util.HashSet cannot

    這篇文章主要來帶大家分析一下Java開發(fā)中常見的ClassCastException異常,當試圖將HashSet強制轉(zhuǎn)換為List時會拋出java.util.HashSet cannot be cast to java.util.List,下面我們來看看具體怎么解決吧
    2026-02-02
  • SpringBoot圖文并茂講解登錄攔截器

    SpringBoot圖文并茂講解登錄攔截器

    其實spring boot攔截器的配置方式和springMVC差不多,只有一些小的改變需要注意下就ok了,下面這篇文章主要給大家介紹了關(guān)于如何在Springboot實現(xiàn)登陸攔截器功能的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • BeanUtils.copyProperties復制屬性失敗的原因及解決方案

    BeanUtils.copyProperties復制屬性失敗的原因及解決方案

    這篇文章主要介紹了BeanUtils.copyProperties復制屬性失敗的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式

    springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式

    這篇文章主要介紹了springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • JDK源碼之線程并發(fā)協(xié)調(diào)神器CountDownLatch和CyclicBarrier詳解

    JDK源碼之線程并發(fā)協(xié)調(diào)神器CountDownLatch和CyclicBarrier詳解

    我一直認為程序是對于現(xiàn)實世界的邏輯描述,而在現(xiàn)實世界中很多事情都需要各方協(xié)調(diào)合作才能完成,就好比完成一個平臺的交付不可能只靠一個人,而需要研發(fā)、測試、產(chǎn)品以及項目經(jīng)理等不同角色人員進行通力合作才能完成最終的交付
    2022-02-02
  • SpringBoot集成Druid實現(xiàn)監(jiān)控功能的示例代碼

    SpringBoot集成Druid實現(xiàn)監(jiān)控功能的示例代碼

    這篇文章主要介紹了SpringBoot集成Druid實現(xiàn)監(jiān)控功能,Druid是阿里巴巴開發(fā)的號稱為監(jiān)控而生的數(shù)據(jù)庫連接池,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,天生就是針對監(jiān)控而生的DB連接池,文中通過代碼示例講解非常詳細,需要的朋友可以參考下
    2024-02-02
  • Spring深入分析講解BeanUtils的實現(xiàn)

    Spring深入分析講解BeanUtils的實現(xiàn)

    java知識體系統(tǒng)有很多數(shù)據(jù)實體,比較常用的DTO、BO、DO、VO等,其他類似POJO概念太老了現(xiàn)在基本廢棄掉了,本篇幅直接忽略,對于這幾種數(shù)據(jù)實體各自代表的含義和應(yīng)用場景先做一下簡單描述和分析
    2022-06-06
  • Java中BeanUtils.copyProperties的11個坑總結(jié)

    Java中BeanUtils.copyProperties的11個坑總結(jié)

    我們?nèi)粘i_發(fā)中,經(jīng)常涉及到DO、DTO、VO對象屬性拷貝賦值,很容易想到org.springframework.beans.BeanUtils的copyProperties,它會自動通過反射機制獲取源對象和目標對象的屬性,pyProperties,會有好幾個坑呢,本文將給大家總結(jié)一下遇到的坑,需要的朋友可以參考下
    2023-05-05
  • Mybatis如何使用注解優(yōu)化代碼

    Mybatis如何使用注解優(yōu)化代碼

    這篇文章主要介紹了Mybatis如何使用注解優(yōu)化代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • java中@requestMappling注解的使用

    java中@requestMappling注解的使用

    本文主要介紹了java中@requestMappling注解的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01

最新評論

双柏县| 垣曲县| 嘉荫县| 雷州市| 沙坪坝区| 岑巩县| 白水县| 鹤峰县| 景谷| 沙坪坝区| 周口市| 莱州市| 白银市| 循化| 伊春市| 正定县| 科技| 定南县| 延川县| 成武县| 通许县| 南涧| 白水县| 永春县| 临猗县| 盐津县| 山西省| 疏附县| 正镶白旗| 安化县| 佳木斯市| 安义县| 安图县| 蒙山县| 辽源市| 光山县| 曲水县| 扎兰屯市| 文昌市| 微博| 灌阳县|