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

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

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

一、什么是JPA ‌‌

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

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

‌2.JPA的核心概念‌

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

‌3.JPA的用途和目標(biāo)‌

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

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

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

二、JPA的使用

1.準(zhǔn)備數(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文件導(dǎo)入依賴

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

4.引入JPA配置

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

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

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

5.創(chuàng)建實(shí)體對(duì)象

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

注:Repository接口用于定義對(duì)實(shí)體對(duì)象UserDO進(jìn)行持久化操作的方法。

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

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

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

測(cè)試效果:

三、JPA的常用

1.常用注解

注解

描述

@Entity

聲明該類為實(shí)體類。

@Table

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

@Id

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

@GeneratedValue

指定主鍵的生成策略。

@Column

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

@Transient

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

@Basic

指定實(shí)體類屬性的存取策略。

@Temporal

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

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

@Enumerated

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

@OneToOne

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

@OneToMany

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

@ManyToOne

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

@ManyToMany

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

@JoinColumn

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

@MapKey

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

2.常用查詢方法

方法類型

方法名稱

描述

查詢方法

findBy/getBy/queryBy/readBy

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

find/get/query/read

后面跟要查詢的字段名,使用條件表達(dá)式進(jìn)行模糊匹配。

findAll/getAll

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

支持的關(guān)鍵字

And

連接多個(gè)查詢條件,相當(dāng)于 SQL 中的 AND。

Or

連接多個(gè)查詢條件,相當(dāng)于 SQL 中的 OR。

Between

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

LessThan/LessThanEqual

查詢字段小于或小于等于某個(gè)值的記錄。

GreaterThan/GreaterThanEqual

查詢字段大于或大于等于某個(gè)值的記錄。

IsNull/IsNotNull

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

Like/NotLike

模糊查詢字段值。

OrderBy

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

刪除方法

deleteBy/removeBy

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

delete/remove

后面跟要查詢的字段名,使用條件表達(dá)式進(jìn)行模糊匹配。

統(tǒng)計(jì)方法

countBy

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

count

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

更新方法

updateBy

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

update

后面跟要查詢的字段名,使用條件表達(dá)式進(jìn)行模糊匹配。

支持的關(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解SpringMVC組件之HandlerMapping(一)

    詳解SpringMVC組件之HandlerMapping(一)

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

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

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

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

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

    Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解

    這篇文章主要介紹了Netty之使用DelimiterBasedFrameDecoder進(jìn)行消息分隔詳解,在使用Netty進(jìn)行TCP消息傳輸時(shí),為了上層協(xié)議能夠?qū)ο⒄_區(qū)分,避免粘包和拆包導(dǎo)致的問題,一般可以通過消息定長、將回車換行符作為消息結(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è)界被公認(rèn)為最好的java開發(fā)工具之一,今天通過本文給大家介紹idea2021.3.1激活及使用教程,感興趣的朋友一起看看吧
    2022-01-01
  • JDK源碼之Vector與HashSet解析

    JDK源碼之Vector與HashSet解析

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

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(47)

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

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

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

    C# TreeNode案例詳解

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

    SpringBoot微信消息接口配置詳解

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

最新評(píng)論