美文网首页程序员
Springboot整合Neo4j开发及单元测试环境搭建

Springboot整合Neo4j开发及单元测试环境搭建

作者: cooze | 来源:发表于2017-07-28 13:13 被阅读0次

    本文是基于Maven搭建的springboot和spring-data-neo4j整合的开发环境,本文底部提供该demo工程的github地址。

    环境搭建步骤:

    1.使用任何一款自己熟悉的IDE开发工具创建一个普通的Maven工程;
    2.maven工程建好之后,在工程目录下的pom.xml文件中添加依赖;
    3.配置springboot启动入口;
    4.整合springboot和spring-data-neo4j
    5.配置neo4j连接(本文使用的是http连接方式)
    6.添加测试依赖及配置
    7.创建Neo4j简单的OGM

    添加maven依赖

    在创建好maven工程之后,将以下依赖直接添加到工程目录下的pom.xml文件中。

        <properties>
            <springboot.version>1.5.2.RELEASE</springboot.version>
            <spring.version>4.3.7.RELEASE</spring.version>
            <junit.version>4.12</junit.version>
            <jdk.compile.version>3.5.1</jdk.compile.version>
            <jdk.version>1.8</jdk.version>
            <charset>UTF-8</charset>
        </properties>
    
        <dependencies>
            <!--springboot以及spring-data-neo4j依赖配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${springboot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
                <version>${springboot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-neo4j</artifactId>
                <version>${springboot.version}</version>
            </dependency>
    
            <!--测试依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${springboot.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-test</artifactId>
                <version>${springboot.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${jdk.compile.version}</version>
                    <configuration>
                        <source>${jdk.version}</source>
                        <target>${jdk.version}</target>
                        <encoding>${charset}</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    创建工程包结构

    添加好Maven依赖之后创建如下图所示的包结构:


    工程包结构
    整合springboot和spring-data-neo4j

    1、在org.cooze.springboot.neo4j包下创建SpringBoot启动引导类BootStrap.java,代码如下:

    //扫描neo4j库操作包路径,一定要有而且要配置正确
    @EnableNeo4jRepositories(basePackages = {"org.cooze.springboot.neo4j.repository."  })
    //扫描neo4j实体类包路径,重申一定要有而且要配置正确
    @EntityScan(basePackages = {"org.cooze.springboot.neo4j.entity."})
    @SpringBootApplication
    public class BootStrap {
        public static void main(String[] args){
            SpringApplication.run(BootStrap.class,args);
        }
    }
    

    2、在maven工程的src/main/resources目录下穿件Springboot的配置文件application.yml,文件内容如下:

    #服务端口
    service:
      port: 8080
    
    #neo4j连接配置
    spring:
      data:
        neo4j:
          username: neo4j
          password: 123456
          uri: http://localhost:7474
    #日志配置(log4j日志配置请点击文章底部的github地址,到git上获取)
    logging:
      config:
        classpath: log4j2.xml
    

    3、在org.cooze.springboot.neo4j.entity包下创建Neo4j节点实体Student.java,代码如下:

    @NodeEntity
    public class Student {
        @GraphId
        private Long id;//必须指定Long类型的一个图形数据库id,图数据库用于自编号,保证图数据库中的节点唯一。
        private String name;
        private String sex;
        private int age;
        public Student() {
        }
        public Student(String name, String sex, int age) {
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
       //getter setter方法省略.....
    }
    

    4、在org.cooze.springboot.neo4j.repository包下创建StudentRepositry.java接口,直接继承spring-data-neo4j的GraphRepository接口,接口内容如下:

    public interface StudentRepositry extends GraphRepository<Student> {
        @Query("MATCH (n:Student) WHERE n.name = {name} RETURN n")
        Student getStudentByName(@Param("name") String Name);
    
       //这两个方法实现的功能是一样的,上面那个是直接写Neo4j的Cypher语句来查询数据,很强大很好用很灵活,Cypher语句不在本文描述的范围
        Student findByName( String Name );
    }
    

    5、在org.cooze.springboot.neo4j.service包下创建StudentService.java接口,接口代码如下:

    public interface StudentService {
        Student getStudent(String name);
        Student addStudent(Student student);
    }
    

    6、在org.cooze.springboot.neo4j.service包下创建impl包和StudentServiceImpl.java实现类,代码如下:

    @Service
    public class StudentServiceImpl implements StudentService {
        @Autowired
        private StudentRepositry studentRepositry;
        @Override
        public Student getStudent(String name) {
            return studentRepositry.findByName(name);
        }
        @Override
        public Student addStudent(Student student) {
            return studentRepositry.save(student);
        }
    }
    

    7、在org.cooze.springboot.neo4j.controller包下创建StudentController.java类,代码如下:

    @RestController
    public class StudentController {
    
        @Autowired
        private StudentRepositry studentRepositry;
    
        @Autowired
        private StudentService studentService;
    
        @PostMapping(value = "/student")
        @ResponseBody
        public Student addStudent(@RequestBody Student student){
    
            return  studentService.addStudent(student);
        }
    
        @GetMapping(value = "/student/{name}")
        public Student getStudent(@PathVariable(name = "name") String name){
            return studentService.getStudent(name);
        }
    
    }
    

    通过以上7个步骤,就已经完成了springboot和spring-data-neo4j的整合工作。但是感觉还是了缺点什么,想想,原来是缺了单元测试,下面开始介绍基于以上环境搭建的单元测试环境。

    单元测试环境搭建

    单元测试依赖已经在开始的时候添加了,在这里就不重复介绍了。
    1、在项目目录下的src/test/java创建创建包结构org.cooze.springboot.neo4j.test;
    2、在org.cooze.springboot.neo4j.test包下创建单元测试配置类Configure.java,代码如下:

    @EnableAutoConfiguration
    @EnableNeo4jRepositories(basePackages = {"org.cooze.springboot.neo4j.repository."})
    @EntityScan(basePackages = {"org.cooze.springboot.neo4j.entity."})
    @EnableTransactionManagement
    @ComponentScan
    @Configuration
    public class Configure {
        public static final String URI = "http://neo4j:123456@localhost:7474";
        @Bean
        public org.neo4j.ogm.config.Configuration getConfiguration(){
            org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
            config.driverConfiguration()
                    .setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver")
                    .setURI(URI);
            return config;
        }
    }
    

    3、在org.cooze.springboot.neo4j.test包下创建StudentTest.java单元测试类,代码如下:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes=Configure.class)
    public class StudentTest {
    
        //如果报错有红线没关系,不影响单元测试,那只是IDE检查有问题而已
        @Autowired
        private StudentRepositry studentRepositry;
    
        @Test
        public void addStudent(){
            Student student = studentRepositry.save(new Student("张三","男",10));
        }
    
        @Test
        public void findStudent1(){
    
            Student student = studentRepositry.findByName("张三");
    
        }
    
        @Test
        public void findStudent2(){
            Student student = studentRepositry.getStudentByName("张三");
        }
    }
    

    运行测试类中的addStudent()方法后,在数据库中查找存在如下图数据:

    数据插入结果

    到此,单元测试环境也搭好了。

    本文项目代码github地址:

    https://github.com/Cooze/sample-project/tree/master/springboot-neo4j-env
    

    相关文章

      网友评论

        本文标题:Springboot整合Neo4j开发及单元测试环境搭建

        本文链接:https://www.haomeiwen.com/subject/tcotlxtx.html