前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring boot + mybatis 访问 neo4j

spring boot + mybatis 访问 neo4j

作者头像
MickyInvQ
发布2020-09-27 17:33:23
1.8K0
发布2020-09-27 17:33:23
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

之前有通过rest的风格去访问,但是每次需要访问时候将statement一并加入header中去数据库执行,方式简单、且思路清晰,但是不便于形成模板调用,固采用mybaits来集成。

1.关键pom.xml依赖

代码语言:javascript
复制
 <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-jdbc-driver</artifactId>
            <version>3.1.0</version>
        </dependency>
           <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>

1.关键pom.xml依赖

代码语言:javascript
复制
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.1</version>
    </dependency>
         <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-jdbc-driver</artifactId>
        <version>3.1.0</version>
    </dependency>

2.mybatis访问数据库xml配置

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <environments default="LOCAL">
        <environment id="LOCAL">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="org.neo4j.jdbc.Driver"/>
                <property name="poolMaximumActiveConnections" value="10"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
                <property name="url" value="${connectString}"/>
            </dataSource>
        </environment>
    </environments>

</configuration>

3.properties 文件属性配置

代码语言:javascript
复制
spring.data.neo4j.username=xxx
spring.data.neo4j.password=xxx
#uri
#spring.data.neo4j.uri=bolt://ip:7687
spring.data.neo4j.rest.uri=http://ip:7474
spring.data.neo4j.mybatis.uri=jdbc:neo4j:bolt://ip:port
mybatis.neo4j.config.file=neo4j/mybatis-config-neo4j.xml

4.mybatis连接初始化java配置文件,通过spring注入初始化

代码语言:javascript
复制
package neo4j.data;

import neo4j.service.Neo4jCrudService;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

@Configuration
public class MyBatisInitial {
    private static Logger logger = LoggerFactory.getLogger(MyBatisInitial.class);
    private SqlSessionFactory sessionFactory;
    @Value("${spring.data.neo4j.username}")
    private String username ;
    @Value("${spring.data.neo4j.password}")
    private String password ;
    @Value("${spring.data.neo4j.mybatis.uri}")
    private String connectString ;
    @Value("${mybatis.neo4j.config.file}")
    private String resourceFile;
    private List<String> mapperFiles = Arrays.asList("neo4j/MyMapper.xml");

    /**
     * @throws IOException
     */
    protected void initialize() throws Exception {
        sessionFactory = null;
        try {
            Properties properties = new Properties();
            properties.setProperty("username", username);
            properties.setProperty("password", password);
            properties.setProperty("connectString", connectString);
            sessionFactory = (new SessionFactoryProvider()).produceFactory(resourceFile, properties, mapperFiles);
        } catch (Exception e) {
            logger.error(e.getMessage());
            throw e;
        }
    }

    @Bean("mybatisNeo4jMapper")
    public Neo4jCrudService getSqlSessionFactory() throws Exception {
        initialize();
        return sessionFactory.openSession().getMapper(Neo4jCrudService.class);
    }

}

2.mybatis访问数据库xml配置

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <environments default="LOCAL">
        <environment id="LOCAL">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="org.neo4j.jdbc.Driver"/>
                <property name="poolMaximumActiveConnections" value="10"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
                <property name="url" value="${connectString}"/>
            </dataSource>
        </environment>
    </environments>

</configuration>

3.properties 文件属性配置

代码语言:javascript
复制
spring.data.neo4j.username=xxx
spring.data.neo4j.password=xxx
#uri
#spring.data.neo4j.uri=bolt://ip:7687
spring.data.neo4j.rest.uri=http://ip:7474
spring.data.neo4j.mybatis.uri=jdbc:neo4j:bolt://ip:port
mybatis.neo4j.config.file=neo4j/mybatis-config-neo4j.xml

4.mybatis连接初始化java配置文件,通过spring注入初始化

代码语言:javascript
复制
import neo4j.service.Neo4jCrudService;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

