chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用JPA訪問(wèn)數(shù)據(jù)的過(guò)程

「Spring」認(rèn)證安全架構(gòu) ? 來(lái)源:Spring」認(rèn)證安全架構(gòu) ? 作者:Spring」認(rèn)證安全架 ? 2022-09-06 15:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本指南將引導(dǎo)您完成構(gòu)建應(yīng)用程序的過(guò)程,該應(yīng)用程序使用#spring# #spring認(rèn)證# Spring Data JPA 在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)和檢索數(shù)據(jù)。

你將建造什么

您將構(gòu)建一個(gè)將CustomerPOJO(普通舊 Java 對(duì)象)存儲(chǔ)在基于內(nèi)存的數(shù)據(jù)庫(kù)中的應(yīng)用程序。

你需要什么

  • 約15分鐘
  • 最喜歡的文本編輯器或 IDE
  • JDK 1.8或更高版本
  • Gradle 4+或Maven 3.2+
  • 您還可以將代碼直接導(dǎo)入 IDE:
    • 彈簧工具套件 (STS)
    • IntelliJ IDEA

如何完成本指南

像大多數(shù) Spring入門(mén)指南一樣,您可以從頭開(kāi)始并完成每個(gè)步驟,也可以繞過(guò)您已經(jīng)熟悉的基本設(shè)置步驟。無(wú)論哪種方式,您最終都會(huì)得到工作代碼。

從頭開(kāi)始,請(qǐng)繼續(xù)從 Spring Initializr 開(kāi)始。

跳過(guò)基礎(chǔ)知識(shí),請(qǐng)執(zhí)行以下操作:

  • 下載并解壓縮本指南的源存儲(chǔ)庫(kù),或使用Git克隆它:git clone https://github.com/spring-guides/gs-accessing-data-jpa.git
  • 光盤(pán)進(jìn)入gs-accessing-data-jpa/initial
  • 跳轉(zhuǎn)到定義一個(gè)簡(jiǎn)單實(shí)體。

完成后,您可以對(duì)照中的代碼檢查結(jié)果
gs-accessing-data-jpa/complete。

從 Spring Initializr 開(kāi)始

您可以使用這個(gè)預(yù)先初始化的項(xiàng)目并單擊 Generate 下載 ZIP 文件。此項(xiàng)目配置為適合本教程中的示例。

手動(dòng)初始化項(xiàng)目:

  1. 導(dǎo)航到https://start.spring.io。該服務(wù)提取應(yīng)用程序所需的所有依賴(lài)項(xiàng),并為您完成大部分設(shè)置。
  2. 選擇 Gradle 或 Maven 以及您要使用的語(yǔ)言。本指南假定您選擇了 Java。
  3. 單擊Dependencies并選擇Spring Data JPA,然后選擇H2 Database。
  4. 單擊生成。
  5. 下載生成的 ZIP 文件,該文件是根據(jù)您的選擇配置的 Web 應(yīng)用程序的存檔。

如果您的 IDE 具有 Spring Initializr 集成,您可以從您的 IDE 完成此過(guò)程。

你也可以從 Github 上 fork 項(xiàng)目并在你的 IDE 或其他編輯器中打開(kāi)它。

定義一個(gè)簡(jiǎn)單的實(shí)體

在此示例中,您存儲(chǔ)Customer對(duì)象,每個(gè)對(duì)象都被注釋為 JPA 實(shí)體。以下清單顯示了 Customer 類(lèi)(在 中
src/main/java/com/example/accessingdatajpa/Customer.java):

package com.example.accessingdatajpa;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Customer {

  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long id;
  private String firstName;
  private String lastName;

  protected Customer() {}

  public Customer(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  @Override
  public String toString() {
    return String.format(
        "Customer[id=%d, firstName='%s', lastName='%s']",
        id, firstName, lastName);
  }

  public Long getId() {
    return id;
  }

  public String getFirstName() {
    return firstName;
  }

  public String getLastName() {
    return lastName;
  }
}復(fù)制

這里有一個(gè)Customer具有三個(gè)屬性的類(lèi):idfirstNamelastName。您還有兩個(gè)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)的存在只是為了 JPA。您不直接使用它,因此將其指定為protected。另一個(gè)構(gòu)造函數(shù)是您用來(lái)創(chuàng)建Customer要保存到數(shù)據(jù)庫(kù)的實(shí)例的構(gòu)造函數(shù)。

