使用 Java 持久化 API


使用 Java 持久化 API

文章插图
 
我们通过为自行车商店构建示例应用程序来学习如何使用 JPA 。-- Stephon Brown(作者)
 
对应用开发者来说,JAVA 持久化 API(Java Persistence API)(JPA)是一项重要的 java 功能,需要透彻理解 。它为 Java 开发人员定义了如何将对象的方法调用转换为访问、持久化及管理存储在 NoSQL 和关系型数据库中的数据的方案 。
本文通过构建自行车借贷服务的教程示例来详细研究 JPA 。此示例会使用 Spring Boot 框架、MongoDB 数据库( 已经不开源 )和 Maven 包管理来构建一个大型应用程序,并且构建一个创建、读取、更新和删除(CRUD)层 。这儿我选择 NetBeans 11 作为我的 IDE 。
此教程仅从开源的角度来介绍 Java 持久化 API 的工作原理,不涉及其作为工具的使用说明 。这全是关于编写应用程序模式的学习,但对于理解具体的软件实现也很益处 。可以从我的 GitHub 仓库 来获取相关代码 。
Java: 不仅仅是“豆子”【使用 Java 持久化 API】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 的版本更新而更新 。
我们会用这组工具为一个虚构自行车商店创建一个简单的应用程序 。会实现对 Customer 和 Bike 对象集合的的插入操作 。
酿造完美导航到 Spring Initializr 页面 。该网站可以生成基于 Spring Boot 和其依赖项的基本项目 。选择以下选项:
  1. 项目: Maven 工程
  2. 语言: Java
  3. Spring Boot: 2.1.8(或最稳定版本)
  4. 项目元数据: 无论你使用什么名字,其命名约定都是像 com.stephb 这样的 。你可以保留 Artifact 名字为 “Demo” 。
  5. 依赖项: 添加:Spring Data MongoDBLombok
点击 下载,然后用你的 IDE(例如 NetBeans) 打开此新项目 。
模型层概要在项目里面,模型(model)代表从数据库里取出的信息的具体对象 。我们关注两个对象:Customer 和 Bike 。首先,在 src 目录创建 dto 目录;然后,创建两个名为 Customer.java 和 Bike.java 的 Java 类对象文件 。其结构如下示:
package com.stephb.JavaMongo.dto;import lombok.Getter;import lombok.Setter;import org.springframework.data.annotation.Id;/** * * @author stephon */@Getter @Setterpublic class Customer {private @Id String id;private String emailAddress;private String firstName;private String lastName;private String address;}Customer.Java
package com.stephb.JavaMongo.dto;import lombok.Getter;import lombok.Setter;import org.springframework.data.annotation.Id;/** * * @author stephon */@Getter @Setterpublic class Bike {private @Id String id;private String modelNumber;private String color;private String description;@Overridepublic String toString() {return "This bike model is " + this.modelNumber + " is the color " + this.color + " and is " + description;}}Bike.java
如你所见,对象中使用 Lombok 注解来为定义的 属性(properties)/ 特性(attributes)生成 getters/setters 方法 。如果你不想对该类的所有特性都生成 getters/setters 方法,可以在属性上专门定义这些注解 。这两个类会变成容器,里面携带有数据,无论在何处想显示信息都可以使用 。


推荐阅读