@Configuration
public class MyBatisInitial {
    private static Logger logger = LoggerFactory.getLogger(MyBatisInitial.class);
    private SqlSessionFactory sessionFactory;
    @Value("${spring.data.neo4j.username}")
    private String username ;
    @Value("${spring.data.neo4j.password}")
    private String password ;
    @Value("${spring.data.neo4j.mybatis.uri}")
    private String connectString ;
    @Value("${mybatis.neo4j.config.file}")
    private String resourceFile;
    private List<String> mapperFiles = Arrays.asList("neo4j/MyMapper.xml");

    /**
     * @throws IOException
     */
    protected void initialize() throws Exception {
        sessionFactory = null;
        try {
            Properties properties = new Properties();
            properties.setProperty("username", username);
            properties.setProperty("password", password);
            properties.setProperty("connectString", connectString);
            sessionFactory = (new SessionFactoryProvider()).produceFactory(resourceFile, properties, mapperFiles);
        } catch (Exception e) {
            logger.error(e.getMessage());
            throw e;
        }
    }

    @Bean("mybatisNeo4jMapper")
    public Neo4jCrudService getSqlSessionFactory() throws Exception {
        initialize();
        return sessionFactory.openSession().getMapper(Neo4jCrudService.class);
    }

}

5.创建节点对象,@NodeEntity 注解表示了,这是一个neo4j的节点对象

代码语言:javascript
复制
package neo4j.node;


import org.neo4j.ogm.annotation.NodeEntity;

@NodeEntity
public class Product {
    private String prodname;
    private String levelid;

    public String getProdname() {
        return prodname;
    }

    public void setProdname(String prodname) {
        this.prodname = prodname;
    }

    public String getLevelid() {
        return levelid;
    }

    public void setLevelid(String levelid) {
        this.levelid = levelid;
    }

    @Override
    public String toString() {
        return "Product{" +
                "prodname='" + prodname + '\'' +
                ", levelid='" + levelid + '\'' +
                '}';
    }
}

6.mybatis 的 mapper 文件配置,这个地方就是写 cypher语言的地方,这个id与service接口中的方法名保持一致,因为命名空间已经指定了Neo4jCrudService

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="neo4j.service.Neo4jCrudService">


    <select id="selectProduct" resultType="neo4j.node.Product">
        MATCH (n) RETURN  n.prodname as prodname, n.levelid as levelid  LIMIT 25
    </select>


</mapper>
代码语言:javascript
复制
package neo4j.service;

import neo4j.node.Product;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;

import java.util.List;


public interface Neo4jCrudService {
    public ResponseEntity<String> queryDataWithNoParam(HttpEntity<String> request);

    public List<Product> selectProduct();

}

7.封装control

代码语言:javascript
复制
   @RequestMapping(value = "/postDataViaMybaits", method = RequestMethod.POST)
    public Object getNeoDatabyMybatis() throws Exception {
        //建立连接
        log.info("postData begin time:" + new Date());// 接口调用开始时间

        List<Product> response = neo4jService.selectProduct();
        log.info("result: "+  response+"");

        log.info("postData end time:" + new Date());// 接口调用结束时间

        return response;
    }

这层逻辑只有一句有效的代码。neo4jService通过注入、然后通过mybatis进行访问

整体架构如下:

这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.关键pom.xml依赖
  • 2.mybatis访问数据库xml配置
  • 3.properties 文件属性配置
  • 4.mybatis连接初始化java配置文件,通过spring注入初始化
  • 2.mybatis访问数据库xml配置
  • 3.properties 文件属性配置
  • 4.mybatis连接初始化java配置文件,通过spring注入初始化
  • 5.创建节点对象,@NodeEntity 注解表示了,这是一个neo4j的节点对象
  • 6.mybatis 的 mapper 文件配置,这个地方就是写 cypher语言的地方,这个id与service接口中的方法名保持一致,因为命名空间已经指定了Neo4jCrudService
  • 7.封装control
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档