zl程序教程

您现在的位置是:首页 >  其他

当前栏目

深入实践Spring Boot2.4.4 Neo4j测试

2023-03-14 10:15:12 时间

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 演员和电影的角色关系图