使用 Java 持久化 API( 二 )


配置数据库我使用 Mongo Docker 容器来进行此次测试 。如果你的系统上已经安装了 MongoDB,则不必运行 Docker 实例 。你也可以登录其官网,选择系统信息,然后按照安装说明来安装 MongoDB 。
安装后,就可以使用命令行、GUI(例如 MongoDB Compass)或用于连接数据源的 IDE 驱动程序来与新的 MongoDB 服务器进行交互 。到目前为止,可以开始定义数据层了,用来拉取、转换和持久化数据 。需要设置数据库访问属性,请导航到程序中的 Applications.properties 文件,然后添加如下内容:
spring.data.mongodb.host=localhostspring.data.mongodb.port=27017spring.data.mongodb.database=BikeStore定义数据访问对象/数据访问层数据访问层(data access layer)(DAL)中的 数据访问对象(data access objects)(DAO)定义了与数据库中的数据的交互过程 。令人惊叹的就是在使用 spring-boot-starter 后,查询数据库的大部分工作已经完成 。
让我们从 Customer DAO 开始 。在 src 下的新目录 dao 中创建一个接口文件,然后再创建一个名为 CustomerRepository.java 的 Java 类文件,其内容如下示:
package com.stephb.JavaMongo.dao;import com.stephb.JavaMongo.dto.Customer;import java.util.List;import org.springframework.data.mongodb.repository.MongoRepository;/** * * @author stephon */public interface CustomerRepository extends MongoRepository<Customer, String>{@Overridepublic List<Customer> findAll();public List<Customer> findByFirstName(String firstName);public List<Customer> findByLastName(String lastName);}这个类是一个接口,扩展或继承于 MongoRepository 类,而 MongoRepository 类依赖于 DTO (Customer.java)和一个字符串,它们用来实现自定义函数查询功能 。因为你已继承自此类,所以你可以访问许多方法函数,这些函数允许持久化和查询对象,而无需实现或引用自己定义的方法函数 。例如,在实例化 CustomerRepository 对象后,你就可以直接使用 Save 函数 。如果你需要扩展更多的功能,也可以重写这些函数 。我创建了一些自定义查询来搜索我的集合,这些集合对象是我自定义的元素 。
Bike 对象也有一个存储源负责与数据库交互 。与 CustomerRepository 的实现非常类似 。其实现如下所示:
package com.stephb.JavaMongo.dao;import com.stephb.JavaMongo.dto.Bike;import java.util.List;import org.springframework.data.mongodb.repository.MongoRepository;/** * * @author stephon */public interface BikeRepository extends MongoRepository<Bike,String>{public Bike findByModelNumber(String modelNumber);@Overridepublic List<Bike> findAll();public List<Bike> findByColor(String color);}运行程序现在,你已经有了一种结构化数据的方式,可以对数据进行提取、转换和持久化,然后运行这个程序 。
找到 Application.java 文件(有可能不是此名称,具体取决于你的应用程序名称,但都会包含有 “application” ) 。在定义此类的地方,在后面加上 implements CommandLineRunner 。这将允许你实现 run 方法来创建命令行应用程序 。重写 CommandLineRunner 接口提供的 run 方法,并包含如下内容用来测试 BikeRepository :
package com.stephb.JavaMongo;import com.stephb.JavaMongo.dao.BikeRepository;import com.stephb.JavaMongo.dao.CustomerRepository;import com.stephb.JavaMongo.dto.Bike;import java.util.Scanner;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class JavaMongoApplication implements CommandLineRunner {@Autowiredprivate BikeRepository bikeRepo;private CustomerRepository custRepo;public static void main(String[] args) {SpringApplication.run(JavaMongoApplication.class, args);}@Overridepublic void run(String... args) throws Exception {Scanner scan = new Scanner(System.in);String response = "";boolean running = true;while(running){System.out.println("What would you like to create? n C: The Customer n B: Bike? n X:Close");response = scan.nextLine();if ("B".equals(response.toUpperCase())) {String[] bikeInformation = new String[3];System.out.println("Enter the information for the Bike");System.out.println("Model Number");bikeInformation[0] = scan.nextLine();System.out.println("Color");bikeInformation[1] = scan.nextLine();System.out.println("Description");bikeInformation[2] = scan.nextLine();Bike bike = new Bike();bike.setModelNumber(bikeInformation[0]);bike.setColor(bikeInformation[1]);bike.setDescription(bikeInformation[2]);bike = bikeRepo.save(bike);System.out.println(bike.toString());} else if ("X".equals(response.toUpperCase())) {System.out.println("Bye");running = false;} else {System.out.println("Sorry nothing else works right now!");}}}}


推荐阅读