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文件中。

    <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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容