1.使用Mybatis操作Neo4j資料庫,Cql陳述句:MATCH (N{NAME:'楊冪',BORN:34}) SET N:OAUTH_USER RETURN N,可以執行。
2.其中Cql有兩個引數傳入,引數都是String型別:
2.1 #{node}:{NAME:'楊冪',BORN:34}
2.2 #{labelCode}:N:OAUTH_USER
3.如果使用${}接受引數,正常執行Cql陳述句,如果使用#{}接受引數則拋錯:

看內容是預處理失敗了。我懷疑是引數里面包含了{}引起的。
4.物體類
/*節點標簽管理*/
public class LabelCenter {
/*節點*/
String node;
/*關系編碼*/
String labelCode;
//region get and set
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
public String getLabelCode() {
return labelCode;
}
public void setLabelCode(String labelCode) {
this.labelCode = labelCode;
}
//endregion get and set
}
5.mapp.xml
<?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="com.eee.neo4jmybatis.mapper.LabelCenterMapper">
<!--新增-->
<insert id="add" parameterType="com.eee.neo4jmybatis.base.LabelCenter">
MATCH (N#{node}) SET N:#{labelCode} RETURN N
</insert>
<!--洗掉用戶資訊-->
<delete id="delete" parameterType="com.eee.neo4jmybatis.base.LabelCenter">
MATCH (N#{node}) REMOVE N:#{labelCode} RETURN N
</delete>
</mapper>
5.mapper.java
package com.eee.neo4jmybatis.mapper;
import com.eee.neo4jmybatis.base.LabelCenter;
public interface LabelCenterMapper {
/*新增*/
public int add(LabelCenter labelCenter);
/*洗掉*/
public int delete(LabelCenter labelCenter);
}
6. 測驗java
@Test
public void delete() {
//指向XML組態檔中的n4oj節點
SqlSession sqlSession = Neo4jConnectionFactory.getSqlSessionFactory("neo4j")
.openSession();
try {
LabelCenterMapper labelCenterMapper = sqlSession.getMapper(LabelCenterMapper.class);
LabelCenter labelCenter = new LabelCenter();
labelCenter.setNode("{NAME:'楊冪',BORN:34}");
labelCenter.setLabelCode(LabelEnum.OAUTH_USER.getCode());
int i = labelCenterMapper.delete(labelCenter);
sqlSession.commit();
System.out.println("i:" + i);
} finally {
sqlSession.close();
}
}
uj5u.com熱心網友回復:
我發現好像是是#{}沒有送值進去,但${}卻沒有問題uj5u.com熱心網友回復:
#{}可以[u]防止SQL注入,這種方式SQL陳述句是經過預編譯的,它是把#{}中間的引數轉義成字串,預編譯后,會動態決議成一個引數標記符 ?而使用${}在動態決議時候,會傳入引數字串,也就是 ‘?’。
簡單來說就是:
#{} 這種就是將引數直接賦值,也就編譯好SQL陳述句在直接將引數值賦上去
${} 這種就是將引數打上引號賦值,也就是先取值以后再去編譯SQL陳述句
而且SQL是弱型別的,所以一般中文不含 '' 執行是會報錯的。
(個人理解....)
uj5u.com熱心網友回復:
道理我都懂,但是不知道怎么解決這個問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39647.html
標籤:Java EE
上一篇:【JVM】JVM編譯優化問題
