版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议。
本文链接:http://www.blbk.info

Spring Boot+Marklogic应用

摘要: 在前一节的介绍,相信你已经搭建好了最基本的Spring Boot+Marklogic应用,并且能存入一个文本至数据库,本章本节继续通过实例来讲解String Boot+MANVE+Marklogic 8.

文件管理员

  • 不同的文档格式由不同的文档管理器对象处理,这些对象充当文档和数据库连接之间的接口。
    • 该软件包com.marklogic.client.document包括用于二进制,XML,JSON和文本的文档管理器。如果您不知道文档格式,或者需要处理多种格式的文档,请使用通用文档管理器。
    • DatabaseClient实例具有工厂方法来创建com.marklogic.client.document.DocumentManager任何子类型的新方法。
1
2
3
4
5
BinaryDocumentManager binDocMgr = client.newBinaryDocumentManager();
XMLDocumentManager XMLdocMgr = client.newXMLDocumentManager();
JSONDocumentManager JSONDocMgr = client.newJSONDocumentManager();
TextDocumentManager TextDocMgr = client.newTextDocumentManager();
GenericDocumentManager genericDocMgr = client.newGenericDocumentManager();

应用程序只需要为任何给定类型的文档创建一个文档管理器,而不管它处理的是哪种类型的文档。因此,即使您希望使用1,000,000,000个JSON文档,也只需要创建一个JSONDocumentManager对象即可。

初始配置后,文档管理器是线程安全的;无论您有多少个线程,每种文档类型都只需要一个文档管理器。

如果您犯了一个错误,并尝试使用文档管理器使用错误的文档类型,则结果取决于类型的组合。例如,a BinaryDocumentManager将尝试将文档内容解释为二进制。JSONDocumentManager并且XMLDocumentManager是最特别的,因为如果一个文件是不是在自己的格式,也不会解析。在大多数FailedRequestException情况下,如果管理者无法确定文档类型,将收到异常错误,并带有默认错误。

使用Handles进行IO流输入输出

  • 与MarkLogic交互时,Java客户端API使用Handles进行I / O交互。
  • Handles是使用Java Client API的关键。Handles用Adapter设计模式来实现对类型多样且可扩展的内容格式集的强类型读写。例如,您可以创建一个com.marklogic.client.io.DOMHandle读取或写入XML DOM数据。
1
2
3
4
5
6
XMLDocumentManager docMgr = client.newXMLDocumentManager();
Document doc = docMgr.read(docURI, new DOMHandle()).get(); // writing
docMgr.write(docURI, new DOMHandle(someDocument));

Java客户端API预先定义了许多句柄实现。以下软件包包含Handles类:

  • com.marklogic.client.io -Handles类标准表示,如String,File和DOM。
  • com.marklogic.extra-处理诸如DOM4J和GSON之类的第三方格式的类。使用这些句柄类需要Java客户端API分发中未包含的第三方库。
    一些Handles支持读取和写入操作。
  • 例如,您可以使用FileHandle来读写文件。一些Handles有特殊用途。
  • 例如,您SearchHandle用于处理搜索操作的结果。有关Handles及其作用的完整列表,请参见Java Client API文档中的com.marklogic.client.io包。

一些Java Client API方法使你可以使用不需要显式创建Handles的I / O快捷方式。这些快捷方式方法始终带有As后缀,例如readAs。例如,XMLDocumentManager.read上面显示的方法有一个XMLDocumentManager.readAs对应的对象,它为您隐式创建了Handles。例如:

1
2
3
4
5
// 阅读
Document doc = docMgr.readAs(docURI, Document.class); // 编写
docMgr.writeAs(docURI, someDocument);

指定内容格式

一些Hand 大专栏  “Spring Boot+Marklogic实战应用(1)”les可以与多种文档格式一起使用。例如,InputStream可以提供任何格式的内容,因此InputStreamHandle可以用于任何文档格式。如果在Handles类型中内容格式不是显式的,则使用Handles的setFormat方法来指定它。例如,以下调用告诉Java Client API该句柄可以与JSON内容一起使用:

1
new InputStreamHandle().setFormat(Format.JSON);

==不能为所有句柄类型设置格式。例如,DOMHandle只能用于读取和写入XML,因此您不能指定格式。==

Handles类型快速参考

并非所有Handles都支持所有内容类型。此外,尽管大多数Handles都可以用于读取或写入,但其中一些Handles受到更多限制。本节提供有关每个Handles类支持的内容格式,操作和数据类型的快速指南。SearchHandle,不包括特殊用途的Handles类。

处理示例

  • 以下代码使用DOMHandle来从服务器将XML文档读取到内存中的DOM对象中:
1
2
3
4
XMLDocumentManager docMgr = client.newXMLDocumentManager();
DOMHandle handle = new DOMHandle();
docMgr.read(docURI, handle);
org.w3c.dom.Document document = handle.get();
  • 以下代码使用DOMHandle将XML文档写入MarkLogic。假设document是一些先前初始化的内存XML DOM文档。
1
2
3
4
XMLDocumentManager docMgr = client.newXMLDocumentManager();
DOMHandle handle = new DOMHandle();
handle.set(document);
docMgr.write(docId, handle);

####此处附上本人测试代码

1
2
3
4
5
6
7
8
9
10
11
12
DatabaseClient client =
DatabaseClientFactory.newClient(
"localhost", 8000, "xiaobai",
new DatabaseClientFactory.DigestAuthContext("admin", "111111")); XMLDocumentManager docMgr = client.newXMLDocumentManager();
DOMHandle handle = new DOMHandle();
docMgr.read("/books.xml", handle);
Document document = handle.get();
System.out.println("-------------------------------------");
System.out.println(document);
client.release();

