sql执行器开发
This commit is contained in:
@@ -1,19 +1,35 @@
|
||||
package com.zyplayer.doc.db.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.serializer.SerializeConfig;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.zyplayer.doc.core.annotation.AuthMan;
|
||||
import com.zyplayer.doc.core.json.ResponseJson;
|
||||
import com.zyplayer.doc.core.util.StringUtil;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.DbFavorite;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.DbHistory;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.DbFavoriteMapper;
|
||||
import com.zyplayer.doc.data.service.manage.DbFavoriteService;
|
||||
import com.zyplayer.doc.data.service.manage.DbHistoryService;
|
||||
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteResult;
|
||||
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
|
||||
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* sql执行器
|
||||
@@ -28,13 +44,23 @@ public class DbSqlExecutorController {
|
||||
|
||||
@Resource
|
||||
SqlExecutor sqlExecutor;
|
||||
@Resource
|
||||
DbHistoryService dbHistoryService;
|
||||
@Resource
|
||||
DbFavoriteService dbFavoriteService;
|
||||
|
||||
@PostMapping(value = "/execute")
|
||||
public ResponseJson execute(Long sourceId, String executeId, String sql, String params) {
|
||||
Map<String, Object> paramMap = JSON.parseObject(params);
|
||||
if (StringUtils.isBlank(sql)) {
|
||||
return DocDbResponseJson.warn("执行的SQL不能为空");
|
||||
}
|
||||
try {
|
||||
Map<String, Object> paramMap = JSON.parseObject(params);
|
||||
ExecuteResult executeResult = sqlExecutor.execute(sourceId, executeId, sql, paramMap);
|
||||
String resultJsonStr = JSON.toJSONString(executeResult, SerializerFeature.WriteMapNullValue);
|
||||
SerializeConfig mapping = new SerializeConfig();
|
||||
mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
|
||||
mapping.put(Timestamp.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
|
||||
String resultJsonStr = JSON.toJSONString(executeResult, mapping, SerializerFeature.WriteMapNullValue);
|
||||
return DocDbResponseJson.ok(resultJsonStr);
|
||||
} catch (Exception e) {
|
||||
return DocDbResponseJson.warn(StringUtil.getException(e));
|
||||
@@ -46,5 +72,43 @@ public class DbSqlExecutorController {
|
||||
sqlExecutor.cancel(executeId);
|
||||
return DocDbResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping(value = "/history/list")
|
||||
public ResponseJson historyList() {
|
||||
UpdateWrapper<DbHistory> wrapper = new UpdateWrapper<>();
|
||||
wrapper.orderByDesc("id");
|
||||
List<DbHistory> favoriteList = dbHistoryService.list(wrapper);
|
||||
return DocDbResponseJson.ok(favoriteList);
|
||||
}
|
||||
|
||||
@PostMapping(value = "/favorite/list")
|
||||
public ResponseJson favoriteList() {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
UpdateWrapper<DbFavorite> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("create_user_id", currentUser.getUserId());
|
||||
wrapper.eq("yn", 1);
|
||||
wrapper.orderByDesc("id");
|
||||
List<DbFavorite> favoriteList = dbFavoriteService.list(wrapper);
|
||||
return DocDbResponseJson.ok(favoriteList);
|
||||
}
|
||||
|
||||
@PostMapping(value = "/favorite/add")
|
||||
public ResponseJson addFavorite(DbFavorite dbFavorite) {
|
||||
Integer yn = Optional.ofNullable(dbFavorite.getYn()).orElse(1);
|
||||
if (yn == 1 && StringUtils.isBlank(dbFavorite.getContent())) {
|
||||
return DocDbResponseJson.warn("收藏的SQL不能为空");
|
||||
}
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (dbFavorite.getId() != null && dbFavorite.getId() > 0) {
|
||||
dbFavoriteService.updateById(dbFavorite);
|
||||
} else {
|
||||
dbFavorite.setCreateTime(new Date());
|
||||
dbFavorite.setCreateUserId(currentUser.getUserId());
|
||||
dbFavorite.setCreateUserName(currentUser.getUsername());
|
||||
dbFavorite.setYn(1);
|
||||
dbFavoriteService.save(dbFavorite);
|
||||
}
|
||||
return DocDbResponseJson.ok();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
package com.zyplayer.doc.db.framework.db.mapper.base;
|
||||
|
||||
import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.DbFavorite;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.DbHistory;
|
||||
import com.zyplayer.doc.data.service.manage.DbFavoriteService;
|
||||
import com.zyplayer.doc.data.service.manage.DbHistoryService;
|
||||
import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean;
|
||||
import com.zyplayer.doc.db.framework.db.bean.DatabaseRegistrationBean;
|
||||
import com.zyplayer.doc.db.framework.db.interceptor.SqlLogUtil;
|
||||
@@ -33,6 +39,8 @@ public class SqlExecutor {
|
||||
|
||||
@Resource
|
||||
DatabaseRegistrationBean databaseRegistrationBean;
|
||||
@Resource
|
||||
DbHistoryService dbHistoryService;
|
||||
|
||||
// 执行中的PreparedStatement信息,用于强制取消执行
|
||||
private static final Map<String, PreparedStatement> statementMap = new ConcurrentHashMap<>();
|
||||
@@ -80,7 +88,11 @@ public class SqlExecutor {
|
||||
StaticSqlSource parse = (StaticSqlSource) sqlSourceBuilder.parse(sql, Object.class, paramMap);
|
||||
BoundSql boundSql = parse.getBoundSql(new Object());
|
||||
sql = boundSql.getSql();
|
||||
logger.info("sql ==> {}", SqlLogUtil.getSqlString(paramMap, boundSql));
|
||||
String sqlStr = SqlLogUtil.getSqlString(paramMap, boundSql);
|
||||
logger.info("sql ==> {}", sqlStr);
|
||||
// 保留历史记录
|
||||
dbHistoryService.saveHistory(sqlStr);
|
||||
|
||||
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
|
||||
PreparedStatement preparedStatement = null;
|
||||
// 执行查询
|
||||
@@ -100,8 +112,8 @@ public class SqlExecutor {
|
||||
while (resultSet.next()) {
|
||||
Map<String, Object> resultMap = new LinkedHashMap<>();
|
||||
ResultSetMetaData metaData = resultSet.getMetaData();
|
||||
for (int i = 0; i < metaData.getColumnCount(); i++) {
|
||||
resultMap.put(metaData.getColumnName(i + 1), resultSet.getObject(i + 1));
|
||||
for (int i = 1; i < metaData.getColumnCount() + 1; i++) {
|
||||
resultMap.put(metaData.getColumnName(i), resultSet.getObject(i));
|
||||
}
|
||||
if (handler != null) {
|
||||
handler.handleResult(resultMap);
|
||||
|
||||
Reference in New Issue
Block a user