Neo4J OGM与Quarkus

在下面的视频中,我演示了一个使用Neo4J数据库和Neo4J OGM的Quarkus应用程序示例。

看一下GitHub上示例项目

我为咖啡豆创建了一个示例域,其中包含我们可以查询和匹配的某些风味配置文件。 红色节点是来自某个国家/地区的咖啡豆,味道像某些口味。 豆类起源国也以“某些风味”而闻名。

在当前的1.4.2.Final版本中,Quarkus带有基本的Neo4J支持 ,但是在撰写本文时还没有包括对OGM映射的支持。 但是,我们可以使用一个简单的生产者添加支持,该生产者公开Neo4J OGM SessionFactory

 import org.neo4j.ogm.config.Configuration;  import org.neo4j.ogm.session.SessionFactory;  ...  @ApplicationScoped  public class SessionFactoryProducer { 
     public static final String PACKAGE = "com.sebastian_daschner.coffee.entity" ; 
     @ConfigProperty (name = "quarkus.neo4j.uri" ) 
     String databaseUri; 
     @ConfigProperty (name = "quarkus.neo4j.authentication.username" ) 
     String username; 
     @ConfigProperty (name = "quarkus.neo4j.authentication.password" ) 
     String password; 
     @Produces 
     SessionFactory produceSessionFactory() { 
         Configuration neoConfig = new Configuration.Builder() 
                 .uri(databaseUri) 
                 .credentials(username, password) 
                 .useNativeTypes() 
                 .build(); 
         return new SessionFactory(neoConfig, PACKAGE); 
     } 
     void disposeSessionFactory( @Disposes SessionFactory sessionFactory) { 
         sessionFactory.close(); 
     }  } 

现在,我们可以将SessionFactory注入我们的bean中,并使用它来查询图形数据库:

 import org.neo4j.ogm.session.*;  ...  @ApplicationScoped  public class CoffeeBeans { 
     @Inject 
     SessionFactory sessionFactory; 
     public List<CoffeeBean> getCoffeeBeans() { 
         Session session = sessionFactory.openSession(); 
         return new ArrayList<>(session.loadAll(CoffeeBean. class , 
                 new SortOrder( "name" ), 1 )); 
     } 
     public List<CoffeeBean> getCoffeeBeansSpecificFlavor(String flavor) { 
         Session session = sessionFactory.openSession(); 
         Iterable<CoffeeBean> result = session.query(CoffeeBean. class , 
                 "MATCH (b:CoffeeBean)-[:TASTES]->(:Flavor {description: $flavor})\n" + 
                 "MATCH (b)-[isFrom:IS_FROM]->(country)\n" + 
                 "MATCH (b)-[tastes:TASTES]->(flavor)\n" + 
                 "RETURN b, collect(isFrom), collect(country)," + 
                 " collect(tastes), collect(flavor)\n" + 
                 "ORDER by b.name;" , 
             Map.of( "flavor" , flavor)); 
         return resultList(result); 
     } 
     ...  } 

我的示例图如下所示,其中CoffeeBean对象是通过Neo4J OGM映射的:

 import org.neo4j.ogm.annotation.*;  ...  @NodeEntity  public class CoffeeBean { 
     @Id 
     public String name; 
     @Relationship ( "IS_FROM" ) 
     public Set<Origin> origins = new HashSet<>(); 
     @Property 
     public Roast roast; 
     @Relationship ( "TASTES" @Relationship "TASTES" ) 
     public Set<FlavorProfile> flavorProfiles = new HashSet<>(); 
     ...  } 

观看视频,并查看GitHub上的项目以获取完整图片。

玩得开心探索您的图表! 作为进一步的练习,您可以编写查询来匹配具有某种风味的咖啡豆作为其“主要”风味(百分比最高的咖啡豆)或具有相似风味特征的咖啡豆等。

翻译自: https://www.javacodegeeks.com/2020/05/neo4j-ogm-with-quarkus.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值