Neo4j数据库下载
项目开始前需要下载好Neo4j数据库,并成功启动。关于Neo4j的下载启动可以参考这篇博客:Neo4j安装使用。
整合Neo4j
需要导入的依赖
需要导入SpringBoot需要的依赖和neo4j的依赖:
<dependencies>
<!--springboot相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.5.2</version>
</dependency>
<!-- neo4j -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
<version>2.5.2</version>
</dependency>
</dependencies>
配置信息
application.yml
配置连接Neo4j数据库:
spring:
neo4j:
uri: bolt://localhost:7687 #注意是bolt的端口
authentication:
username: neo4j #Neo4j用户名
password: neo4j #Neo4j连接密码
还需要关闭Neo4j的认证,在Neo4j配置信息中进行修改,conf
文件夹目录下的neo4j.conf
文件里面进行如下图所示的将认证设置为false
,保存后重新启动Neo4j数据库。
- 创建和
Neo4j
数据库对应的实体类。
例如下图所示Neo4j数据库中medicinal_materials
结点和结点的属性。
创建对应的实体类:
@Node(labels = "medicinal_materials")
public class MaterialNode {
@Id
@GeneratedValue
private Long id;
@Property("name")
private String name;
@Property("effect")
private String effect;
@Property("usage")
private String usage;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEffect() {
return effect;
}
public void setEffect(String effect) {
this.effect = effect;
}
public String getUsage() {
return usage;
}
public void setUsage(String usage) {
this.usage = usage;
}
}
- 创建对应的
Repository
接口
@Repository
public interface MedicinalMaterialRepository extends Neo4jRepository<MedicinalMaterialNode,Long> {
/**
* 获得全部方剂结点
* @return
*/
@Query("MATCH (n:medicinal_materials) RETURN n ")
List<MedicinalMaterialNode> getAllMedicinalMaterialNode();
/**
* 分页查询 模糊匹配
* @param current
* @param size
* @param name
* @return
*/
@Query("MATCH (n:medicinal_materials) where n.name =~ ('.*'+{2}+'.*') RETURN n ORDER BY n.id DESC SKIP {0} LIMIT {1}")
List<MedicinalMaterialNode> getMedicinalMaterialNodeByName(Integer current, Integer size, String name);
/**
* 药名查询 模糊查询
* @param name
* @return
*/
@Query("MATCH (n:medicinal_materials) where n.name =~ ('.*'+{0}+'.*') RETURN n ")
List<MedicinalMaterialNode> getMedicinalMaterialNodeNumber(String name);
/**
* 通过id查询
* @param id
* @return
*/
@Query("MATCH (n:medicinal_materials) where id(n)={0} RETURN n")
MedicinalMaterialNode getMedicinalMaterialNodeById(Long id);
}
【易错点】 上面查询返回的类型都是对应的MedicinalMaterialNode
类型,如果你写的查询语句返回的是其他结点类型,就会报Neo4j数据库该结点不存在的错误,这点需要注意。
- 创建
Service
类
@Service
public class MedicinalMaterialService {
@Autowired
private MedicinalMaterialRepository medicinalMaterialRepository;
/**
* 获得所有药材结点
* @return
*/
public List<MedicinalMaterialNode> getAllMedicinalMaterialNode() {
return medicinalMaterialRepository.getAllMedicinalMaterialNode();
}
}
- 创建
controller
类
@RestController
public class PrescriptionRetrievalController {
@Autowired
private MedicinalMaterialService medicinalMaterialService ;
/**
* 获取全部药材
* @return
*/
@GetMapping("/medicine-getAll")
public Result getAllMedicineNode(){
List<MedicinalMaterialNode> medicinalMaterialNode = medicinalMaterialService .getAllMedicinalMaterialNode();
return Result.ok().data("medicines",medicinalMaterialNode);
}
- 启动类配置
@SpringBootApplication
@EnableNeo4jRepositories(basePackages ="com.gaolang.dao")
@EntityScan(basePackages = "com.gaolang.domain")
public class SpringbootNeo4jApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootNeo4jApplication.class, args);
}
}
启动测试
获得如下图所示数据: