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

本文是基于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文件中。

    
        1.5.2.RELEASE
        4.3.7.RELEASE
        4.12
        3.5.1
        1.8
        UTF-8
    

    
        
        
            org.springframework.boot
            spring-boot-starter-web
            ${springboot.version}
        

        
            org.springframework.boot
            spring-boot-starter-aop
            ${springboot.version}
        

        
            org.springframework.boot
            spring-boot-starter-data-neo4j
            ${springboot.version}
        

        
        
            junit
            junit
            ${junit.version}
            test
        
        
            org.springframework.boot
            spring-boot-starter-test
            ${springboot.version}
            test
        
        
            org.springframework.boot
            spring-boot-test
            ${springboot.version}
            test
        
        
            org.springframework
            spring-test
            ${spring.version}
            test
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                ${jdk.compile.version}
                
                    ${jdk.version}
                    ${jdk.version}
                    ${charset}
                
            
        
    
创建工程包结构

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


Springboot整合Neo4j开发及单元测试环境搭建_第1张图片
工程包结构
整合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 {
    @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()方法后,在数据库中查找存在如下图数据:

Springboot整合Neo4j开发及单元测试环境搭建_第2张图片
数据插入结果

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

本文项目代码github地址:

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

你可能感兴趣的:(Springboot整合Neo4j开发及单元测试环境搭建)