深入实践Spring Boot2.4.4 Neo4j测试
2.4.4 Neo4j测试
代码清单2-24是Neo4j的数据库配置类,其中@Enable-TransactionManagement启用了事务管理,@EnableNeo4jRe-positories启用了Neo4j资源库并指定了我们定义的资源库接口的位置,在重载的SessionFactory函数中设定了定义实体的位置,这将促使定义的实体被作为域对象导入,RemoteServer设定连接Neo4j服务器的URL、用户名和密码,这些参数要依据安装Neo4j服务器的情况来设置。如果还没有安装Neo4j服务器,可参考附录A的方法进行安装,安装完成后启动服务器以备使用。
代码清单2-25 Neo4j配置类
@Configuration
@EnableTransactionManagement
@EnableNeo4jRepositories(basePackages = { "dbdemo.neo4j.repositories" })
public class Neo4jConfig extends Neo4jConfiguration {
@Override
public Neo4jServer neo4jServer() {
return new RemoteServer("http://192.168.1.221:7474","neo4j","12345678");
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("dbdemo.neo4j.domain");
}
}
现在可以编写一个测试程序来验证和演示上面编写的代码的功能,如代码清
单2-26所示。这个测试程序分别创建了三部电影和三个演员,以及三个演员在三部电影中各自扮演的角色,然后按照电影标题查出一部电影,按照其内在的关系输出这部电影的信息和每个演员扮演的角色。这些数据的内容参照了Neo4j帮助文档中提供的示例数据。
代码清单2-26 使用Neo4j的JUint测试程序
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Neo4jConfig.class})
public class MovieTest {
private static Logger logger = LoggerFactory.getLogger(MovieTest.class);
@Autowired
MovieRepository movieRepository;
@Before
public void initData(){
movieRepository.deleteAll();
Movie matrix1 = new Movie();
matrix1.setTitle("The Matrix");
matrix1.setYear("1999-03-31");
Movie matrix2 = new Movie();
matrix2.setTitle("The Matrix Reloaded");
matrix2.setYear("2003-05-07");
Movie matrix3 = new Movie();
matrix3.setTitle("The Matrix Revolutions");
matrix3.setYear("2003-10-27");
Actor keanu = new Actor();
keanu.setName("Keanu Reeves");
Actor laurence = new Actor();
laurence.setName("Laurence Fishburne");
Actor carrieanne = new Actor();
carrieanne.setName("Carrie-Anne Moss");
matrix1.addRole(keanu, "Neo");
matrix1.addRole(laurence, "Morpheus");
matrix1.addRole(carrieanne, "Trinity");
movieRepository.save(matrix1);
Assert.notNull(matrix1.getId());
matrix2.addRole(keanu, "Neo");
matrix2.addRole(laurence, "Morpheus");
matrix2.addRole(carrieanne, "Trinity");
movieRepository.save(matrix2);
Assert.notNull(matrix2.getId());
matrix3.addRole(keanu, "Neo");
matrix3.addRole(laurence, "Morpheus");
matrix3.addRole(carrieanne, "Trinity");
movieRepository.save(matrix3);
Assert.notNull(matrix3.getId());
}
@Test
public void get(){
Movie movie = movieRepository.findByTitle("The Matrix");
Assert.notNull(movie);
logger.info("===movie=== movie:{}, {}",movie.getTitle(), movie.getYear());
for(Role role : movie.getRoles()){
logger.info("====== actor:{}, role:{}", role.getActor().getName(), role.getRole());
}
}
}
在IDEA的Run/Debug Conf?iguration配置中增加一个JUint的配置项目,模块选择neo4j,工作目录选择模块所在的根目录,测试程序选择MovieTest这个类,并将配置保存为neo4jtest。
使用Debug模式运行测试项目neo4jtest,如果测试通过,将在控制台中看到输出查询的这部电影和所有演员及其扮演的角色,如下所示:
=== movie=== movie:The Matrix, 1999-03-31
====== actor:Keanu Reeves, role:Neo
====== actor:Laurence Fishburne, role:Morpheus
====== actor:Carrie-Anne Moss, role:Trinity
这时,在数据库客户端的控制台上,单击左面侧边栏的关系类型ACTS_IN,可以看到一个很酷的图形,图中每部电影和每个演员是一个节点,节点的每条有向边代表了这个演员在那部电影中扮演的角色,如图2-7所示。
图2-7 演员和电影的角色关系图
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的