該類(lèi)Customer用 注釋@Entity,表示它是一個(gè) JPA 實(shí)體。(由于不@Table存在注解,假設(shè)該實(shí)體映射到名為 的表Customer。)

Customer對(duì)象的屬性id帶有注釋?zhuān)?span style="color:rgb(0,0,153);">@Id以便 JPA 將其識(shí)別為對(duì)象的 ID。該id屬性還帶有注釋@GeneratedValue以指示應(yīng)自動(dòng)生成 ID。

其他兩個(gè)屬性firstNamelastName未注釋。假設(shè)它們被映射到與屬性本身共享相同名稱(chēng)的列。

方便的toString()方法打印出客戶(hù)的屬性。

創(chuàng)建簡(jiǎn)單查詢(xún)

Spring Data JPA 專(zhuān)注于使用 JPA 將數(shù)據(jù)存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中。它最引人注目的功能是能夠在運(yùn)行時(shí)從存儲(chǔ)庫(kù)接口自動(dòng)創(chuàng)建存儲(chǔ)庫(kù)實(shí)現(xiàn)。

要了解它是如何工作的,請(qǐng)創(chuàng)建一個(gè)與Customer實(shí)體一起使用的存儲(chǔ)庫(kù)接口,如以下清單(in
src/main/java/com/example/accessingdatajpa/CustomerRepository.java)所示:

package com.example.accessingdatajpa;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

public interface CustomerRepository extends CrudRepository {

  List findByLastName(String lastName);

  Customer findById(long id);
}復(fù)制,>

CustomerRepository擴(kuò)展CrudRepository接口。它使用的實(shí)體類(lèi)型和 IDCustomer以及Long,在通用參數(shù)中指定CrudRepository。通過(guò)擴(kuò)展CrudRepositoryCustomerRepository繼承了幾種處理Customer持久性的方法,包括保存、刪除和查找Customer實(shí)體的方法。

Spring Data JPA 還允許您通過(guò)聲明方法簽名來(lái)定義其他查詢(xún)方法。例如,CustomerRepository包括findByLastName()方法。

在典型的 Java 應(yīng)用程序中,您可能希望編寫(xiě)一個(gè)實(shí)現(xiàn)CustomerRepository. 然而,這正是 Spring Data JPA 如此強(qiáng)大的原因:您無(wú)需編寫(xiě)存儲(chǔ)庫(kù)接口的實(shí)現(xiàn)。Spring Data JPA 在您運(yùn)行應(yīng)用程序時(shí)創(chuàng)建一個(gè)實(shí)現(xiàn)。

現(xiàn)在你可以連接這個(gè)例子,看看它是什么樣子的!

創(chuàng)建應(yīng)用程序類(lèi)

Spring Initializr 為應(yīng)用程序創(chuàng)建一個(gè)簡(jiǎn)單的類(lèi)。以下清單顯示了 Initializr 為本示例創(chuàng)建的類(lèi)(在 中
src/main/java/com/example/accessingdatajpa/AccessingDataJpaApplication.java):

package com.example.accessingdatajpa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AccessingDataJpaApplication {

  public static void main(String[] args) {
    SpringApplication.run(AccessingDataJpaApplication.class, args);
  }

}復(fù)制

@SpringBootApplication是一個(gè)方便的注釋?zhuān)砑恿艘韵滤袃?nèi)容:

  • @Configuration: 將類(lèi)標(biāo)記為應(yīng)用程序上下文的 bean 定義源。
  • @EnableAutoConfiguration:告訴 Spring Boot 根據(jù)類(lèi)路徑設(shè)置、其他 bean 和各種屬性設(shè)置開(kāi)始添加 bean。例如,如果spring-webmvc位于類(lèi)路徑上,則此注釋將應(yīng)用程序標(biāo)記為 Web 應(yīng)用程序并激活關(guān)鍵行為,例如設(shè)置DispatcherServlet.
  • @ComponentScan: 告訴 Spring 在包中查找其他組件、配置和服務(wù)com/example,讓它找到控制器。

main()方法使用 Spring Boot 的SpringApplication.run()方法來(lái)啟動(dòng)應(yīng)用程序。您是否注意到?jīng)]有一行 XML?也沒(méi)有web.xml文件。這個(gè) Web 應(yīng)用程序是 100% 純 Java,您不必處理任何管道或基礎(chǔ)設(shè)施的配置。

現(xiàn)在您需要修改 Initializr 為您創(chuàng)建的簡(jiǎn)單類(lèi)。要獲得輸出(在本例中為控制臺(tái)),您需要設(shè)置一個(gè)記錄器。然后您需要設(shè)置一些數(shù)據(jù)并使用它來(lái)生成輸出。以下清單顯示了完成的
AccessingDataJpaApplication類(lèi)(在 中
src/main/java/com/example/accessingdatajpa/AccessingDataJpaApplication.java):

package com.example.accessingdatajpa;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class AccessingDataJpaApplication {

  private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class);

  public static void main(String[] args) {
    SpringApplication.run(AccessingDataJpaApplication.class);
  }

  @Bean
  public CommandLineRunner demo(CustomerRepository repository) {
    return (args) -> {
      // save a few customers
      repository.save(new Customer("Jack", "Bauer"));
      repository.save(new Customer("Chloe", "O'Brian"));
      repository.save(new Customer("Kim", "Bauer"));
      repository.save(new Customer("David", "Palmer"));
      repository.save(new Customer("Michelle", "Dessler"));

      // fetch all customers
      log.info("Customers found with findAll():");
      log.info("-------------------------------");
      for (Customer customer : repository.findAll()) {
        log.info(customer.toString());
      }
      log.info("");

      // fetch an individual customer by ID
      Customer customer = repository.findById(1L);
      log.info("Customer found with findById(1L):");
      log.info("--------------------------------");
      log.info(customer.toString());
      log.info("");

      // fetch customers by last name
      log.info("Customer found with findByLastName('Bauer'):");
      log.info("--------------------------------------------");
      repository.findByLastName("Bauer").forEach(bauer -> {
        log.info(bauer.toString());
      });
      // for (Customer bauer : repository.findByLastName("Bauer")) {
      //  log.info(bauer.toString());
      // }
      log.info("");
    };
  }

}復(fù)制

該類(lèi)
AccessingDataJpaApplication包括一個(gè)通過(guò)一些測(cè)試的demo()方法。CustomerRepository首先,它CustomerRepository從 Spring 應(yīng)用程序上下文中獲取 。然后它會(huì)保存一些Customer對(duì)象,演示該save()方法并設(shè)置一些要使用的數(shù)據(jù)。接下來(lái),它調(diào)用從數(shù)據(jù)庫(kù)findAll()中獲取所有Customer對(duì)象。然后它調(diào)用以通過(guò)其 IDfindById()獲取單個(gè)。Customer最后,它調(diào)用findByLastName()查找所有姓氏為“Bauer”的客戶(hù)。該demo()方法返回一個(gè)CommandLineRunner在應(yīng)用程序啟動(dòng)時(shí)自動(dòng)運(yùn)行代碼的 bean。

默認(rèn)情況下,Spring Boot 啟用 JPA 存儲(chǔ)庫(kù)支持并查找所在的包(及其子包)@SpringBootApplication。如果您的配置具有位于不可見(jiàn)包中的 JPA 存儲(chǔ)庫(kù)接口定義,則可以通過(guò)使用@EnableJpaRepositories及其類(lèi)型安全basePackageClasses=MyRepository.class參數(shù)指出備用包。

構(gòu)建一個(gè)可執(zhí)行的 JAR

您可以使用 Gradle 或 Maven 從命令行運(yùn)行應(yīng)用程序。您還可以構(gòu)建一個(gè)包含所有必要依賴(lài)項(xiàng)、類(lèi)和資源的單個(gè)可執(zhí)行 JAR 文件并運(yùn)行它。構(gòu)建可執(zhí)行 jar 可以在整個(gè)開(kāi)發(fā)生命周期、跨不同環(huán)境等中輕松地作為應(yīng)用程序交付、版本化和部署服務(wù)。

如果您使用 Gradle,則可以使用./gradlew bootRun. 或者,您可以使用構(gòu)建 JAR 文件./gradlew build,然后運(yùn)行 ?JAR 文件,如下所示:

java -jar build/libs/gs-accessing-data-jpa-0.1.0.jar

