<!-- Jackrabbit content repository -->
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-core</artifactId>
<version>2.20.10</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.14.2.0</version>
</dependency>
import javax.jcr.*;
public class JcrStudentInfoCreator {
public static void main(String[] args) {
try {
// 1. 获取或初始化Session
Session session = getSession(); // 这是一个假设的方法,你需要实现它来获取Session
// 2. 获取或创建父节点
String parentNodePath = "/path/to/parent/node"; // 替换为实际的父节点路径
Node parentNode = session.getNode(parentNodePath);
if (parentNode == null) {
parentNode = session.getRootNode().addNode("students"); // 创建一个名为"students"的新父节点
}
// 3. 创建学生信息节点
for (int i = 0; i < 5; i++) { // 创建5个学生信息节点作为示例
String studentName = "Student" + i;
Node studentNode = parentNode.addNode(studentName, "studentInfoNodeType"); // 替换"studentInfoNodeType"为学生信息节点的节点类型
// 4. 设置节点属性
Property nameProperty = studentNode.setProperty("name", studentName);
studentNode.setProperty("age", 20); // 假设所有学生的年龄都是20岁
studentNode.setProperty("class", "ClassA"); // 假设所有学生都在ClassA班级
}
// 5. 保存更改
session.save();
} catch (RepositoryException e) {
e.printStackTrace();
}
}
}
版本下的数据更新过程
//根据id找找节点Node nodeWithProperty = session.getNodeByIdentifier(anotherNodeId);
// 获取根节点
Node rootNode = session.getRootNode();
// 获取或创建用户定义的节点
Node myNode = rootNode.addNode("myNode", "nt:unstructured");
// 设置一些属性
myNode.setProperty("prop1", "value1");
myNode.setProperty("prop2", "value2");
// 提交更改到存储库
session.save();
// 创建新版本
VersionManager versionManager = session.getWorkspace().getVersionManager();
// 切换回工作空间
versionManager.checkout("/myNode");
// 进行更多更改
myNode.setProperty("prop1", "new_value1");
// 提交更改到存储库并创建新版本
versionManager.checkin("/myNode");//将更改提交回原始节点并创建新版本
// 获取新版本的信息
//long versionNumber = versionManager.getVersionNumber(); // 获取版本号
session.save();
javax.jcr 版本不变保存数据
import javax.jcr.*;
public class JCRDataExample {
public static void main(String[] args) throws RepositoryException {
// 获取JCR存储库实例和会话对象...
Repository repository = ...; // 注入或获取Repository实例
Session session = repository.login(); // 登录到存储库并获取会话对象...
// 获取要保存数据的节点路径
String nodePath = "/path/to/your/node";
// 设置节点的属性值
session.setProperty(nodePath + "/property1", "value1");
session.setProperty(nodePath + "/property2", "value2");
// 保存数据
session.save();
// 最后,记得注销会话和关闭存储库连接
session.logout();
}
}
package com.ruoyi;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Calendar;
import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.Value;
import javax.jcr.Workspace;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.jcr.version.Version;
import javax.jcr.version.VersionHistory;
import javax.jcr.version.VersionIterator;
import javax.jcr.version.VersionManager;
import org.apache.jackrabbit.commons.JcrUtils;
public class JcrDemo {
public static void printDirectoryTree(Node root, int depth) throws RepositoryException {
StringBuilder prefixBuilder = new StringBuilder();
for (int i = 0; i < depth; i++) {
prefixBuilder.append("| ");
}
String prefix = prefixBuilder.toString();
if (!root.hasNodes()) {
System.out.println(prefix + root.getName());
return;
}
for (NodeIterator nodes = root.getNodes(); nodes.hasNext();) {
Node childNode = nodes.nextNode();
printDirectoryTree(childNode, depth + 1);
}
}
private static Session session;
public static void main(String[] args) throws Exception {
//Repository repository = JcrUtils.getRepository();
//JcrUtils.getRepository("repository.xml");new File(jcr地址)
//Repository repository = JcrUtils.getRepository("file:///D:/path/to/repository");
//JcrUtils.getRepository("file:/D:/path/to/repository");
//System.setProperty( "org.apache.jackrabbit.repository.home","F:\\weixin\\emlsr\\jackrabbit");
session = JcrUtils.getRepository().login(new SimpleCredentials("admin", "admin".toCharArray()));//"http://localhost:4502/"
Workspace workspace = session.getWorkspace();
QueryManager queryManager = workspace.getQueryManager();
String xpath = "/jcr:root/myFile//*[@jcr:primaryType='nt:unstructured']";
xpath = "/jcr:root/myFile//*[@id='12345']";
xpath = "/jcr:root/myFile//*[@jcr:primaryType='nt:unstructured' and @id='12345']";
xpath = "/jcr:root/myFile/*";//myFile下所有节点如果没*查询myFile创建多个node节点数据
xpath = "/jcr:root/element(*, nt:base)";
xpath = "/jcr:root/myFile/node()";
xpath = "/jcr:root/myFile//student";
xpath = "/jcr:root/myFile/student/@id";
xpath = "/jcr:root/myFile/student[@id='12345']";
xpath = "/jcr:root/myFile/jcr:content";
xpath = "/jcr:root/myFile/jcr:content/@jcr:mimeType";
xpath = "/jcr:root/myFile/element(*, nt:base)";
xpath = "/jcr:root/myFile/element(jcr:content, nt:base)";
xpath = "/jcr:root/myFile//*[(@id and @age)]";// 创建查询语句,查询具有属性"a"和属性"b"的节点
xpath = "/jcr:root/myFile//*[(@id = '12345' and @age = 20)]";
//XPath查询不直接支持同时指定多个元素类型
xpath = "/jcr:root/myFile/element(student, nt:base)";
xpath = "/jcr:root/myFile/element(student, nt:base)[jcr:contains(@id, '12345')]";
Query query = queryManager.createQuery(xpath,Query.XPATH);
QueryResult result = query.execute();
// 处理查询结果获取指定版本数据
NodeIterator nodeIterator = result.getNodes();
VersionManager versionManager = workspace.getVersionManager();
// 检查节点是否为版本化
if (session.getRootNode().getNode("myFile").isNodeType("mix:versionable")) {
System.out.println("The node is versionable.");
// 在这里可以对版本化节点执行版本操作...
VersionHistory versionHistory = versionManager.getVersionHistory(session.getRootNode().getNode("myFile").getPath());
VersionIterator versions = versionHistory.getAllVersions();
} else {
System.out.println("The node is not versionable.");
// 在这里处理非版本化节点的操作...
}
while (nodeIterator.hasNext()) {
//Version version = versions.nextVersion();
Node node = nodeIterator.nextNode();
// 处理每个节点的jcr:data属性
// Node contentNode = node.getNode("jcr:content");
// Binary binary = contentNode.getProperty("jcr:data").getValue().getBinary();
// Binary bin = node.getProperty("jcr:content/jcr:data").getBinary();
System.out.println(node);
// System.out.println(node.getProperty("jcr:mimeType").getValue().getString());
// System.out.println(node.getProperty("jcr:data").getValue().getBinary());
}
//只有当你开启版本才可以查询不然报错
// VersionHistory versionHistory = versionManager.getVersionHistory(session.getRootNode().getNode("myFile").getPath());
// Version latestVersion = versionHistory.getVersionByLabel("jcr:lastReleasedVersion");
// if (latestVersion != null) {
// String latestVersionName = latestVersion.getName();
// System.out.println("Latest Version Name: " + latestVersionName);
// } else {
// System.out.println("No versions found.");
// }
}
static void find001() throws RepositoryException {
Workspace workspace = session.getWorkspace();
QueryManager queryManager = workspace.getQueryManager();
Query query = queryManager.createQuery("//myFile/jcr:content",Query.XPATH);
QueryResult result = query.execute();
// 处理查询结果获取指定版本数据
NodeIterator nodeIterator = result.getNodes();
VersionManager versionManager = workspace.getVersionManager();
// 检查节点是否为版本化
if (session.getRootNode().getNode("myFile").isNodeType("mix:versionable")) {
System.out.println("The node is versionable.");
// 在这里可以对版本化节点执行版本操作...
VersionHistory versionHistory = versionManager.getVersionHistory(session.getRootNode().getNode("myFile").getPath());
VersionIterator versions = versionHistory.getAllVersions();
} else {
System.out.println("The node is not versionable.");
// 在这里处理非版本化节点的操作...
}
while (nodeIterator.hasNext()) {
//Version version = versions.nextVersion();
Node node = nodeIterator.nextNode();
// 处理每个节点的jcr:data属性
// Node contentNode = node.getNode("jcr:content");
// Binary binary = contentNode.getProperty("jcr:data").getValue().getBinary();
// Binary bin = node.getProperty("jcr:content/jcr:data").getBinary();
// System.out.println(binary);
if(node.getParent().hasNode("describe")) {
Node describeBode = node.getParent().getNode("describe");
PropertyIterator propertyIterator = describeBode.getProperties();
while (propertyIterator.hasNext()) {
Property property = propertyIterator.nextProperty();
System.out.println("Property Name: " + property.getName());
System.out.println("Property Value: " + property.getValue().getString());
}
//遍历当前节点的所有属性
for (PropertyIterator propIt = node.getProperties(); propIt.hasNext();) {
Property property = propIt.nextProperty();
System.out.println(" Property Name: " + property.getName());
System.out.println(" Property Value: " + property.getString());
}
}
System.out.println(node.getProperty("jcr:data").getValue().getBinary());
}
}
static void find002() throws RepositoryException {
Workspace workspace = session.getWorkspace();
QueryManager queryManager = workspace.getQueryManager();
Query query = queryManager.createQuery("//describe/@fileName",Query.XPATH);//describe[@fileName='test1']
QueryResult result = query.execute();
// 处理查询结果获取指定版本数据
NodeIterator nodeIterator = result.getNodes();
VersionManager versionManager = workspace.getVersionManager();
// 检查节点是否为版本化
if (session.getRootNode().getNode("myFile").isNodeType("mix:versionable")) {
System.out.println("The node is versionable.");
// 在这里可以对版本化节点执行版本操作...
VersionHistory versionHistory = versionManager.getVersionHistory(session.getRootNode().getNode("myFile").getPath());
VersionIterator versions = versionHistory.getAllVersions();
} else {
System.out.println("The node is not versionable.");
// 在这里处理非版本化节点的操作...
}
while (nodeIterator.hasNext()) {
Node node = nodeIterator.nextNode();
PropertyIterator propertyIterator = node.getProperties();
while (propertyIterator.hasNext()) {
Property property = propertyIterator.nextProperty();
System.out.println("Property Name: " + property.getName());
System.out.println("Property Value: " + property.getValue().getString());
}
//遍历当前节点的所有属性
for (PropertyIterator propIt = node.getProperties(); propIt.hasNext();) {
Property property = propIt.nextProperty();
System.out.println(" Property Name: " + property.getName());
System.out.println(" Property Value: " + property.getString());
}
}
}
static void find003() throws RepositoryException {
QueryManager queryManager = session.getWorkspace().getQueryManager();
// 定义查询条件和参数 FROM 后是节点的类型下面表示/myFile下的如nt:resource,nt:unstructured,nt:base类型里的数据
String statement = "SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE(s, '/myFile')";// WHERE [jcr:version] = $version
//String version = "1.0"; // 指定版本号
// 创建查询对象
Query query = queryManager.createQuery(statement, Query.JCR_SQL2);
// 设置查询参数
//query.bindValue("version", session.getValueFactory().createValue(version));
// 执行查询并获取结果
QueryResult result = query.execute();
NodeIterator nodeIterator = result.getNodes();
// 遍历查询结果并处理节点
while (nodeIterator.hasNext()) {
Node node = nodeIterator.nextNode();
//遍历当前节点的所有属性
for (PropertyIterator propIt = node.getProperties(); propIt.hasNext();) {
Property property = propIt.nextProperty();
System.out.println(" Property Name: " + property.getName());
System.out.println(" Property Value: " + property.getString());
}
}
// 最后,记得注销会话和关闭存储库连接
session.logout();
}
public static void addFile() {
try {
Node root = session.getRootNode();
// 创建一个新的node来存储文件//路径myFile
Node fileNode = root.addNode("myFile");
//(第一个节点)nt:unstructured节点类型表示该节点没有特定的结构或属性定义,它只是一个容器,可以包含其他节点和属性
Node studentNode = fileNode.addNode("student", "nt:unstructured");
// 设置学生的属性
studentNode.setProperty("name", "John Doe");
studentNode.setProperty("age", 20);
studentNode.setProperty("id", "12345");
//精简案例1
//或者创建多个学生文件夹形式
// 创建 students 节点(如果尚未存在)
// Node studentsNode = root.getNode("students");
// if (studentsNode == null) {
// studentsNode = root.addNode("students", "nt:folder");
// }
//
// // 创建示例学生节点
// Node student1 = studentsNode.addNode("student1", "studentNodeType");
// student1.setProperty("name", "张三");
// student1.setProperty("age", 18);
// student1.setProperty("gender", "男");
// student1.setProperty("score", 85);
//
// Node student2 = studentsNode.addNode("student2", "studentNodeType");
// student2.setProperty("name", "李四");
// student2.setProperty("age", 19);
// student2.setProperty("gender", "女");
// student2.setProperty("score", 90);
// 精简案例2
// Node studentsFolder = session.getRootNode().addNode("students", "nt:folder");
//
// Node studentNode = studentsFolder.addNode("student1", "nt:unstructured");
// studentNode.setProperty("firstName", "John");
// studentNode.setProperty("lastName", "Doe");
// studentNode.setProperty("age", 20);
//
// Node coursesFolder = studentNode.addNode("courses", "nt:folder");
// Node mathCourseNode = coursesFolder.addNode("math", "nt:unstructured");
// mathCourseNode.setProperty("courseName", "Mathematics");
// mathCourseNode.setProperty("grade", 85);
Node wenj = fileNode.addNode("describe","nt:unstructured");
wenj.setProperty("width", 800);
wenj.setProperty("height", 600);
wenj.setProperty("fileName", "test1");
//(第二个节点)在上述节点中创建一个存放文件数据的节点包含文件内容
Node resNode = fileNode.addNode("jcr:content", "nt:resource");
resNode.setProperty("jcr:data", session.getValueFactory().createBinary(new FileInputStream(new File("D:\\aaa.pdf"))));
resNode.setProperty("jcr:mimeType", "application/pdf");
resNode.setProperty("jcr:encoding", "");
resNode.setProperty("jcr:lastModified", Calendar.getInstance());
// Enable versioning
//if (!fileNode.isNodeType("mix:versionable")) {
// fileNode.addMixin("mix:versionable");
session.save();
// String id = studentNode.getIdentifier();
// System.out.println("StudentNode ID: " + id );
//}
//如果你要创建版本
//VersionManager versionManager = session.getWorkspace().getVersionManager();
//versionManager.checkpoint(studentNode.getPath()); //创建版本
//versionManager.checkout(studentNode.getPath()); // 将工作副本设置为检出状态,以便查看版本历史记录。在检出状态下,您可以查看但不可以更改工作副本。
//versionManager.checkin(studentNode.getPath()); // 将工作副本设置为检入状态,以便将更改保存到存储库。在检入状态下,您不能对工作副本进行更改。如果您希望保存更改,必须执行checkpoint操作。在执行此操作后,工作副本将被标记为最新版本。然后可以将其检入存储库。
session.logout(); // 关闭会话和存储库连接。
System.out.println("File is uploaded.");
} catch (RepositoryException | FileNotFoundException e) {
e.printStackTrace();
}
}
public static void addFile001() throws FileNotFoundException {
try {
Node root = session.getRootNode();
// 创建一个新的node来存储文件//路径myFile
Node fileNode = root.addNode("imagesTest");
fileNode.setProperty("id", "12345");
//fileNode = fileNode.addNode("folder", "nt:folder");再目录下创建文件
Node resNode = fileNode.addNode("image", "nt:file");
Node resourceNode = resNode.addNode("jcr:content", "nt:resource");
resourceNode.setProperty("jcr:data", session.getValueFactory().createBinary(new FileInputStream(new File("D:\\aaa.pdf"))));
resourceNode.setProperty("jcr:mimeType", "application/pdf");
resourceNode.setProperty("jcr:encoding", "");
resourceNode.setProperty("jcr:lastModified", Calendar.getInstance());
session.save();
session.logout(); // 关闭会话和存储库连接。
System.out.println("File is uploaded.");
} catch (RepositoryException e) {
e.printStackTrace();
}
}
static void down() throws RepositoryException {
Node root = session.getRootNode();
Node fileNode = root.getNode("myFile");
// 获取与'fileNode'关联的'jcr:content'节点,其中包含文件内容
Node resNode = fileNode.getNode("jcr:content");
Property dataProperty = resNode.getProperty("jcr:data");
// 获取文件内容
Binary binaryData = dataProperty.getBinary();
InputStream is = binaryData.getStream();
System.out.println(is);
}
//删除版本
void delVersion(Node node) throws RepositoryException {
// 删除所有现有版本
VersionHistory versionHistory = node.getVersionHistory();
for (VersionIterator vi = versionHistory.getAllVersions(); vi.hasNext();) {
Version v = vi.nextVersion();
versionHistory.removeVersion(v.getName());
}
}
void allVersion(VersionManager versionManager, Node node) throws RepositoryException {
VersionHistory versionHistory = versionManager.getVersionHistory(node.getPath());
VersionIterator versions = versionHistory.getAllVersions();
while (versions.hasNext()) {
Version version = versions.nextVersion();
System.out.println("Version Name: " + version.getName());
System.out.println("Version Created: " + version.getCreated());
// ...
}
}
}
public static void currentVer(Session session) throws PathNotFoundException, RepositoryException {
// 获取会话和定位到节点
Node node = session.getNode("/path/to/node"); // 获取节点
if (node.isNodeType("mix:versionable")) {
node.checkout(); // 检出节点(如果需要)
VersionHistory versionHistory = node.getVersionHistory();
VersionIterator versions = versionHistory.getAllVersions();
Version latestVersion = null;
while (versions.hasNext()) {
Version version = versions.nextVersion();
if (latestVersion == null || version.getCreated().after(latestVersion.getCreated())) {
latestVersion = version;
}
}
if (latestVersion != null) {
String versionName = latestVersion.getName();
System.out.println("The current version number is: " + versionName);
} else {
System.out.println("No versions found for the node.");
}
} else {
System.out.println("The node is not versionable.");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/200905.html