diff --git a/pom.xml b/pom.xml
index 4e427a8..c01e447 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,6 +32,26 @@
spring-boot-starter-test
test
+
+
+
+ com.vesoft
+ client
+ 3.8.0
+
+
+
+ org.nebula-contrib
+ ngbatis
+ 2.0.0-beta
+
+
+ com.vesoft
+ client
+
+
+
+
@@ -44,6 +64,7 @@
org.projectlombok
lombok
+ 1.18.24
diff --git a/src/main/java/com/idata/tools/ngbatisdemo/NgbatisDemoApplication.java b/src/main/java/com/idata/tools/ngbatisdemo/NgbatisDemoApplication.java
index 0fbddb6..aa9763c 100644
--- a/src/main/java/com/idata/tools/ngbatisdemo/NgbatisDemoApplication.java
+++ b/src/main/java/com/idata/tools/ngbatisdemo/NgbatisDemoApplication.java
@@ -1,13 +1,37 @@
package com.idata.tools.ngbatisdemo;
+import com.idata.tools.ngbatisdemo.dao.UserDao;
+import com.idata.tools.ngbatisdemo.pojo.User;
+import com.idata.tools.ngbatisdemo.service.UserService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.context.ConfigurableApplicationContext;
-@SpringBootApplication
+import java.util.List;
+
+/**
+ * @author: ChenYaWei
+ */
+@SpringBootApplication(scanBasePackages = { "org.nebula", "com.idata.tools.ngbatisdemo"}, exclude = DataSourceAutoConfiguration.class)
+//@SpringBootApplication
public class NgbatisDemoApplication {
public static void main(String[] args) {
- SpringApplication.run(NgbatisDemoApplication.class, args);
+ ConfigurableApplicationContext context = SpringApplication.run(NgbatisDemoApplication.class, args);
+ UserService userService = context.getBean(UserService.class);
+ userService.demos();
+
+ UserDao userDao = context.getBean(UserDao.class);
+ List list = userDao.selectListString();
+ list.forEach(System.out::println);
+
+ User user = new User();
+ user.setName("james");
+ System.out.println(userDao.selectUser());
+ System.out.println("===============");
+
+ System.out.println(userDao.selectListString());
}
}
diff --git a/src/main/java/com/idata/tools/ngbatisdemo/config/NebulaGraphProperties.java b/src/main/java/com/idata/tools/ngbatisdemo/config/NebulaGraphProperties.java
new file mode 100644
index 0000000..197c1cb
--- /dev/null
+++ b/src/main/java/com/idata/tools/ngbatisdemo/config/NebulaGraphProperties.java
@@ -0,0 +1,32 @@
+//package com.idata.tools.ngbatisdemo.config;
+//
+//import lombok.Data;
+//import org.springframework.boot.context.properties.ConfigurationProperties;
+//import org.springframework.boot.context.properties.EnableConfigurationProperties;
+//import org.springframework.context.annotation.Configuration;
+//
+//
+//@Configuration
+//@ConfigurationProperties(prefix = "nebula")
+//@EnableConfigurationProperties(NebulaGraphProperties.class)
+//@Data
+////@RefreshScope
+//public class NebulaGraphProperties {
+// private String userName;
+// private String password;
+// /**
+// * 格式:ip:port
+// */
+// private String hostAddresses;
+// private int minConnSize;
+// private int maxConnSize;
+// private int timeout;
+// private int idleTime;
+// private String spaceName;
+// private Integer limit;
+// private Boolean isMatch;
+// private Boolean cache;
+// private int cacheTime;
+// private int startNum;
+// private int startLimit;
+//}
diff --git a/src/main/java/com/idata/tools/ngbatisdemo/config/NebulaSessionPoolConfig.java b/src/main/java/com/idata/tools/ngbatisdemo/config/NebulaSessionPoolConfig.java
new file mode 100644
index 0000000..2fd2c52
--- /dev/null
+++ b/src/main/java/com/idata/tools/ngbatisdemo/config/NebulaSessionPoolConfig.java
@@ -0,0 +1,36 @@
+//package com.idata.tools.ngbatisdemo.config;
+//
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//
+///**
+// *
+// * 配置全局唯一session链接
+// **/
+//@Configuration
+//public class NebulaSessionPoolConfig {
+//
+// private final NebulaGraphProperties nebulaGraphProperties;
+//
+// @Autowired
+// public NebulaSessionPoolConfig(NebulaGraphProperties nebulaGraphProperties) {
+// this.nebulaGraphProperties = nebulaGraphProperties;
+// }
+//
+//// @Bean
+//// public Session session() throws Exception {
+//// SessionPool sessionPool = new SessionPool(5, 2, nebulaGraphProperties.getHostAddresses(),
+//// nebulaGraphProperties.getUserName(), nebulaGraphProperties.getPassword());
+//// return sessionPool.borrow(true);
+//// }
+//
+// @Bean
+// public SessionPool sessionPool() throws Exception {
+// return new SessionPool(nebulaGraphProperties.getMaxConnSize(),
+// nebulaGraphProperties.getMinConnSize(), nebulaGraphProperties.getHostAddresses(),
+// nebulaGraphProperties.getUserName(), nebulaGraphProperties.getPassword());
+// }
+//
+//
+//}
diff --git a/src/main/java/com/idata/tools/ngbatisdemo/config/SessionPool.java b/src/main/java/com/idata/tools/ngbatisdemo/config/SessionPool.java
new file mode 100644
index 0000000..9ae6722
--- /dev/null
+++ b/src/main/java/com/idata/tools/ngbatisdemo/config/SessionPool.java
@@ -0,0 +1,120 @@
+//package com.idata.tools.ngbatisdemo.config;
+//
+//
+//import com.idata.tools.ngbatisdemo.log.YLogger;
+//import com.idata.tools.ngbatisdemo.log.YLoggerFactory;
+//import com.vesoft.nebula.client.graph.NebulaPoolConfig;
+//import com.vesoft.nebula.client.graph.data.HostAddress;
+//import com.vesoft.nebula.client.graph.exception.AuthFailedException;
+//import com.vesoft.nebula.client.graph.exception.ClientServerIncompatibleException;
+//import com.vesoft.nebula.client.graph.exception.IOErrorException;
+//import com.vesoft.nebula.client.graph.exception.NotValidConnectionException;
+//import com.vesoft.nebula.client.graph.net.NebulaPool;
+//import com.vesoft.nebula.client.graph.net.Session;
+//
+//import javax.annotation.PreDestroy;
+//import java.net.UnknownHostException;
+//import java.util.Arrays;
+//import java.util.List;
+//import java.util.Queue;
+//import java.util.concurrent.LinkedBlockingQueue;
+//import java.util.stream.Collectors;
+//
+///**
+// * @author
+// * SessionPool
+// */
+//public class SessionPool {
+//
+// private final YLogger logger = YLoggerFactory.getLogger(SessionPool.class);
+// /**
+// * 创建连接池
+// *
+// * @param maxCountSession 默认创建连接数
+// * @param minCountSession 最大创建连接数
+// * @param hostAndPort 机器端口列表
+// * @param userName 用户名
+// * @param passWord 密码
+// * @throws UnknownHostException
+// * @throws NotValidConnectionException
+// * @throws IOErrorException
+// * @throws AuthFailedException
+// */
+// public SessionPool(int maxCountSession, int minCountSession, String hostAndPort, String userName, String passWord) throws UnknownHostException, NotValidConnectionException, IOErrorException, AuthFailedException, ClientServerIncompatibleException {
+// this.minCountSession = minCountSession;
+// this.maxCountSession = maxCountSession;
+// this.userName = userName;
+// this.passWord = passWord;
+// this.queue = new LinkedBlockingQueue<>(minCountSession);
+// this.pool = this.initGraphClient(hostAndPort, maxCountSession, minCountSession);
+// initSession();
+// }
+//
+// public Session borrow(Boolean reconnect) {
+// Session se = queue.poll();
+// if (se != null) {
+// return se;
+// }
+// try {
+// return this.pool.getSession(userName, passWord, reconnect);
+// } catch (Exception e) {
+// logger.error(this.getClass(), "borrow", null,"execute borrow session fail", e);
+// throw new RuntimeException(e);
+// }
+// }
+//
+// @PreDestroy
+// public void release() {
+// Queue queue = this.queue;
+// for (Session se : queue) {
+// if (se != null) {
+// boolean success = this.queue.offer(se);
+// if (!success) {
+// se.release();
+// }
+// }
+// }
+// }
+//
+// public void close() {
+// this.pool.close();
+// }
+//
+// private void initSession() throws NotValidConnectionException, IOErrorException, AuthFailedException, ClientServerIncompatibleException {
+// for (int i = 0; i < minCountSession; i++) {
+// queue.offer(this.pool.getSession(userName, passWord, true));
+// }
+// }
+//
+// private NebulaPool initGraphClient(String hostAndPort, int maxConnSize, int minCount) throws UnknownHostException {
+// List hostAndPorts = getGraphHostPort(hostAndPort);
+// NebulaPool pool = new NebulaPool();
+// NebulaPoolConfig nebulaPoolConfig = new NebulaPoolConfig();
+// nebulaPoolConfig = nebulaPoolConfig.setMaxConnSize(maxConnSize);
+// nebulaPoolConfig = nebulaPoolConfig.setMinConnSize(minCount);
+// nebulaPoolConfig = nebulaPoolConfig.setIdleTime(1000 * 600);
+// pool.init(hostAndPorts, nebulaPoolConfig);
+// return pool;
+// }
+//
+// private List getGraphHostPort(String hostAndPort) {
+// String[] split = hostAndPort.split(",");
+// return Arrays.stream(split).map(item -> {
+// String[] splitList = item.split(":");
+// return new HostAddress(splitList[0], Integer.parseInt(splitList[1]));
+// }).collect(Collectors.toList());
+// }
+//
+// private Queue queue;
+//
+// private String userName;
+//
+// private String passWord;
+//
+// private int minCountSession;
+//
+// private int maxCountSession;
+//
+// private NebulaPool pool;
+//
+//}
diff --git a/src/main/java/com/idata/tools/ngbatisdemo/controller/UserController.java b/src/main/java/com/idata/tools/ngbatisdemo/controller/UserController.java
new file mode 100644
index 0000000..d87af19
--- /dev/null
+++ b/src/main/java/com/idata/tools/ngbatisdemo/controller/UserController.java
@@ -0,0 +1,31 @@
+package com.idata.tools.ngbatisdemo.controller;
+
+import com.idata.tools.ngbatisdemo.pojo.User;
+import com.idata.tools.ngbatisdemo.service.UserService;
+import com.idata.tools.ngbatisdemo.service.UserServiceImpl;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @description:
+ * @author: ChenYawei
+ * @date: 2025/3/17 16:24
+ */
+
+@RestController
+@RequestMapping("/test")
+public class UserController {
+
+ private final UserServiceImpl userService;
+
+ public UserController(UserServiceImpl userService) {
+ this.userService = userService;
+ }
+
+ @GetMapping("/user")
+ public String test() {
+ userService.demos();
+ return "hello";
+ }
+}
diff --git a/src/main/java/com/idata/tools/ngbatisdemo/dao/UserDao.java b/src/main/java/com/idata/tools/ngbatisdemo/dao/UserDao.java
new file mode 100644
index 0000000..00c472d
--- /dev/null
+++ b/src/main/java/com/idata/tools/ngbatisdemo/dao/UserDao.java
@@ -0,0 +1,28 @@
+package com.idata.tools.ngbatisdemo.dao;
+
+import com.idata.tools.ngbatisdemo.pojo.User;
+import org.nebula.contrib.ngbatis.proxy.NebulaDaoBasic;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description: xxx
+ * @author: ChenYaWei
+ * @date: 2025/3/17 15:24
+ */
+@Component
+public interface UserDao extends NebulaDaoBasic {
+
+ // new features from v1.2.0
+ Integer returnAge(@Param("User")User User);
+
+ User selectUser();
+ User selectByUser(User user);
+ List selectAgeGt(Integer age);
+ List selectListString();
+ List