==至于为什么Document为null 我也不太了解,但是我确实又能从Document中拿到数据,问了下技术经理说好像W3C的Document就这样坑,建议不要用它的Document,以后坑更多==


更多技术分享欢迎登录我的博客

http://www.blbk.info

  • 本笔记不允许任何个人和组织转载

“Spring Boot+Marklogic实战应用(1)”的更多相关文章

  1. Spring Boot 项目实战(五)集成 Dubbo

    一.前言 上篇介绍了 Redis 的集成过程,可用于解决热点数据访问的性能问题.随着业务复杂度的提高,单体应用越来越庞大,就好比一个类的代码行数越来越多,分而治之,切成多个类应该是更好的解决方法,所以 ...

  2. Spring Boot GraphQL 实战 02_增删改查和自定义标量

    hello,大叫好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用的框架是 https://github.com/graphql-java-ki ...

  3. Spring Boot GraphQL 实战 03_分页、全局异常处理和异步加载

    hello,大家好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用的框架是 https://github.com/graphql-java-ki ...

  4. spring boot插件开发实战和原理

    本文转载自spring boot插件开发实战和原理 实战:编写spring boot插件 为什么要编写boot插件 因为我们在开发的时候需要提供一些共同的功能,所以我们编写个共同的jar包.开发人员在 ...

  5. 【建议收藏】缺少 Vue3 和 Spring Boot 的实战项目经验?我这儿有啊!

    缺少 Vue3 和 Spring Boot 的实战项目经验?缺少学习项目和练手项目?我这儿有啊! 从 2019 年到 2021 年,空闲时间里陆陆续续做了一些开源项目,推荐给大家啊!记得点赞和收藏噢! ...

  6. Github 上热门的 Spring Boot 项目实战推荐

    最近经常被读者问到有没有 Spring Boot 实战项目可以学习,于是,我就去 Github 上找了 10 个我觉得还不错的实战项目.对于这些实战项目,有部分是比较适合 Spring Boot 刚入 ...

  7. Spring Boot 2 实战:利用Redis的Geo功能实现查找附近的位置

    1. 前言 老板突然要上线一个需求,获取当前位置方圆一公里的业务代理点.明天上线!当接到这个需求的时候我差点吐血,这时间也太紧张了.赶紧去查相关的技术选型.经过一番折腾,终于在晚上十点完成了这个需求. ...

  8. Spring Boot Docker 实战

    Spring Boot Docker 开发环境 开发工具: Intellij IDEA 2018.2.6 springboot: 2.0.6.RELEASE jdk: 1.8.0_192 maven: ...

  9. Spring Boot 项目实战(六)集成 Apollo

    一.前言 上篇介绍了 Spring Boot 集成 Dubbo,使我们的系统打下了分布式的基础.随着程序功能的日益复杂,程序的配置日益增多:各种功能开关.参数配置.服务器地址等:对程序配置的期望值也越 ...

随机推荐

  1. Android进阶——Android视图工作机制之measure、layout、draw

    自定义View一直是初学者们最头疼的事情,因为他们并没有了解到真正的实现原理就开始试着做自定义View,碰到很多看不懂的代码只能选择回避,做多了会觉得很没自信.其实只要了解了View的工作机制后,会发 ...

  2. JS-表单验证二

    3.范围验证:年龄范围验证: <head> <meta http-equiv="Content-Type" content="text/html; ch ...

  3. SeetaFaceQt:Qt多线程

    为什么要做多线程,说个最简单的道理就是我们不希望在软件处理数据的时候界面处于无法响应的假死状态.有些处理是灰常花时间的,如果把这样的处理放到主线程中执行,就会导致软件一条路走到底,要等到处理完才能接收 ...

  4. Android 心跳包心跳连接 如何实现android和服务器长连接呢?推送消息的原理

    前言:现在的大多数移动端应用都有实时得到消息的能力,简单来说,有发送消息的主动权和接受消息的被动权.例如:微信,QQ,天气预报等等,相信好处和用户体验相信大家都知道吧. 提出问题:这种功能必须涉及cl ...

  5. Git 小课堂 002——别名

    昨天我们聊了聊 Git 的文件存储,今天我们聊聊 Git 的别名.不知道你是不是熟悉别名,如果你经常使用命令行做一些事情,有一些复杂的命令,或者是一些简单的操作,往往用一些别名方法就很方便很容易,下面 ...

  6. 基于python的爬虫流程图(精简版)

    网址: https://www.processon.com/view/link/5e1148b8e4b07db4cfa9cf34 如果链接失效,请及时反馈(在评论区评论),博主会及时更新

  7. Java中的合并与重组(下)

    通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习. Java中的合并与重组上部分链接:https://www.cnblogs.com/youruike1/p ...

  8. SQL基础教程(第2版)第3章 聚合与排序:3-1 对表进行聚合查询

    3-1 对表进行聚合查询 ● 使用聚合函数对表中的列进行计算合计值或者平均值等的汇总操作.● 通常,聚合函数会对NULL以外的对象进行汇总.但是只有COUNT函数例外,使用COUNT(*)可以查出包含 ...

  9. linux 下实用工具

    gpm 让linux 纯字符终端具备窗口模式下的鼠标功能 xterm + tmux 支持横向或者纵向切屏的终端 urxvt-unicode 支持中文的终端

  10. PAT A1133 Splitting A Linked List (25) [链表]

    题目 Given a singly linked list, you are supposed to rearrange its elements so that all the negative v ...