暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Springboot+Neo4j 初级框架搭建(一)

Neo4j权威指南 2021-03-16
606
本文适合初学neo4j的同学,如果你是大牛请直接跳过!!!如果对内容有疑问请回复沟通
第一阶段 我们先开始搭建一个框架,后续再讲具体怎么操作neo4j数据?
开始我们的第一篇正文
a首先在idea里开始创建一个新项目

接着选择 Spring Initializr ,JDK版本选择1.8  点next 

接着写下项目名称,这里jdk版本要说一下,如果我们用的neo4j 4.0版本以上的JDK要选择11版本,这里我们选择JDK8 然后Next 

接下来就是一直Next 最后Finish

(b)pom.xml配置文件的添加
    <profiles>
    <profile>
    <id>local</id>
    <properties>
    <spring.profiles.active>local</spring.profiles.active>
    <docker.image.prefix>industrygraphbrowse</docker.image.prefix>
    </properties>
    <activation>
    <!-- 设置默认激活这个配置 -->
    <activeByDefault>true</activeByDefault>
    </activation>
    </profile>
    </profiles>
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
            </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.2</version>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
            <!--neo4j主要用到这个配置-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-neo4j</artifactId>
    </dependency>
    <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>27.0.1-jre</version>
    </dependency>
    </dependencies>
    application.yml文件和application-local.yml文件配置
    首先是application.yml文件配置
      #日志存储地址
      logging:
      level:
      com.abcft.industrygraphbrowse.service: info
      file: "logs/service.log"
      #服务器配置
      server:
      port: 18071
        tomcat.uri-encoding: UTF-8
      spring:
      application:
      name: industrygraphbrowse
      profiles:
      active: "@spring.profiles.active@"
      mvc:
      async:
      request-timeout: 200000
      接着application-local.yml文件配置 这里我们默认用bolt驱动模式,还有http驱动模式,如果需要http驱动模式 要修改pom.xml文件的依赖
        spring:
        data:
        neo4j:
        uri: bolt://localhost:7687
        username: neo4j
              password: 123456

        创建如下目录,大家比较熟悉的结构controller,model,service,以及dao层

        model层 也就是neo4j 节点以及关系的定义,我们先创建一个简单的node(节点),后续文章会涉及复杂的节点以及关系相互操作@NodeEntity注解表示该类是neo4j的一个节点;@Id表示neo4j里的id;neo4j里默认会创建一个自增的id,在官网和一些书籍里都不建议使用他,他是Long型 自增的,并且在我删除原来的节点后 他可能还会创建一个相同的id出现,所以不建议使用,这里我们自己创建一个uuid来作为主键,但是这个主键并不会创建索引,如果需要索引,需要我们自己创建,后续文章有索引的创建。本章是基础篇,不涉及。

          @NodeEntity(label = "CompanyEntry")
          @Data
          public class CompanyEntryNode {

          @Id
          private String uuid;
               /**
          * 名称
          */
          private String name;

          /**
          * 公司表id
          */
          private String companyId;

          /**
          * 类型
          */
          private String type;

          /**
          * 别名
          */
          private String aliasName;
          /**
          * 行业
          */
          private String industry;

          /**
          * 经营范围
          */
          private String scope;

          /**
          * 简介
          */
          private String introduction;

          /**
          * 图片路径
          */
          private String imagePath;
          /**
          * 状态 0草稿 1已审核
          */
          private String status;

          /**
          * 修改人Id
          */
          private String modifyUserId;

          /**
          * 修改时间
          */
          private Long modifyTime;

          /**
          * 创建人Id
          */
          private String createUserId;

          /**
          * 创建时间
          */
          private Long createTime;

          dao层和我们mybatis很像 定义一个类 继承 Neo4jRepository<T,E>,这里的E就是你的主键id的类型;Neo4jRepository<T,E> 这里默认有很多实现对neo4j的操作,比如save,delete,find等,大家自行查看

          接口里我们定义了一个existsByCompanyId的方法注解是@Query;里边内容就涉及到Cypher语法,我们在后续文章中详细讲解,这里就只需要理解根据companyId查询CompanyEntry的名字

            @Repository
            public interface CompanyEntryRepository extends Neo4jRepository<CompanyEntryNode, String> {
            /**
            * 根据公司id判断 公司是否已经存在
            *
            * @param companyId
            * @return
            */
            @Query("match(n:CompanyEntry{companyId:{companyId}}) return n.name")
            String existsByCompanyId(String companyId);

            }

            service层我们开始定义查询和保存接口

              public interface CompanyEntryService {
              /**
              * 获取所有数据
              *
              * @return
              */
                  List<CompanyEntryNode> getAll();
                  }
                @Service
                @Slf4j
                public class CompanyEntryServiceImpl implements CompanyEntryService {

                @Autowired
                private CompanyEntryRepository companyEntryRepository;
                /**
                * 获取所有数据
                *
                * @return
                */
                @Override
                public List<CompanyEntryNode> getAll() {
                Iterable<CompanyEntryNode> all = companyEntryRepository.findAll();
                List<CompanyEntryNode> companyEntryNodes = Lists.newArrayList(all);
                return companyEntryNodes;
                }
                }

                controller层 这里的WebResInfo 是我自己定义的返回结果类,大家可以自己

                  @RestController
                  @RequestMapping(value = "companyEntry")
                  @Slf4j
                  public class CompanyEntryController {

                  @Autowired
                  private CompanyEntryService companyEntryService;

                  /**
                  * 获取公司词条
                  *
                  * @return
                  */
                  @GetMapping(value = "getAll")
                  public WebResInfo getAll() {
                  log.info("getAll->companyEntry");
                  WebResInfo webResInfo = new WebResInfo();
                  try {
                  webResInfo.setCode(WebResCode.Successful);
                  List<CompanyEntryNode> all = companyEntryService.getAll();
                  webResInfo.setData(all);
                  } catch (Exception e) {
                  log.error("getAll error:{}", e);
                  webResInfo.setCode(WebResCode.Server_Bug_Exception);
                  webResInfo.setMessage(e.getMessage());
                  }
                  return webResInfo;
                  }
                    }

                  最后请求返回结果,如果你跑出来下边结果,恭喜你完成了第一步(大家data里应该没有数据,因为我这里已经插入数据了)

                  最后整个框架就搭建完了,下篇文章开始讲解单节点增删改查操作。

                  谢谢 如果疑问请留言 点赞!!!

                  文章转载自Neo4j权威指南,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论