NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Jakarta NoSQL 介绍

  • 2019-10-31
  • 本文字数:2526 字

    阅读完需:约 8 分钟

Jakarta NoSQL介绍

Jakarta NoSQL 是 Jakarta EE 中的一个规范, 最近被批准为 EE4J 项目,它可以帮助开发人员使用 Java 和 NoSQL 技术来创建企业级的应用程序。JNoSQL 是 Jakarta NoSQL 的参考实现,它为一系列 NoSQL 数据库(如CassandraMongoDBNeo4JCouchDBOrientDB等)提供了一组 API 和一个标准实现。


Jakarta NoSQL 是由通信层(Diana)组成的,它提供了一组用于定义与 NoSQL 数据库通信的 API。根据 NoSQL 数据库的不同类型,它包含了四个模块:键值(Key-Value)、列族(Column Family)、文档(Document)和图(Graph);映射层(Artemis)提供了一系列 API 来帮助开发人员将 Java 应用程序与 NoSQL 数据库集成。映射层是注解驱动的,它使用了 CDI 和 Bean Validation 等技术,这使得开发人员使用起来更加简单。也可以将映射层与传统 RDBMS 世界中的 JPA/Hibernate 进行比较。



让我们更深入地探讨一下如何与键值、列族、文档和图等 NoSQL 数据库进行通信。


实体的定义与 JPA 非常相似。基本上也是使用 @Entity、@Id、@Column 等注解:


@Entitypublic class Person {
@Id private long id;
@Column private String name;
@Column private List phones;}
复制代码


存储库和 Spring 的数据存储库看起来很像,可以通过 Repository<T, ID> 进行扩展:


public interface PersonRepository extends Repository {
List<Person> findByName(String name);
Stream<Person> findByPhones(String phone);}
复制代码


现在,我们必须稍微调整一下它,因为 maven 构件会根据 NoSQL 数据库的类型、设置配置以及如何在服务中注入存储库而改变。


我们比较一下列和文档 NoSQL 数据库之间的差异:


列(Column)


Maven 依赖的构件如下:


<dependency>   <groupId>org.jnosql.artemis</groupId>   <artifactId>artemis-column</artifactId>   <version>0.0.9</version></dependency><dependency>   <groupId>org.jnosql.diana</groupId>   <artifactId>cassandra-driver</artifactId>   <version>0.0.9</version></dependency>
复制代码


用于设置 ColumnFamilyManager 生产者的示例如下:


@ApplicationScopedpublic class ColumnFamilyManagerProducer {
private static final String KEY_SPACE = "developers"; private ColumnConfiguration<> cassandraConfiguration; private ColumnFamilyManagerFactory managerFactory;
@PostConstruct public void init() { cassandraConfiguration = new CassandraConfiguration(); managerFactory = cassandraConfiguration.get(); }
@Produces public ColumnFamilyManager getManagerCassandra() { return managerFactory.get(KEY_SPACE); }}
复制代码


最后,是一个如何执行一些插入/查询的示例:


Person person = Person.builder()  .withPhones(Arrays.asList("234", "432"))  .withName("Name")  .withId(id)  .build();
//使用 ColumnTemplateColumnTemplate columnTemplate = container.select(CassandraTemplate.class).get();Person saved = columnTemplate.insert(PERSON);System.out.println("Person saved" + saved);
ColumnQuery query = select().from("Person").where(eq(Column.of("id", 1L))).build();
Optional<Person> person = columnTemplate.singleResult(query);System.out.println("Entity found: " + person);
//使用 PersonRepositoryPersonRepository repository = container.select(PersonRepository.class).select(ofColumn()).get();Person saved = repository.save(PERSON);System.out.println("Person saved" + saved);
Optional<Person> person = repository.findById(1L);System.out.println("Entity found: " + person);
复制代码


文档(Document)


Maven 依赖的构件如下:


<dependency>   <groupId>org.jnosql.artemis</groupId>   <artifactId>artemis-document</artifactId>   <version>0.0.9</version></dependency><dependency>   <groupId>org.jnosql.diana</groupId>   <artifactId>mongodb-driver</artifactId>   <version>0.0.9</version></dependency>
复制代码


用于设置 DocumentCollectionManager 的生产者示例如下:


@ApplicationScopedpublic class DocumentCollectionManagerProducer {
private static final String COLLECTION = "developers"; private DocumentConfiguration configuration; private DocumentCollectionManagerFactory managerFactory;
@PostConstruct public void init() { configuration = new MongoDBDocumentConfiguration(); Map<String, Object> settings = Collections.singletonMap("mongodb-server-host-1", "localhost:27017"); managerFactory = configuration.get(Settings.of(settings)); }
@Produces public DocumentCollectionManager getManager() { return managerFactory.get(COLLECTION); }}
复制代码


最后,是一个如何执行一些插入/查询的示例:


Person person = Person.builder()  .withPhones(Arrays.asList("234", "432"))  .withName("Name")  .withId(id)  .build();
//使用 DocumentTemplateDocumentTemplate documentTemplate = container.select(DocumentTemplate.class).get();Person saved = documentTemplate.insert(person);System.out.println("Person saved" + saved);
DocumentQuery query = select().from("Person") .where(eq(Document.of("_id", id))).build();
Optional<Person> personOptional = documentTemplate.singleResult(query);System.out.println("Entity found: " + personOptional);
//使用 PersonRepositoryPersonRepository repository = container.select(PersonRepository.class) .select(ofDocument()).get();repository.save(person);
List<Person> people = repository.findByName("Name");System.out.println("Entity found: " + people);repository.findByPhones("234").forEach(System.out::println);
复制代码


有关 Jakarta NoSQL 参考实现的更多细节可以在JNoSQL 上找到。


Jakarta One 上还有一个 Jakarta NoSQL 的演示视频。


想要投稿的用户可以订阅邮件列表,或者通过Twitter和我们联系。


原文链接:


Introducing Jakarta NoSQL


2019-10-31 08:001784

评论

发布
暂无评论
发现更多内容

蓝易云:Alma Linux 9 上安装 Node.js 的 3 种不同安装教程!

百度搜索:蓝易云

node.js 云计算 Linux 运维 Alma

蓝易云:如何检查Linux硬盘大小、类型和硬件详细信息?

百度搜索:蓝易云

云计算 Linux 运维 云服务器

Programming abstractions in C阅读笔记:p130-p131

codists

c

对线面试官 - MQ数据丢失问题的解决方案

派大星

MQ Java 面试题

CCKS 2023 | 度小满数据智能总经理杨青分享知识图谱在金融领域的应用

科技热闻

“业务敏捷的领导力” 工作坊 · 2023年9月3日

ShineScrum捷行

DeFi质押流动性挖矿模式系统DAPP开发

V\TG【ch3nguang】

DeFi流动性挖矿 质押挖矿

智定义、易调整,火山引擎DataLeap助力企业轻松实现全流程值班管理

字节跳动数据平台

大数据 数据中台 数据治理 数据安全 企业号 8 月 PK 榜

测试代码终极解决方案 Monkey Patching

江湖十年

golang 后端 单元测试

技术之外的职场成长指南

老张

职场成长 职场经验 沟通技巧

区块链挖矿系统源码|TRX区块链质押挖矿系统开发

V\TG【ch3nguang】

质押挖矿 区块链技术开发

1行Python代码,给视频加水印,小白都能用

程序员晚枫

Python 视频 水印

合合信息启信宝与全国性股份制商业银行达成合作,聚焦产业链数字化管理

合合技术团队

人工智能 大数据 银行

虚拟货币量化交易机器人开发步骤|区块链炒币机器人开发源码功能详解

V\TG【ch3nguang】

虚拟货币 量化交易机器人开发

推荐三款适合运维小白的网络监测工具

小魏写代码

Stack Overflow开发者调查发布:AI将如何协助DevOps

SEAL安全

人工智能 DevOps 开发者报告 企业号 8 月 PK 榜

零信任体系化能力建设(5):数据安全与控制跟踪

权说安全

网络安全 零信任

IPP swap孵化器丨LP质押挖矿丨算力分红丨系统开发解决方案

V\TG【ch3nguang】

DeFi去中心化系统开发

网络直播源码UDP协议搭建:为平台注入一份力量

山东布谷科技

软件开发 udp 流媒体技术 网络直播源码 用户数据报协议

交易所量化炒币智能机器人系统搭建开发

V\TG【ch3nguang】

量化交易机器人开发 炒币机器人

JVM 内存大对象监控和优化实践

vivo互联网技术

监控 内存 优化 大对象 故障转移

内网即时通讯软件,打造企业信息保密壁垒

WorkPlus

“PO价值最大化”沙盘演练 · 上海 · 9月23日

ShineScrum捷行

价值

Apache Celeborn 让 Spark 和 Flink 更快更稳更弹性

Apache Flink

大数据 flink 实时计算

解锁安全高效办公——私有化部署的WorkPlus即时通讯软件

WorkPlus

R语言之处理大型数据集的策略

timerring

R 语言

首创端云一体多情感模型 火山语音创新发布PortaSpeech 2

科技热闻

Jakarta NoSQL介绍_编程语言_Diogo Carleto_InfoQ精选文章