成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Java持久化API

開發 后端
本文通過構建自行車借貸服務的教程示例來詳細研究 JPA。

[[287074]]

 我們通過為自行車商店構建示例應用程序來學習如何使用 JPA。

對應用開發者來說,Java 持久化 APIJava Persistence API(JPA)是一項重要的 java 功能,需要透徹理解。它為 Java 開發人員定義了如何將對象的方法調用轉換為訪問、持久化及管理存儲在 NoSQL 和關系型數據庫中的數據的方案。

本文通過構建自行車借貸服務的教程示例來詳細研究 JPA。此示例會使用 Spring Boot 框架、MongoDB 數據庫(已經不開源)和 Maven 包管理來構建一個大型應用程序,并且構建一個創建、讀取、更新和刪除(CRUD)層。這兒我選擇 NetBeans 11 作為我的 IDE。

此教程僅從開源的角度來介紹 Java 持久化 API 的工作原理,不涉及其作為工具的使用說明。這全是關于編寫應用程序模式的學習,但對于理解具體的軟件實現也很益處。可以從我的 GitHub 倉庫來獲取相關代碼。

Java: 不僅僅是“豆子”

Java 是一門面向對象的編程語言,自 1996 年發布第一版 Java 開發工具(JDK)起,已經變化了很多很多。要了解其各種發展及其虛擬機本身就是一堂歷史課。簡而言之,和 Linux 內核很相似,自發布以來,該語言已經向多個方向分支發展。有對社區免費的標準版本、有針對企業的企業版本及由多家供應商提供的開源替代品。主要版本每六個月發布一次,其功能往往差異很大,所以確認選用版本前得先做些研究。

總而言之,Java 的歷史很悠久。本教程重點介紹 Java 11 的開源實現 JDK 11。因其是仍然有效的長期支持版本之一。

  • Spring Boot 是由 Pivotal 公司開發的大型 Spring 框架的一個模塊。Spring 是 Java 開發中一個非常流行的框架。它支持各種框架和配置,也為 WEB 應用程序及安全提供了保障。Spring Boot 為快速構建各種類型的 Java 項目提供了基本的配置。本教程使用 Spring Boot 來快速編寫控制臺應用程序并針對數據庫編寫測試用例。
  • Maven 是由 Apache 開發的項目/包管理工具。Maven 通過 POM.xml 文件來管理包及其依賴項。如果你使用過 NPM 的話,可能會非常熟悉包管理器的功能。此外 Maven 也用來進行項目構建及生成功能報告。
  • Lombok 是一個庫,它通過在對象文件里面添加注解來自動創建 getters/setters 方法。像 C# 這些語言已經實現了此功能,Lombok 只是把此功能引入 Java 語言而已。
  • NetBeans 是一款很流行的開源 IDE,專門用于 Java 開發。它的許多工具都隨著 Java SE 和 EE 的版本更新而更新。

我們會用這組工具為一個虛構自行車商店創建一個簡單的應用程序。會實現對 CustomerBike 對象集合的的插入操作。

釀造完美

導航到 Spring Initializr 頁面。該網站可以生成基于 Spring Boot 和其依賴項的基本項目。選擇以下選項:

  1. 項目: Maven 工程
  2. 語言: Java
  3. Spring Boot: 2.1.8(或最穩定版本)
  4. 項目元數據: 無論你使用什么名字,其命名約定都是像 com.stephb 這樣的。
    • 你可以保留 Artifact 名字為 “Demo”。
  5. 依賴項: 添加:
    • Spring Data MongoDB
    • Lombok

點擊 下載,然后用你的 IDE(例如 NetBeans) 打開此新項目。

模型層概要

在項目里面,模型model代表從數據庫里取出的信息的具體對象。我們關注兩個對象:CustomerBike。首先,在 src 目錄創建 dto 目錄;然后,創建兩個名為 Customer.javaBike.java 的 Java 類對象文件。其結構如下示:

  1. package com.stephb.JavaMongo.dto;
  2.  
  3. import lombok.Getter;
  4. import lombok.Setter;
  5. import org.springframework.data.annotation.Id;
  6.  
  7. /**
  8. *
  9. * @author stephon
  10. */
  11. @Getter @Setter
  12. public class Customer {
  13.  
  14. private @Id String id;
  15. private String emailAddress;
  16. private String firstName;
  17. private String lastName;
  18. private String address;
  19. }

Customer.Java

  1. package com.stephb.JavaMongo.dto;
  2.  
  3. import lombok.Getter;
  4. import lombok.Setter;
  5. import org.springframework.data.annotation.Id;
  6.  
  7. /**
  8. *
  9. * @author stephon
  10. */
  11. @Getter @Setter
  12. public class Bike {
  13. private @Id String id;
  14. private String modelNumber;
  15. private String color;
  16. private String description;
  17.  
  18. @Override
  19. public String toString() {
  20. return "This bike model is " + this.modelNumber + " is the color " + this.color + " and is " + description;
  21. }
  22. }

Bike.java

如你所見,對象中使用 Lombok 注解來為定義的屬性properties/特性attributes生成 getters/setters 方法。如果你不想對該類的所有特性都生成 getters/setters 方法,可以在屬性上專門定義這些注解。這兩個類會變成容器,里面攜帶有數據,無論在何處想顯示信息都可以使用。

配置數據庫

我使用 Mongo Docker 容器來進行此次測試。如果你的系統上已經安裝了 MongoDB,則不必運行 Docker 實例。你也可以登錄其官網,選擇系統信息,然后按照安裝說明來安裝 MongoDB。

安裝后,就可以使用命令行、GUI(例如 MongoDB Compass)或用于連接數據源的 IDE 驅動程序來與新的 MongoDB 服務器進行交互。到目前為止,可以開始定義數據層了,用來拉取、轉換和持久化數據。需要設置數據庫訪問屬性,請導航到程序中的 applications.properties 文件,然后添加如下內容:

  1. spring.data.mongodb.host=localhost
  2. spring.data.mongodb.port=27017
  3. spring.data.mongodb.database=BikeStore

定義數據訪問對象/數據訪問層

數據訪問層data access layer(DAL)中的數據訪問對象data access objects(DAO)定義了與數據庫中的數據的交互過程。令人驚嘆的就是在使用 spring-boot-starter 后,查詢數據庫的大部分工作已經完成。

讓我們從 Customer DAO 開始。在 src 下的新目錄 dao 中創建一個接口文件,然后再創建一個名為 CustomerRepository.java 的 Java 類文件,其內容如下示:

  1. package com.stephb.JavaMongo.dao;
  2.  
  3. import com.stephb.JavaMongo.dto.Customer;
  4. import java.util.List;
  5. import org.springframework.data.mongodb.repository.MongoRepository;
  6.  
  7. /**
  8. *
  9. * @author stephon
  10. */
  11. public interface CustomerRepository extends MongoRepository<Customer, String>{
  12. @Override
  13. public List<Customer> findAll();
  14. public List<Customer> findByFirstName(String firstName);
  15. public List<Customer> findByLastName(String lastName);
  16. }

這個類是一個接口,擴展或繼承于 MongoRepository 類,而 MongoRepository 類依賴于 DTO (Customer.java)和一個字符串,它們用來實現自定義函數查詢功能。因為你已繼承自此類,所以你可以訪問許多方法函數,這些函數允許持久化和查詢對象,而無需實現或引用自己定義的方法函數。例如,在實例化 CustomerRepository 對象后,你就可以直接使用 Save 函數。如果你需要擴展更多的功能,也可以重寫這些函數。我創建了一些自定義查詢來搜索我的集合,這些集合對象是我自定義的元素。

Bike 對象也有一個存儲源負責與數據庫交互。與 CustomerRepository 的實現非常類似。其實現如下所示:

  1. package com.stephb.JavaMongo.dao;
  2.  
  3. import com.stephb.JavaMongo.dto.Bike;
  4. import java.util.List;
  5. import org.springframework.data.mongodb.repository.MongoRepository;
  6.  
  7. /**
  8. *
  9. * @author stephon
  10. */
  11. public interface BikeRepository extends MongoRepository<Bike,String>{
  12. public Bike findByModelNumber(String modelNumber);
  13. @Override
  14. public List<Bike> findAll();
  15. public List<Bike> findByColor(String color);
  16. }

運行程序

現在,你已經有了一種結構化數據的方式,可以對數據進行提取、轉換和持久化,然后運行這個程序。

