深入实践Spring Boot2.4.4 Neo4j测试

    xiaoxiao2024-04-09  106

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

    最新回复(0)