当前位置: 首页 > news >正文

万江建设网站深圳网站建设网站制作

万江建设网站,深圳网站建设网站制作,网站上的站点地图链接是这么做的,怎么申请网站域名在前面的一篇文章《图形数据库Neo4J简介》中#xff0c;我们已经对其内部所使用的各种机制进行了简单地介绍。而在我们尝试对Neo4J进行大版本升级时#xff0c;我发现网络上并没有任何成型的样例代码以及简介#xff0c;而其自身的文档也对如何使用Spring Data Neo4J介绍得语…   在前面的一篇文章《图形数据库Neo4J简介》中我们已经对其内部所使用的各种机制进行了简单地介绍。而在我们尝试对Neo4J进行大版本升级时我发现网络上并没有任何成型的样例代码以及简介而其自身的文档也对如何使用Spring Data Neo4J介绍得语焉不详。因此在本文中我们就将简单地介绍如何使用Spring Data Neo4J。   本文中所使用的所有的代码都是基于Spring Data Neo4J 4.1.1的。我已经将这些代码放置在https://github.com/loveis715/Spring-Neo4J中。读者可以自行下载并查看其所包含的各次更改。该样例项目内部是按照版本进行组织的。也就是说一旦我发现其它后续版本再次出现大范围的API改动那么我会创建一个新版本文件夹并在其中添加相应的代码。   添加Spring Data Neo4J的支持   如果想要使用Spring Data Neo4J我们要做的第一步便是在项目中添加对Spring Data Neo4J的支持。如果您是使用Maven对项目进行管理那么您首先要在项目中添加使用Spring Data Neo4J所需要的各个依赖项 1 dependency2 groupIdorg.neo4j/groupId3 artifactIdneo4j-ogm-embedded-driver/artifactId4 version2.0.1/version5 /dependency6 dependency7 groupIdorg.springframework/groupId8 artifactIdspring-test/artifactId9 version4.2.5.RELEASE/version 10 /dependency 11 dependency 12 groupIdjunit/groupId 13 artifactIdjunit/artifactId 14 version4.9/version 15 /dependency 16 dependency 17 groupIdorg.springframework.data/groupId 18 artifactIdspring-data-neo4j/artifactId 19 version4.1.1.RELEASE/version 20 /dependency   首先来让我们来看看依赖项neo4j-ogm-embedded-driver。其主要用来提供对内嵌Driver的支持。Spring Data Neo4J主要支持两类Driver内嵌Driver以及Http Driver。内嵌Driver会直接连接本地图形数据库因此较适合开发环境而Http Driver则会通过Http与图形数据库实例沟通因此更加适合生产环境。   第二个依赖项spring-test以及第三个依赖项JUnit则添加了基于Spring Framework的测试功能的支持。这里我们所使用的Spring Framework的版本是4.2.5.RELEASE也是与Spring Data Neo4J所兼容的最低版本。   而最后一个依赖项spring-data-neo4j也不必多说。其是Spring Data Neo4J所对应的依赖项。   添加完这些依赖项之后我们就需要对Spring Data Neo4J进行配置了。在之前的版本中我们只需要通过Spring的配置文件标明图形数据库的地址以及图形数据库数据类型所在的包即可。而Spring Data Neo4J 4.1.1已经不再支持这种配置方式了甚至用来处理http://www.springframework.org/schema/data/neo4j这个XML命名空间的Neo4jNamespaceHandler类都已经被移除。作为替代我们需要从Neo4jConfiguration类派生以指定Spring Data Neo4J运行时所需要使用的配置 1 Configuration2 EnableNeo4jRepositories(basePackages com.ambergarden.samples.neo4j.repositories)3 EnableTransactionManagement4 public class GraphDBConfiguration extends Neo4jConfiguration {5 6 Bean7 public org.neo4j.ogm.config.Configuration getConfiguration() {8 org.neo4j.ogm.config.Configuration config 9 new org.neo4j.ogm.config.Configuration(); 10 // TODO: Temporary uses the embedded driver. We need to switch to http 11 // driver. Then we can horizontally scale neo4j 12 config.driverConfiguration() 13 .setDriverClassName(org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver) 14 .setURI(file:/D:/neo4j/graph.db/); 15 return config; 16 } 17 18 Override 19 Bean 20 public SessionFactory getSessionFactory() { 21 // Return the session factory which also includes the persistent entities 22 return new SessionFactory(getConfiguration(), com.ambergarden.samples.neo4j.entities); 23 } 24 }   上面的代码主要指出了三个配置项Spring Data Neo4J所需要使用的各个Repository主要存在于com.ambergarden.samples.neo4j.repositories包中而其所操作的各个数据类型则主要存在于com.ambergarden.samples.neo4j.entities包中。同时我们还标明了我们将使用内嵌Driver并将数据暂时存储在D:\neo4j\graph.db文件夹下。   而为了能让Spring能够探测到该配置类我们首先需要在该类型之上添加Configuration标记然后还需要在Spring的配置文件中通过component-scan元素来让Spring Framework搜索配置文件所在的包com.ambergarden.samples.neo4j 1 context:component-scan base-packagecom.ambergarden.samples.neo4j /   至此为止我们已经完成了对Spring Data Neo4J的配置。那么好让我们创建一个简单的测试类来验证这些配置的正确性 1 NodeEntity2 public class Person {3 GraphId4 private Long id;5 6 public Long getId() {7 return id;8 }9 10 public void setId(Long id) { 11 this.id id; 12 } 13 }   接下来我们就需要添加对该类型进行CRUD的Repository 1 public interface PersonRepository extends GraphRepositoryPerson { 2 }   最后编写一小段测试代码来看看这些类型是否能够正常工作 1 RunWith(SpringJUnit4ClassRunner.class)2 ContextConfiguration({ classpath*:/spring/dal-test-context.xml })3 public class PersonRepositoryTest {4 Autowired5 private PersonRepository personRepository;6 7 Test8 public void testCRUDPerson() {9 Person person new Person(); 10 person personRepository.save(person); 11 assertNotNull(person); 12 assertNotNull(person.getId()); 13 14 Long personId person.getId(); 15 personRepository.delete(person); 16 person personRepository.findOne(personId); 17 assertNull(person); 18 } 19 }   如果您的Eclipse能正确地运行这些单元测试那么恭喜您已经成功地配置了Spring Data Neo4J。   定义数据实体   在确认了我们为使用Spring Data Neo4J所进行的项目配置不存在问题之后我们就需要开始尝试定义操作Neo4J所需的实体了。如果需要将一个类型声明为Neo4J实体那么我们就需要在相应的类型定义上使用NodeEntity标记 1 NodeEntity 2 public class Person { 3 …… 4 }   除此之外我们还需要通过GraphId标记标明用来记录ID的属性 1 NodeEntity2 public class Person {3 GraphId4 private Long id;5 6 public Long getId() {7 return id;8 }9 10 public void setId(Long id) { 11 this.id id; 12 } 13 }   由于该域是如此常用因此我们常常会将其移到基类实现中并根据该域的值来重写hashCode()和equals()方法 1 public abstract class AbstractEntity {2 3 GraphId4 private Long id;5 ……6 7 Override8 public boolean equals(Object obj) {9 …… 10 } 11 12 Override 13 public int hashCode() { 14 …… 15 } 16 }   此时所有的Neo4J实体只需要从该类派生就能得到equals()和hashCode()的支持了。至于如何正确地实现equals()以及如何正确地实现hashCode()网络上的讲解很多这里就不再赘述。感兴趣的读者可以自行查看GitHub上的示例代码。   好有了实体下一步要做的就是定义实体之间的关系了。先让我们看一个如何创建简单关系的示例 1 NodeEntity2 public class Person extends NamedEntity {3 Relationship(typeREADER_OF)4 private SetBook books;5 ……6 }7 8 NodeEntity9 public class Book extends DescriptiveEntity { 10 Relationship(typeREADER_OF, directionRelationship.INCOMING) 11 private SetPerson readers; 12 …… 13 }   上面的代码展示了如何在Person类和Book类之间创建简单的关系。可以看到我们只需要创建对关系另一端实例的引用并通过Relationship标记在这些引用之上标明关系的名称即可。如果一个关系是有向的例如READER_OF关系需要被解读为Person p is READER_OF Book b那么我们就需要在关系的两端标明关系的方向。在上面的示例中READER_OF关系的方向便是由Person指向Book。当然我们也可以通过UNDIRECTED来标示一个关系是没有方向的。   当然我们是为了方便才在Book中添加了指向Person实例的集合。如果在您的Book实体中添加这么个域并不会为您带来方便那么您完全可以省略该域。而且该做法还会在一定程度上简化您编写代码的复杂度。让我们来看下面的一段用来在Person实例和Book实例之间建立关系的示例代码详见测试代码BookRepositoryTest.testCRUDRelationships() 1 Test2 public void testCRUDRelationships() {3 ……4 // Test add readers5 Book book2 new Book();6 book2.setName(TEST_BOOK_NAME_2);7 book2 bookRepository.save(book2);8 9 readers new HashSetPerson(); 10 readers.add(person1); 11 person1.getBooks().add(book2); 12 book2.setReaders(readers); 13 book2 bookRepository.save(book2); 14 …… 15 }   您可能会问为什么向Person实例添加一个对Book类实例的引用需要这么多行代码答案就是如果我们只更新了关系的一端却没有更新关系的另一端那么关系两端所记录的关系就会出现不一致进而导致Neo4J根本无法判断应该根据哪一端所记录的数据对数据库进行操作。您说是不   往更深一步说图形数据库中一个非常容易犯错的地方就是对图的修改会导致图处于一个非一致状态。在这种情况下对这些数据的保存将可能导致图本身处于一个非期望的状态并逐渐发展为混乱状态。例如在删除一个实例时没有维护图中其它结点对它的引用那么该删除操作就可能会导致这些结点中所记录的引用是非法的甚至使得整个数据库无法加载。您别不信我们真遇到过。   所以说图形数据库编程中您一定要在每个对图的操作中保证图是处于一个合法的一致状态。这也便是为何我们常常在关系的两端都记录关系的原因一旦其中一个结点有变我们可以快速找到对它的引用并对该引用进行维护。   您可能还有一个问题那就是图形数据库不是用来记录富关系的么那我们应该如何在关系中记录额外的数据呢此时我们就需要通过RelationshipEntity标记来定义一个富关系并进而在各个实体定义中使用该关系 1 RelationshipEntity(typeWRITER_OF)2 public class WriterOf extends AbstractEntity {3 StartNode4 private Person writer;5 6 EndNode7 private Book book;8 9 private Date startDate; 10 private Date endDate; 11 …… 12 } 13 14 NodeEntity 15 public class Person extends NamedEntity { 16 Relationship(typeWRITER_OF) 17 private SetWriterOf writings; 18 19 Relationship(typeREADER_OF) 20 private SetBook books; 21 …… 22 }   此时在我们的实体定义中所记录的不再是富关系另一端的实体集合而是富关系本身。     相信经过这么一篇简短的介绍您已经了解了如何使用Spring Data Neo4J来操作数据库了。如果您感兴趣可以下载我放置在https://github.com/loveis715/Spring-Neo4J中的示例代码。   转载请注明原文地址并标明转载http://www.cnblogs.com/loveis715/p/5425790.html 商业转载请事先与我联系silverfox715sina.com 公众号一定帮忙别标成原创因为协调起来太麻烦了。。。 转载于:https://www.cnblogs.com/loveis715/p/5425790.html
http://www.yutouwan.com/news/482309/

