工具类
import com.alibaba.fastjson.JSON;
import com.google.common.base.CaseFormat;
import org.influxdb.InfluxDB;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
/**
* @author 知乌啊
* @Description TODO
* @date 2022/10/19 11:15
* @Version 1.0
*/
@Component
public class InfluxUtil {
public <T> List<T> query(InfluxDB influxDB,Class<T> clazz, String sql) {
QueryResult results = influxDB.query(new Query(sql, "数据库名称"));
if (results != null) {
if (results.getResults() == null) {
return null;
}
List<Object> list = new ArrayList<>();
for (QueryResult.Result result : results.getResults()) {
List<QueryResult.Series> series = result.getSeries();
if (series == null) {
list.add(null);
continue;
}
for (QueryResult.Series serie : series) {
List<List<Object>> values = serie.getValues();
List<String> columns = serie.getColumns();
// 构建Bean
list.addAll(getQueryData(clazz, columns, values));
}
}
return JSON.parseArray(JSON.toJSONString(list), clazz);
}
return null;
}
/**
* 自动转换对应Pojo
*
* @param values
* @return
*/
public <T> List<T> getQueryData(Class<T> clazz, List<String> columns, List<List<Object>> values) {
List results = new ArrayList<>();
for (List<Object> list : values) {
BeanWrapperImpl bean = null;
Object result = null;
try {
result = clazz.newInstance();
bean = new BeanWrapperImpl(result);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
for (int i = 0; i < list.size(); i++) {
// 字段名
String filedName = columns.get(i);
//大写转小写,"_"不要,且"_"后面第一个字母大写
filedName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, filedName);
if (filedName.contains("Tag")) {
continue;
}
try {
Field field = clazz.getDeclaredField(filedName);
} catch (NoSuchFieldException e) {
continue;
}
// 值
Object value = list.get(i);
bean.setPropertyValue(filedName, value);
}
results.add(result);
}
return results;
}
}
调用
@Service
public class test{
@Autowired
private InfluxDB influxDB;
public void test1() {
String sql = "select * from t_name";
InfluxUtil influxUtil = new InfluxUtil();
List<POJO> dataList = influxUtil.query(influxDB,POJO.class, sql);
}
}