找到 Application.java 文件(有可能不是此名稱,具體取決于你的應用程序名稱,但都會包含有 “application” )。在定義此類的地方,在后面加上 implements CommandLineRunner。這將允許你實現 run 方法來創建命令行應用程序。重寫 CommandLineRunner 接口提供的 run 方法,并包含如下內容用來測試 BikeRepository

  1. package com.stephb.JavaMongo;
  2.  
  3. import com.stephb.JavaMongo.dao.BikeRepository;
  4. import com.stephb.JavaMongo.dao.CustomerRepository;
  5. import com.stephb.JavaMongo.dto.Bike;
  6. import java.util.Scanner;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.boot.CommandLineRunner;
  9. import org.springframework.boot.SpringApplication;
  10. import org.springframework.boot.autoconfigure.SpringBootApplication;
  11.  
  12.  
  13. @SpringBootApplication
  14. public class JavaMongoApplication implements CommandLineRunner {
  15. @Autowired
  16. private BikeRepository bikeRepo;
  17. private CustomerRepository custRepo;
  18. public static void main(String[] args) {
  19. SpringApplication.run(JavaMongoApplication.class, args);
  20. }
  21. @Override
  22. public void run(String... args) throws Exception {
  23. Scanner scan = new Scanner(System.in);
  24. String response = "";
  25. boolean running = true;
  26. while(running){
  27. System.out.println("What would you like to create? \n C: The Customer \n B: Bike? \n X:Close");
  28. response = scan.nextLine();
  29. if ("B".equals(response.toUpperCase())) {
  30. String[] bikeInformation = new String[3];
  31. System.out.println("Enter the information for the Bike");
  32. System.out.println("Model Number");
  33. bikeInformation[0] = scan.nextLine();
  34. System.out.println("Color");
  35. bikeInformation[1] = scan.nextLine();
  36. System.out.println("Description");
  37. bikeInformation[2] = scan.nextLine();
  38.  
  39. Bike bike = new Bike();
  40. bike.setModelNumber(bikeInformation[0]);
  41. bike.setColor(bikeInformation[1]);
  42. bike.setDescription(bikeInformation[2]);
  43.  
  44. bike = bikeRepo.save(bike);
  45. System.out.println(bike.toString());
  46.  
  47.  
  48. } else if ("X".equals(response.toUpperCase())) {
  49. System.out.println("Bye");
  50. running = false;
  51. } else {
  52. System.out.println("Sorry nothing else works right now!");
  53. }
  54. }
  55. }
  56. }

其中的 @Autowired 注解會自動依賴注入 BikeRepositoryCustomerRepository Bean。我們將使用這些類來從數據庫持久化和采集數據。

已經好了。你已經創建了一個命令行應用程序。該應用程序連接到數據庫,并且能夠以最少的代碼執行 CRUD 操作

結論

從諸如對象和類之類的編程語言概念轉換為用于在數據庫中存儲、檢索或更改數據的調用對于構建應用程序至關重要。Java 持久化 API(JPA)正是為 Java 開發人員解決這一難題的重要工具。你正在使用 Java 操縱哪些數據庫呢?請在評論中分享。


 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2013-09-12 14:56:02

iOS持久化

2022-08-22 07:58:14

容器云存儲開發

2025-01-16 14:03:35

Redis

2017-08-03 15:44:22

2024-03-26 00:03:08

Redis數據RDB

2023-11-26 09:06:46

2023-08-29 07:34:43

Mimir微服務

2021-03-18 08:18:15

ZooKeeper數據持久化

2023-10-12 13:01:29

Redis數據庫

2020-03-03 14:15:49

Redis持久化數據庫

2009-06-01 13:26:37

持久化規范JPAJava

2010-06-11 09:46:36

Java框架DataNucleusJDO

2017-10-20 15:25:17

DockerOpenStack Cvolume

2009-08-26 18:05:25

ViewState持久

2009-09-29 16:46:01

創建Hibernate

2023-05-11 09:12:35

RedisRDB日志

2020-02-18 16:14:33

RedisRDBAOF

2009-09-28 15:50:53

Hibernate創建持久化Product

2009-09-25 17:19:28

Hibernate持久

2022-11-29 08:05:48

KubernetesPVCSI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久免费看 | 91在线视频观看 | 午夜精品久久久久久久久久久久久 | 久草中文在线 | 亚洲精品乱码久久久久久9色 | 亚洲一区二区三区免费在线 | 亚洲一区二区三区免费在线观看 | 成人午夜在线视频 | 91欧美激情一区二区三区成人 | 天天天天天天操 | 美女视频久久 | 亚洲淫视频 | 蜜桃av鲁一鲁一鲁一鲁 | aaaa网站 | 狠狠色网| 99av成人精品国语自产拍 | av中文字幕在线观看 | 不卡的av在线| 欧美日韩一二三区 | 婷婷丁香激情 | 不卡一区二区三区四区 | 欧美一区二区三区在线观看 | 久久高清国产 | 成人午夜免费在线视频 | 色综合激情 | 国产精品久久久久aaaa九色 | 国产成人精品一区二区三区 | 三级av免费 | 午夜精品久久久久久久久久久久久 | 日本免费一区二区三区四区 | 一区二区三区四区av | 成人网在线观看 | 一区二区在线不卡 | 久久久久亚洲精品 | 欧美电影一区 | 亚洲综合天堂 | 欧美一区二区三区,视频 | 久久久久91| 久草欧美 | 天天综合干 | 一区二区高清不卡 |