###搭建MyBatis连接Neo4j:
- 创建一个Java Project,下载需要的包
- 三个jar包:
log4j-1.2.17.jar
;mybatis-3.2.6.jar
;neo4j-jdbc-driver-3.1.0.jar
版本不要求
- 三个jar包:
- 这是我的代码框架
- 先配置properties文件
log4j.properties
记录日志信息,暂时不用管;neo4j.properties
记录数据库信息,文件名字可以以你的喜好随便改,内容如下:
driver=org.neo4j.jdbc.Driver
url=jdbc:neo4j:http://localhost:7474/
username=neo4j
password=neo4j
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
- 然后编写
mybatis.cfg.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>
<!-- 引入外部配置文件,这里配置文件名字"neo4j.properties"与你上面的命名要一致 -->
<properties resource="neo4j.properties"></properties>
<typeAliases>
<!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名
<typeAliase type="com.cy.mybatis.beans.UserBean" alias="UserBean"/> -->
<!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名 -->
<package name="beans"/>
</typeAliases>
<!-- 环境 -->
<!-- 配置mybatis运行环境 -->
<environments default="development">
<!-- 环境变量 -->
<environment id="development">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC"/>
<!-- 数据源 -->
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 告知映射文件方式1,一个一个的配置
<mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
<package name="mapper"/>
</mappers>
</configuration>
-
编写mapper
UserMapper.java
:
public interface UserMapper {
/**
* 查询并计算指定ID的节点的度
*
* @param id
* @return
* @throws Exception
*/
public UserBean countUser(int id) throws Exception;
}
-
UserMapper.xml
(下面的CQL语句中的**#{id}**就是可以通过Java变量传进去的):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.UserMapper">
<!-- 自定义结果集,由结果集需要的字段再去建立专门的实体类UserBean来接收 -->
<resultMap id="userMap" type="UserBean">
<id property="id" column="id" javaType="java.lang.Integer"/>
<result property="released" column="released" javaType="java.lang.String" />
<result property="tagline" column="tagline" javaType="java.lang.String" />
<result property="title" column="title" javaType="java.lang.String" />
<result property="degree" column="degree" javaType="java.lang.Integer" />
</resultMap>
<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 -->
<!--这里的id必须与 UserMapper接口里的函数相对应 -->
<select id="countUser" parameterType="int" resultMap="userMap">
MATCH ()-[p]->(n:Movie) where id(n)=#{id} RETURN id(n) as id,n.released as released,n.tagline as tagline,n.title as title,count(p) as degree
</select>
<!--这里CQL语句返回的字段名必须与上面定义的结果集的字段名一致,若不一致需要重命名,否则会报空指针异常 -->
</mapper>
- 编写实体类
UserBean.java
,与结果集一致:
public class UserBean {
private int id;
private String released;
private String tagline;
private String title;
private int degree;
public UserBean() {
}
@Override
public String toString() {
return "UserBean [id=" + id + ", released=" + released + ", tagline=\"" + tagline + "\", title=\"" + title + "\", degree="+ degree + "]";
}
- 编写测试类
UserService.java
:
public class UserService {
public static void main(String[] args) {
for(int i=0;i<30;i++) {
countUser(i);
}
}
//计算节点入度,出度类似,改一下CQL语句即可
private static void countUser(int id) {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
try {
UserBean movie = mapper.countUser(id);
System.out.println(movie.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
}
- 程序运行之前,需要先开启neo4j,如果配置了环境变量的话,打开cmd输入
neo4j.bat console
即可,不要关闭cmd窗口