欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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è)應用開發(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還提供了一些高級特性,如緩存管理、事務管理等,這些特性可以幫助開發(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)文章

  • 詳解SpringMVC組件之HandlerMapping(一)

    詳解SpringMVC組件之HandlerMapping(一)

    這篇文章主要介紹了詳解SpringMVC組件之HandlerMapping(一),HandlerMapping組件是Spring?MVC核心組件,用來根據(jù)請求的request查找對應的Handler,在Spring?MVC中,有各式各樣的Web請求,每個請求都需要一個對應的Handler來處理,需要的朋友可以參考下
    2023-08-08
  • java高級用法之綁定CPU的線程Thread?Affinity簡介

    java高級用法之綁定CPU的線程Thread?Affinity簡介

    java線程thread affinity是用來將java代碼中的線程綁定到CPU特定的核上,用來提升程序運行的性能,這篇文章主要介紹了java高級用法之綁定CPU的線程thread affinity的相關(guān)知識,需要的朋友可以參考下
    2022-05-05
  • Java8日期類LocalDate、LocalTime和LocalDateTime使用方法詳解

    Java8日期類LocalDate、LocalTime和LocalDateTime使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Java8日期類LocalDate、LocalTime和LocalDateTime使用方法的相關(guān)資料,LocalDateTime是JDK1.8出現(xiàn)的新特性,解決線程不安全的問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Netty之使用DelimiterBasedFrameDecoder進行消息分隔詳解

    Netty之使用DelimiterBasedFrameDecoder進行消息分隔詳解

    這篇文章主要介紹了Netty之使用DelimiterBasedFrameDecoder進行消息分隔詳解,在使用Netty進行TCP消息傳輸時,為了上層協(xié)議能夠?qū)ο⒄_區(qū)分,避免粘包和拆包導致的問題,一般可以通過消息定長、將回車換行符作為消息結(jié)束符,需要的朋友可以參考下
    2023-12-12
  • IDEA?2021.3?使用及idea2021.3.1激活使用方法

    IDEA?2021.3?使用及idea2021.3.1激活使用方法

    IDEA?全稱?IntelliJ?IDEA,是java語言開發(fā)的集成環(huán)境,IntelliJ在業(yè)界被公認為最好的java開發(fā)工具之一,今天通過本文給大家介紹idea2021.3.1激活及使用教程,感興趣的朋友一起看看吧
    2022-01-01
  • JDK源碼之Vector與HashSet解析

    JDK源碼之Vector與HashSet解析

    HashSet、HashMap、ArrayList、LinkedList、Vector這幾個在Java編程中經(jīng)常用到,他們之間有很多聯(lián)系,有很多相通的地方,我們這次先了解一下Vector與HashSet
    2021-06-06
  • Java日常練習題,每天進步一點點(47)

    Java日常練習題,每天進步一點點(47)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • 微服務?Spring?Boot?整合?Redis?BitMap?實現(xiàn)?簽到與統(tǒng)計功能

    微服務?Spring?Boot?整合?Redis?BitMap?實現(xiàn)?簽到與統(tǒng)計功能

    這篇文章主要介紹了微服務?Spring?Boot?整合?Redis?BitMap?實現(xiàn)?簽到與統(tǒng)計功能,文章簡單介紹了Redis BitMap 基本用法結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • C# TreeNode案例詳解

    C# TreeNode案例詳解

    這篇文章主要介紹了C# TreeNode案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot微信消息接口配置詳解

    SpringBoot微信消息接口配置詳解

    這篇文章主要介紹了SpringBoot 微信消息接口配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-06-06

最新評論