MyBatis框架连接Neo4j数据库并计算节点的度

###搭建MyBatis连接Neo4j:

  • 创建一个Java Project,下载需要的包
    • 三个jar包:log4j-1.2.17.jar;mybatis-3.2.6.jar;neo4j-jdbc-driver-3.1.0.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窗口

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值