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

1.关键pom.xml依赖

 <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依赖

    <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配置

<?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 文件属性配置

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注入初始化

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配置

<?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 文件属性配置

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注入初始化

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的节点对象

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

<?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>
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

   @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进行访问

整体架构如下:

spring boot + mybatis 访问 neo4j的更多相关文章

  1. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  2. Spring Boot MyBatis 数据库集群访问实现

    Spring Boot MyBatis 数据库集群访问实现 本示例主要介绍了Spring Boot程序方式实现数据库集群访问,读库轮询方式实现负载均衡.阅读本示例前,建议你有AOP编程基础.mybat ...

  3. 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)

    MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...

  4. Spring Boot数据访问之整合Mybatis

    在Mybatis整合Spring - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中谈到了Spring和Mybatis整合需要整合的点在哪些方面,需要将Mybatis中数据库连接池等相关对 ...

  5. spring boot + mybatis + druid

    因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算 ...

  6. spring boot+mybatis+quartz项目的搭建完整版

    1. 利用spring boot提供的工具(http://start.spring.io/)自动生成一个标准的spring boot项目架构 2. 因为这里我们是搭建spring boot+mybat ...

  7. Spring Boot + Mybatis + Redis二级缓存开发指南

    Spring Boot + Mybatis + Redis二级缓存开发指南 背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybat ...

  8. Spring Boot + Mybatis 实现动态数据源

    动态数据源 在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动 ...

  9. Spring boot Mybatis 整合

    PS: 参考博客 PS: spring boot配置mybatis和事务管理 PS: Spring boot Mybatis 整合(完整版)   这篇博客里用到了怎样 生成 mybatis 插件来写程 ...

随机推荐

  1. 善用 NuGet 程序包管理器控制台

    每种集成开发环境都会提供扩展包的下载与安装,VS (微软可视化集成开发环境) 下的叫程序包管理控制台,我们把他叫做<牛干 程序包管理控制台>. 在 工具=>NuGet 程序包管理器= ...

  2. thinkphp+ajax 实现点击加载更多数据

    https://blog.csdn.net/a898712940/article/details/78545599?utm_source=blogxgwz8 适用范围:thinkphp3.2和thin ...

  3. 转载 Python 安装setuptools和pip工具操作方法(必看)

    本文章转载自 脚本之家 http://www.jb51.net  感谢! setuptools模块和pip模块是python进行第三方库扩展的极重要工具,例如我们在需要安装一些爬虫或者数据分析的包时就 ...

  4. 关于UML类图的一点理解(转)

    首先我们定义一个非常简单的Person类,代码如下: public class Person { private String name; private int age =1; public Str ...

  5. SpringCloud是如何运行的?

    SpringCloud是基于SpringBoot这一高度自动化的应用开发框架,将各类业界比较知名的.得到过实践反馈的开元服务治理相关的技术框架进行优化整合的框架,是一种开发方式的优化和组合,,是一组框 ...

  6. dubbo admin详解

    运行 dubbo-admin的启动运行其实是一个比较简单的操作,但是由于它采用了前后端分离,前端又是使用的node.js,如果有不熟悉的同学会容易踩坑. 这里只简单介绍一下步骤: 1.从github下 ...

  7. bzoj 3033 太鼓达人——欧拉图搜索

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3033 思路:肯定是把2^m个数当成点,每个点连了2条入边.2条出边,然后求一个经过所有点一次 ...

  8. “微信小程序” js部分注解

    1.小程序不提供获取dom的操作,而是让我们直接将事件绑定写入到组件内.区别在于bind不阻止冒泡,而catch阻止冒泡. <view id="tapTest" bindta ...

  9. properties和 xml配置方式,如何选择

    在学习集成log4j的时候,接触到了properties配置 个人感觉不是很好用,但与xml配置都可以完成指定的功能 properties配置文件,风格是一个属性对应于一个值(key = value) ...

  10. day37 06-Hibernate二级缓存:更新时间戳区

    二级缓存区:类缓存区,集合缓存区,更新时间戳区. 它会记录一个时间T1.其实在我们查询之后它会记录一个时间.假设时间叫做T1.就是你查询完之后的当前时间是T1.当我们自己手动在下面做了一个更新之后,它 ...