相关文章:

  • 网站模版建设教程企业网站的建设公司
  • 百度推广网站怎么做wordpress高级插件
  • 网站建设 职责电商设计是干嘛的
  • 网站后台怎样推荐图片青岛网站制作推广
  • 牧风的在wordpress湖北seo网站推广
  • 门户网站建设模板免费做网站哪个好
  • 成都网站建设众成联邦可以做免费的网站吗
  • 南京网站开发荐南京乐识怎么免费建设金融网站
  • 做寂网站wordpress 不用80端口
  • 旅游电商网站开发wordpress 相册主题
  • 应用数据库网站开发wordpress 漏洞工具
  • 公司网站搜索引擎排名怎么注册公司企业微信
  • 质量好网站建设费用建设学院网站的通知书
  • 电脑网站开发手机上可以打开吗百度云无法进入wordpress
  • 怎样改网站英文域名wordpress自定义进入后台地址
  • 石家庄网站托管公司聊城网站建设科技公司
  • 网站没收录要怎么做淘宝客推广怎么做网站备案
  • 网站成立查询虚拟主机购买网站
  • 新手搭建网站教程视频鸿鹄网站建设
  • flash网站大全厦门网站seo外包
  • 如何自学网站开发新手练习做网站哪个网站比较合适
  • 网站建设行吗百度推广的效果
  • 芜湖市建设厅网站网站开发面试问题以及回答
  • 志迅东莞网站建设网站的ftp
  • 网站建设 工商注册wordpress手机验证码登录界面
  • 西安网站建设罗鑫哪个建站比较好
  • 网站后台无法审核php7.2 wordpress
  • 做艺术字的网站动画专业最好的大学
  • 深圳网站制作公司咨询网站如何做IPV6支持
  • 专题页网站网站安全证书过期怎么处理