阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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:001782

评论

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

嵌入式系统的数据存储与管理策略

申公豹

嵌入式

强大的字体设计编辑:FontLab 8最新激活版

胖墩儿不胖y

Mac软件 字体设计 字体编辑 设计字体软件

一起学Elasticsearch系列-写入原理

Java随想录

Java 大数据 elastic

【AI趋势发展】 主赛道:技术人的 2023 总结

雪奈椰子

生成式 AI 的下一阶段将走向何方?

Baihai IDP

深度学习 程序员 AI 白海科技 GenAI

DevSecOps端到端的安全能力构建为什么重要?

极狐GitLab

电网调度自动化系统的发展规律

邹德虎

文心一言 VS 讯飞星火 VS chatgpt (164)-- 算法导论13.1 4题

福大大架构师每日一题

福大大架构师每日一题

反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理 | 京东云技术团队

京东科技开发者

Java debug 后端

技术译文 | 微服务测试——契约测试

AREX 中文社区

微服务 测试 契约测试

被面试官PUA了:创建索引时一定会锁表?

王磊

Java 面试

【收藏】法律人办案必备检索网站最新汇总!附检索技巧

科技汇

用友BIP国资云赋能国资监管迈入智能化新局面

用友BIP

国资监管

2023 年的“云原生的演化”

卢卡多多

总结 2023

文体中心场地预订小程序开发笔记一-功能设计

CC同学

Image2icon中文版激活 for Mac(icon图标设计软件) v2.18

mac大玩家j

Mac软件 图标工具

DDD学习与感悟——向屎山冲锋 | 京东云技术团队

京东科技开发者

架构 DDD 六边形

大数据从业者必知必会的Hive SQL调优技巧 | 京东云技术团队

京东科技开发者

主馆位置即将售罄“2024北京信息通信展会”众多知名企聚京城

AIOTE智博会

通信展 信息通信展

数仓调优实践丨SQL改写消除相关子查询

华为云开发者联盟

数据库 大数据 华为云 华为云开发者联盟 华为云GaussDB(DWS)

SpringBoot—jasypt加解密库的使用方法。

百度搜索:蓝易云

Java Linux 运维 jasypt 云服务器

ubuntu20.04上构建qemu启动linux kernel教程。

百度搜索:蓝易云

云计算 Linux ubuntu 运维 云服务器

20231225 介绍一个我解决过的难题

Luke

播下开源教育的种子分论坛圆满举办

开放原子开源基金会

开源

大模型加持下,AI招聘的“下一站”

用友BIP

AI招聘

重塑招聘的价值,AI能扮演好企业的“人才捕手”吗?

用友BIP

AI招聘

《2023 中国信通院IOMM企业数字化转型发展双象限洞察》发布,转型者象限&赋能者象限各有40+企业上榜

信通院IOMM数字化转型团队

数字化转型 IOMM ICT深度观察

软件开发

Geek_8da502

终端闲思录(5)- 终端与缓冲的关系

黑客不够黑

终端 缓冲

用友全球司库十问(八)|集团企业如何做好资金集中化管理?

用友BIP

全球司库 资金集中管理

IntelliJ IDEA安装教程

小魏写代码

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