public class QueryGenerater { public static String generateFunctionQuery(String n, List<Map<String, Object>> data) { var s = "insert into "; s.concat(n); s.concat(" "); s.concat("(id, name, create_time, status) values "); for (Map<String, Object> _data: data){ s.concat("('"); s.concat((String) _data.get("id")); s.concat("','"); s.concat((String) _data.get("name")); s.concat("','"); s.concat((String) _data.get("create_time")); s.concat("','"); s.concat((String) _data.get("status")); s.concat("),"); } return s.substring(0, s.length() - 1); } }请优化这段代码
时间: 2024-01-10 08:03:56 浏览: 28
这段代码可以进行如下优化:
1. 使用 StringBuilder 类型来拼接字符串,性能更高。
2. 使用参数化查询,避免 SQL 注入攻击。
3. 将字符串连接操作合并到一起,减少了字符串对象的创建和垃圾回收。
重写后的代码如下:
```
public class QueryGenerater {
public static String generateFunctionQuery(String n, List<Map<String, Object>> data) {
StringBuilder sb = new StringBuilder();
sb.append("insert into ").append(n).append(" (id, name, create_time, status) values ");
for (Map<String, Object> _data : data) {
sb.append(" (?, ?, ?, ?),");
}
sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号
return sb.toString();
}
}
```
请注意,这个方法只是生成 SQL 查询语句,而不是执行查询语句,因此必须在另一个方法中执行查询语句。在执行查询语句时,应该使用参数化查询,以避免 SQL 注入攻击。
相关问题
通过stream流将list<map<string,object>>分组转为map<map<string,object>>
可以使用Java 8的Stream流来将list<map<string,object>>分组转换为map<map<string,object>>。以下是一个示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("key1", "value1");
map1.put("key2", "value2");
map1.put("key3", "value3");
Map<String, Object> map2 = new HashMap<>();
map2.put("key1", "value4");
map2.put("key2", "value5");
map2.put("key3", "value6");
list.add(map1);
list.add(map2);
Map<Map<String, Object>, List<Map<String, Object>>> groupedMap = list.stream()
.collect(Collectors.groupingBy(map -> {
Map<String, Object> groupedKeyMap = new HashMap<>();
groupedKeyMap.put("key1", map.get("key1"));
return groupedKeyMap;
}));
System.out.println(groupedMap);
}
}
```
在这个例子中,我们使用`Collectors.groupingBy`方法来根据指定的键进行分组。我们创建一个新的`Map<String, Object>`作为分组的键,然后使用它来创建包含相应分组的`Map<Map<String, Object>, List<Map<String, Object>>>`。最后,我们打印出分组后的结果。
请注意,这只是一个示例代码,具体实现可能需要根据实际需求进行调整。
List<Map<String, Object>> 转换为class
将 `List<Map<String, Object>>` 转换为 `class` 类型需要进行反射操作,具体步骤如下:
1. 定义一个类,类中包含了 `List<Map<String, Object>>` 中所包含的所有字段。
2. 使用反射,获取该类的所有字段。
3. 遍历 `List<Map<String, Object>>`,将其中的每个 `Map` 对象转换为该类的一个实例对象。
4. 遍历每个实例对象,使用反射为其设置字段值。
5. 将所有实例对象放入一个 `List` 中,返回即可。
以下是一个示例代码:
```java
public static <T> List<T> convertToList(List<Map<String, Object>> mapList, Class<T> clazz) throws Exception {
List<T> result = new ArrayList<>();
for (Map<String, Object> map : mapList) {
T instance = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
field.set(instance, map.get(field.getName()));
}
result.add(instance);
}
return result;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)