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

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

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

一、什么是JPA ‌‌

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

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

‌2.JPA的核心概念‌

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

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

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

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

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

二、JPA的使用

1.準(zhǔn)備數(shù)據(jù)庫(kù)腳本

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)入依賴(lài)

<!-- 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ù)庫(kù)做任何操作
        # update:更新schema
        # create:創(chuàng)建schema,并銷(xiāo)毀之前數(shù)據(jù)
        # create-drop:會(huì)話(huà)創(chuàng)建時(shí)創(chuàng)建schema,會(huì)話(huà)關(guān)閉時(shí)銷(xiāo)毀schema
        ddl-auto: update
      # jpa配置:在控制臺(tái)顯示Hibernate的sql(可選)
      show-sql: true

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

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

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

這里只是簡(jiǎn)單測(cè)了根據(jù)ID查詢(xún)

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

測(cè)試效果:

三、JPA的常用

1.常用注解

注解

描述

@Entity

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

@Table

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

@Id

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

@GeneratedValue

指定主鍵的生成策略。

@Column

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

@Transient

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

@Basic

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

@Temporal

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

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

@Enumerated

指定枚舉類(lèi)型的屬性映射。

@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.常用查詢(xún)方法

方法類(lèi)型

方法名稱(chēng)

描述

查詢(xún)方法

findBy/getBy/queryBy/readBy

后面跟要查詢(xún)的字段名,用于精確匹配。

find/get/query/read

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

findAll/getAll

不跟字段名,表示查詢(xún)所有記錄。

支持的關(guān)鍵字

And

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

Or

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

Between

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

LessThan/LessThanEqual

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

GreaterThan/GreaterThanEqual

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

IsNull/IsNotNull

查詢(xún)字段為空或不為空的記錄。

Like/NotLike

模糊查詢(xún)字段值。

OrderBy

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

刪除方法

deleteBy/removeBy

后面跟要查詢(xún)的字段名,用于精確匹配。

delete/remove

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

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

countBy

后面跟要查詢(xún)的字段名,用于精確匹配。

count

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

更新方法

updateBy

后面跟要查詢(xún)的字段名,用于精確匹配。

update

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

支持的關(guān)鍵字

Set

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

Where

指定更新操作的條件。

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

部分查詢(xú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)文章

  • Java ClassCastException報(bào)錯(cuò):java.util.HashSet cannot be cast to java.util.List的解決方法

    Java ClassCastException報(bào)錯(cuò):java.util.HashSet cannot

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    java中@requestMappling注解的使用

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

最新評(píng)論

潜江市| 若尔盖县| 海安县| 夏河县| 淮北市| 绵竹市| 青川县| 宜城市| 隆安县| 阜康市| 探索| 玛沁县| 务川| 上虞市| 德安县| 孝感市| 车致| 榆林市| 西乡县| 南昌市| 灵台县| 八宿县| 丹阳市| 溧阳市| 名山县| 土默特左旗| 石门县| 建阳市| 普安县| 灵丘县| 潍坊市| 阿图什市| 旬邑县| 勃利县| 龙川县| 赣榆县| 陆河县| 吉林省| 瑞金市| 固始县| 侯马市|