如果您使用 Maven,則可以使用./mvnw spring-boot:run. 或者,您可以使用構(gòu)建 JAR 文件,./mvnw clean package然后運(yùn)行該 JAR 文件,如下所示:

java -jar 目標(biāo)/gs-accessing-data-jpa-0.1.0.jar

此處描述的步驟創(chuàng)建了一個(gè)可運(yùn)行的 JAR。您還可以構(gòu)建經(jīng)典的 WAR 文件。

運(yùn)行應(yīng)用程序時(shí),您應(yīng)該會(huì)看到類(lèi)似于以下內(nèi)容的輸出:

== 使用 findAll() 找到的客戶(hù):
客戶(hù)[id=1, firstName='Jack', lastName='Bauer']
客戶(hù)[id=2, firstName='Chloe', lastName='O'Brian']
客戶(hù)[id=3, firstName='Kim', lastName='Bauer']
客戶(hù)[id=4, firstName='David', lastName='Palmer']
客戶(hù)[id=5, firstName='Michelle', lastName='Dessler']

== 使用 findById(1L) 找到客戶(hù):
客戶(hù)[id=1, firstName='Jack', lastName='Bauer']

== 使用 findByLastName('Bauer') 找到客戶(hù):
客戶(hù)[id=1, firstName='Jack', lastName='Bauer']
客戶(hù)[id=3, firstName='Kim', lastName='Bauer']

概括

恭喜!您已經(jīng)編寫(xiě)了一個(gè)簡(jiǎn)單的應(yīng)用程序,該應(yīng)用程序使用 Spring Data JPA 將對(duì)象保存到數(shù)據(jù)庫(kù)并從數(shù)據(jù)庫(kù)中獲取它們,而無(wú)需編寫(xiě)具體的存儲(chǔ)庫(kù)實(shí)現(xiàn)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3927

    瀏覽量

    66242
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3826

    瀏覽量

    82998
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    15081
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    JPA實(shí)體類(lèi)中的注解介紹

    今天給大家介紹一下 JPA 實(shí)體類(lèi)中的注解,希望能對(duì)大家有幫助。 基本注解 @Entity 標(biāo)注于實(shí)體類(lèi)聲明語(yǔ)句之前,指出該 Java 類(lèi)為實(shí)體類(lèi),將映射到指定的數(shù)據(jù)庫(kù)表。 name(可選):實(shí)體
    的頭像 發(fā)表于 09-25 14:42 ?1125次閱讀

    labvies訪問(wèn)數(shù)據(jù)庫(kù)

    LabVIEW 中利用LabSQL 訪問(wèn)數(shù)據(jù)庫(kù) 虛擬儀器VI(virtual instruments)是National Instruments 公司在其產(chǎn)品LabVIEW 中首先提出的創(chuàng)新
    發(fā)表于 08-26 10:19

    遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)時(shí)發(fā)生這樣的現(xiàn)象

    在同一局外一臺(tái)電腦上也通過(guò)labview程序進(jìn)行訪問(wèn),并且通過(guò)程序?qū)?b class='flag-5'>數(shù)據(jù)庫(kù)文件進(jìn)行操作,碰到了以上問(wèn)題,問(wèn)題在文檔里面,是兩張圖片,多指教。特別說(shuō)明:數(shù)據(jù)庫(kù)文件已經(jīng)共享,并且其只讀和隱
    發(fā)表于 10-12 11:41

    JPA分頁(yè)查詢(xún)的常用方法

    JPA分頁(yè)查詢(xún)與條件分頁(yè)查詢(xún)
    發(fā)表于 10-23 17:10

    使用jpa和thymeleaf做增刪改查示例

    【本人禿頂程序員】springboot專(zhuān)輯:springboot+jpa+thymeleaf增刪改查示例
    發(fā)表于 04-01 11:49

    springboot spring data jpa使用總結(jié)

    【本人禿頂程序員】springboot專(zhuān)輯:spring data jpa的使用
    發(fā)表于 04-15 11:38

    三種訪問(wèn)過(guò)程映像的方法

    硬實(shí)時(shí)的需求。用戶(hù)可以通過(guò)python等高級(jí)語(yǔ)言編寫(xiě)程序,并且可以通過(guò)存儲(chǔ)器中的過(guò)程映像便捷的寫(xiě)入或者讀取所有當(dāng)前過(guò)程值。本文將介紹從過(guò)程映像中訪問(wèn)
    發(fā)表于 02-02 16:40

    DataAbility的使用方法及訪問(wèn)數(shù)據(jù)庫(kù)的過(guò)程

    DataAbility介紹:使用Data模板的Ability(以下簡(jiǎn)稱(chēng)“Data”)有助于應(yīng)用管理其自身和其他應(yīng)用存儲(chǔ)數(shù)據(jù)訪問(wèn),并提供與其他應(yīng)用共享數(shù)據(jù)的方法。Data既可用于同設(shè)備不同應(yīng)用的
    發(fā)表于 04-06 10:32

    Oracle數(shù)據(jù)庫(kù)網(wǎng)絡(luò)安全訪問(wèn)機(jī)制

    本文主要分析了Oracle 客戶(hù)端通過(guò)Net8 訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器過(guò)程,闡述了Oracle 數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)訪問(wèn)機(jī)制以及Net8 在實(shí)現(xiàn)Oracl
    發(fā)表于 08-29 10:20 ?20次下載

    基于OPC的數(shù)據(jù)訪問(wèn)服務(wù)器開(kāi)發(fā)

    基于OPC的數(shù)據(jù)訪問(wèn)服務(wù)器開(kāi)發(fā)一文以針對(duì)一種PCI總線CAN通信卡設(shè)計(jì)的 OPC 數(shù)據(jù)訪問(wèn)服務(wù)器為編程實(shí)例,詳細(xì)介紹了OPC數(shù)據(jù)
    發(fā)表于 07-18 16:39 ?35次下載
    基于OPC的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>訪問(wèn)</b>服務(wù)器開(kāi)發(fā)

    基于XACML訪問(wèn)控制系統(tǒng)設(shè)計(jì)

    在云計(jì)算中用戶(hù)訪問(wèn)云計(jì)算平臺(tái)的過(guò)程實(shí)際上就是主體(云用戶(hù))訪問(wèn)客體(云計(jì)算平臺(tái))的過(guò)程。而所有用戶(hù)的數(shù)據(jù)信息均存儲(chǔ)在云計(jì)算平臺(tái)中,也就是云計(jì)
    發(fā)表于 11-09 15:05 ?4次下載
    基于XACML<b class='flag-5'>訪問(wèn)</b>控制系統(tǒng)設(shè)計(jì)

    一文詳談Spring JPA

    大家好,今天我和大家聊一下關(guān)于Spring JPA 的相關(guān)知識(shí),我們先來(lái)了解下什么是 JPA ?
    的頭像 發(fā)表于 06-30 17:29 ?2403次閱讀

    Delphi數(shù)據(jù)訪問(wèn)組件方案

    適用于任何數(shù)據(jù)庫(kù)的更快、更可靠的數(shù)據(jù)連接解決方案 Delphi 數(shù)據(jù)訪問(wèn)組件 Delphi數(shù)據(jù)訪問(wèn)
    的頭像 發(fā)表于 06-26 10:02 ?1105次閱讀
    Delphi<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>訪問(wèn)</b>組件方案

    JPA基礎(chǔ)概念

    相信大部分java小伙伴在日常開(kāi)發(fā)過(guò)程中,在存儲(chǔ)操作層都會(huì)選擇更容易上手的jpa,各種封裝,通過(guò)注解等方式,簡(jiǎn)化了大量的代碼內(nèi)容,同時(shí)提升了開(kāi)發(fā)效率,但是(敲黑板,永遠(yuǎn)都躲不開(kāi)的但是...)相應(yīng)也將
    的頭像 發(fā)表于 10-08 14:36 ?952次閱讀
    <b class='flag-5'>JPA</b>基礎(chǔ)概念

    CDN工作原理和訪問(wèn)過(guò)程

    ,源站域名,然后進(jìn)入到自己域名的DNS配置信息,將 A 記錄修改成 CNAME 記錄即可。 CDN訪問(wèn)過(guò)程 image.png 1、用戶(hù)訪問(wèn)圖片內(nèi)容,先經(jīng)過(guò) 本地DNS 解析,如果 LDNS 命中
    的頭像 發(fā)表于 10-09 15:41 ?1934次閱讀
    CDN工作原理和<b class='flag-5'>訪問(wèn)過(guò)程</b>