浏览代码

fix:增加api mysql等数据类型

liaoyitao 6 月之前
父节点
当前提交
504cc4f214

+ 7 - 0
pom.xml

@@ -138,6 +138,13 @@
138 138
             <groupId>com.zaxxer</groupId>
139 139
             <artifactId>HikariCP</artifactId>
140 140
         </dependency>
141
+        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
142
+        <dependency>
143
+            <groupId>mysql</groupId>
144
+            <artifactId>mysql-connector-java</artifactId>
145
+            <version>8.0.33</version>
146
+        </dependency>
147
+
141 148
     </dependencies>
142 149
 
143 150
     <build>

+ 3 - 2
src/main/java/com/lqkj/cmlcp/module/api/domain/ApiInfo.java

@@ -1,5 +1,6 @@
1 1
 package com.lqkj.cmlcp.module.api.domain;
2 2
 
3
+import com.alibaba.fastjson2.JSONArray;
3 4
 import com.alibaba.fastjson2.JSONObject;
4 5
 import io.hypersistence.utils.hibernate.type.json.JsonType;
5 6
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -47,10 +48,10 @@ public class ApiInfo {
47 48
     @Type(JsonType.class)
48 49
     @Column(name = "data", columnDefinition = "jsonb")
49 50
     @Schema(description = "请求体")
50
-    private JSONObject data;
51
+    private JSONArray data;
51 52
 
52 53
     @Column(name = "type")
53
-    @Schema(description = "api类型, 1 rest; 2 static")
54
+    @Schema(description = "api类型, 1 rest; 2 static; 3 直接查询数据库")
54 55
     private Integer type;
55 56
 
56 57
 }

+ 48 - 1
src/main/java/com/lqkj/cmlcp/module/api/service/impl/ApiInfoServiceImpl.java

@@ -1,5 +1,7 @@
1 1
 package com.lqkj.cmlcp.module.api.service.impl;
2 2
 
3
+import com.alibaba.fastjson2.JSONArray;
4
+import com.alibaba.fastjson2.JSONObject;
3 5
 import com.lqkj.cmlcp.module.api.domain.ApiInfo;
4 6
 import com.lqkj.cmlcp.module.api.repository.ApiInfoRepository;
5 7
 import com.lqkj.cmlcp.module.api.service.ApiInfoService;
@@ -8,6 +10,10 @@ import org.springframework.stereotype.Service;
8 10
 import org.springframework.transaction.annotation.Propagation;
9 11
 import org.springframework.transaction.annotation.Transactional;
10 12
 
13
+import java.sql.Connection;
14
+import java.sql.DriverManager;
15
+import java.sql.ResultSet;
16
+import java.sql.Statement;
11 17
 import java.util.List;
12 18
 
13 19
 @Service
@@ -20,6 +26,7 @@ public class ApiInfoServiceImpl implements ApiInfoService {
20 26
     @Override
21 27
     @Transactional
22 28
     public void saveApi(ApiInfo apiInfo) {
29
+        if (apiInfo.getType().equals(3)) apiInfo.setData(null);
23 30
         apiInfoRepository.save(apiInfo);
24 31
     }
25 32
 
@@ -35,6 +42,46 @@ public class ApiInfoServiceImpl implements ApiInfoService {
35 42
 
36 43
     @Override
37 44
     public ApiInfo findById(Integer id) {
38
-        return apiInfoRepository.findById(id).get();
45
+        ApiInfo apiInfo = apiInfoRepository.findById(id).get();
46
+        switch (apiInfo.getType()) {
47
+            case 3 -> encapsuLationDbData(apiInfo);
48
+            case 4 -> System.out.println("暂不支持该类型");
49
+        }
50
+        return apiInfo;
51
+    }
52
+
53
+    private void encapsuLationDbData(ApiInfo apiInfo) {
54
+        if (apiInfo.getData() != null) return;
55
+        JSONObject params = apiInfo.getParams();
56
+        String url = params.get("url").toString();
57
+        String user = params.get("user").toString();
58
+        String password = params.get("password").toString();
59
+        try {
60
+            // 建立数据库连接
61
+            Class.forName(params.get("driver").toString());
62
+            Connection conn = DriverManager.getConnection(url, user, password);
63
+            // 创建Statement对象来执行SQL语句
64
+            Statement stmt = conn.createStatement();
65
+            // 执行查询并获取结果
66
+            ResultSet rs = stmt.executeQuery(params.get("sql").toString());
67
+            // 遍历结果集
68
+            JSONArray objects = new JSONArray();
69
+            while (rs.next()) {
70
+                JSONObject jsonObject = new JSONObject();
71
+                for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
72
+                    String key = rs.getMetaData().getColumnName(i);
73
+                    jsonObject.put(key, rs.getObject(key));
74
+                }
75
+                objects.add(jsonObject);
76
+            }
77
+            apiInfo.setData(objects);
78
+            // 关闭结果集、Statement和连接
79
+            rs.close();
80
+            stmt.close();
81
+            conn.close();
82
+            apiInfoRepository.save(apiInfo);
83
+        } catch (Exception e) {
84
+            e.printStackTrace();
85
+        }
39 86
     }
40 87
 }

+ 16 - 16
src/main/resources/application-install.yml

@@ -12,22 +12,22 @@ server:
12 12
     max-swallow-size: 1000MB
13 13
     max-http-form-post-size: 1000MB
14 14
 spring:
15
-  data:
16
-    redis:
17
-      host: 127.0.0.1
18
-      database: 0
19
-      port: 6379
20
-      connect-timeout: 10s
21
-      lettuce:
22
-        pool:
23
-          # 连接池最大连接数
24
-          max-active: 200
25
-          # 连接池最大阻塞等待时间(使用负值表示没有限制)
26
-          max-wait: -1ms
27
-          # 连接池中的最大空闲连接
28
-          max-idle: 10
29
-          # 连接池中的最小空闲连接
30
-          min-idle: 0
15
+#  data:
16
+#    redis:
17
+#      host: 127.0.0.1
18
+#      database: 0
19
+#      port: 6379
20
+#      connect-timeout: 10s
21
+#      lettuce:
22
+#        pool:
23
+#          # 连接池最大连接数
24
+#          max-active: 200
25
+#          # 连接池最大阻塞等待时间(使用负值表示没有限制)
26
+#          max-wait: -1ms
27
+#          # 连接池中的最大空闲连接
28
+#          max-idle: 10
29
+#          # 连接池中的最小空闲连接
30
+#          min-idle: 0
31 31
   application:
32 32
     name: CMLCP-SERVER
33 33
   servlet: