Neo4j與springdata集成


1、maven工程需導入的jar包

<!-- neo4j -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>

<dependency>
<groupId>org.neo4j.app</groupId>
<artifactId>neo4j-server</artifactId>
<version>2.3.2</version>
</dependency>

2、對應spring的jar包

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>

3、加載neo4j的驅動配置

復制代碼
@Configuration
@EnableNeo4jRepositories("com.neo4j.repository")
@EnableTransactionManagement

public class Neo4jApplication extends Neo4jConfiguration {

</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">final</span> <span style="color: #0000ff;">int</span> NEO4J_PORT = 7474<span style="color: #000000;">;

@Bean
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> SessionFactory getSessionFactory() {
    </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> SessionFactory("com.neo4j.domain"<span style="color: #000000;">);
}

   //配置事務
@Bean
@Qualifier("neo4jTransactionManager")
public Neo4jTransactionManager neo4jTransactionManager() throws Exception {
return new Neo4jTransactionManager(getSession());
}

}

復制代碼

4、連接方式采用httpDriver

添加配置文件ogm.properties

driver=org.neo4j.ogm.drivers.http.driver.HttpDriver
URI=http://neo4j:admin@localhost:7474

5、domain實體配置

復制代碼
//節點注解(可以添加label標簽)
@NodeEntity
public class Thing{
        //neo4j中節點的ID
       private Long id;
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Long getId() {
    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> id;
}

@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">boolean</span><span style="color: #000000;"> equals(Object o) {
    </span><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">this</span> ==<span style="color: #000000;"> o)
        </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">if</span> (o == <span style="color: #0000ff;">null</span> || id == <span style="color: #0000ff;">null</span> || getClass() !=<span style="color: #000000;"> o.getClass())
        </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
    Entity entity </span>=<span style="color: #000000;"> (Entity) o;
    </span><span style="color: #0000ff;">if</span> (!<span style="color: #000000;">id.equals(entity.id))
        </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
}

@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> hashCode() {
    </span><span style="color: #0000ff;">return</span> (id == <span style="color: #0000ff;">null</span>) ? -1<span style="color: #000000;"> : id.hashCode();
}
    </span><span style="color: #008000;">//</span><span style="color: #008000;">屬性</span>
<span style="color: #0000ff;">private</span><span style="color: #000000;"> String userId;

</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String name;

</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String desc;
</span><span style="color: #008000;">//</span><span style="color: #008000;">配置轉換</span>
@DateString("yy-MM-dd"<span style="color: #000000;">)
</span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Date dateTime;
    </span><span style="color: #008000;">//</span><span style="color: #008000;">設置關系</span>
@Relationship(type = "HAVE_PROP", direction=<span style="color: #000000;">Relationship.OUTGOING)
List</span>&lt;Property&gt; properties = <span style="color: #0000ff;">new</span> ArrayList&lt;Property&gt;<span style="color: #000000;">();

@Relationship(type </span>= "HAVE_SERVICE", direction=<span style="color: #000000;">Relationship.OUTGOING)
Set</span>&lt;Service&gt; services = <span style="color: #0000ff;">new</span> HashSet&lt;Service&gt;<span style="color: #000000;">();

@Relationship(type </span>= "HAVE_PROP"<span style="color: #000000;">)
Set</span>&lt;ThingPropRelation&gt; propRelations = <span style="color: #0000ff;">new</span> HashSet&lt;ThingPropRelation&gt;<span style="color: #000000;">();

@Relationship(type </span>= "HAVE_SERVICE"<span style="color: #000000;">)
Set</span>&lt;ThingServiceRelation&gt; serviceRelations = <span style="color: #0000ff;">new</span> HashSet&lt;ThingServiceRelation&gt;<span style="color: #000000;">();

@Relationship(type </span>= "HAVE_SERVICE"<span style="color: #000000;">)
Set</span>&lt;ThingServiceRelation&gt; serviceRelations = <span style="color: #0000ff;">new</span> HashSet&lt;ThingServiceRelation&gt;<span style="color: #000000;">();

}

復制代碼

設置節點的關系

復制代碼
//設置關系實體
@RelationshipEntity(type="HAVE_PROP")
public class ThingPropRelation extends Entity {
    //開始節點
    @StartNode
    Thing thing;
     //結束節點
    @EndNode
    Property property;
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ThingPropRelation() {
}

</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Thing getThing() {
    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> thing;
}

</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setThing(Thing thing) {
    </span><span style="color: #0000ff;">this</span>.thing =<span style="color: #000000;"> thing;
}

</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Property getProperty() {
    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> property;
}

</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> setProperty(Property property) {
    </span><span style="color: #0000ff;">this</span>.property =<span style="color: #000000;"> property;
}

}

復制代碼

6、設置repository

復制代碼
//接口繼承GraphRepository
//提供基礎的保存修改刪除查詢功能
//特殊查詢可以通過@Query注解實現
public interface ThingRepository extends GraphRepository<Thing> {
    Thing findByName(String name);
@Query(</span>"MATCH (t:Thing {name:{0}})-[r:HAVE_PROP]-&gt;(p) RETURN p"<span style="color: #000000;">)
Iterable</span>&lt;Property&gt;<span style="color: #000000;"> getThingPropertyByThingName(String thingName);

}

復制代碼

7、應用

@Autowired
private ThingRepository thingRepository; 

調用

Thing thing = thingRepository.findByName("thing");

原文地址:https://www.cnblogs.com/changj/p/6021775.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM