显示指定数据库方言,移除方言硬编码

This commit is contained in:
whz 2024-03-17 00:37:13 +08:00
parent a1c513e058
commit 56eb42cadc
6 changed files with 42 additions and 32 deletions

View File

@ -35,6 +35,7 @@ import org.dromara.jpom.common.interceptor.PermissionInterceptor;
import org.dromara.jpom.common.validator.ValidatorItem; import org.dromara.jpom.common.validator.ValidatorItem;
import org.dromara.jpom.common.validator.ValidatorRule; import org.dromara.jpom.common.validator.ValidatorRule;
import org.dromara.jpom.configuration.AssetsConfig; import org.dromara.jpom.configuration.AssetsConfig;
import org.dromara.jpom.dialect.DialectUtil;
import org.dromara.jpom.func.BaseGroupNameController; import org.dromara.jpom.func.BaseGroupNameController;
import org.dromara.jpom.func.assets.model.MachineSshModel; import org.dromara.jpom.func.assets.model.MachineSshModel;
import org.dromara.jpom.func.assets.server.MachineSshServer; import org.dromara.jpom.func.assets.server.MachineSshServer;
@ -196,7 +197,7 @@ public class MachineSshController extends BaseGroupNameController {
Entity entity = Entity.create(); Entity entity = Entity.create();
entity.set("host", sshModel.getHost()); entity.set("host", sshModel.getHost());
entity.set("port", sshModel.getPort()); entity.set("port", sshModel.getPort());
entity.set("`user`", sshModel.getUser()); entity.set(DialectUtil.wrapField("user"), sshModel.getUser());
entity.set("connectType", sshModel.getConnectType()); entity.set("connectType", sshModel.getConnectType());
Opt.ofBlankAble(id).ifPresent(s -> entity.set("id", StrUtil.format(" <> {}", s))); Opt.ofBlankAble(id).ifPresent(s -> entity.set("id", StrUtil.format(" <> {}", s)));
boolean exists = machineSshServer.exists(entity); boolean exists = machineSshServer.exists(entity);

View File

@ -38,6 +38,7 @@ import org.dromara.jpom.common.ILoadEvent;
import org.dromara.jpom.common.ServerConst; import org.dromara.jpom.common.ServerConst;
import org.dromara.jpom.configuration.AssetsConfig; import org.dromara.jpom.configuration.AssetsConfig;
import org.dromara.jpom.cron.CronUtils; import org.dromara.jpom.cron.CronUtils;
import org.dromara.jpom.dialect.DialectUtil;
import org.dromara.jpom.func.assets.AssetsExecutorPoolService; import org.dromara.jpom.func.assets.AssetsExecutorPoolService;
import org.dromara.jpom.func.assets.model.MachineSshModel; import org.dromara.jpom.func.assets.model.MachineSshModel;
import org.dromara.jpom.func.system.service.ClusterInfoService; import org.dromara.jpom.func.system.service.ClusterInfoService;
@ -142,7 +143,7 @@ public class MachineSshServer extends BaseDbService<MachineSshModel> implements
where.set("host", value.getHost()); where.set("host", value.getHost());
where.set("port", value.getPort()); where.set("port", value.getPort());
// 关键词如果不加 ` 会查询不出结果 // 关键词如果不加 ` 会查询不出结果
where.set("`user`", value.getUser()); where.set(DialectUtil.wrapField("user"), value.getUser());
where.set("connectType", value.getConnectType()); where.set("connectType", value.getConnectType());
int update = sshService.update(entity, where); int update = sshService.update(entity, where);
Assert.state(update > 0, "更新 SSH 表机器id 失败:" + value.getName()); Assert.state(update > 0, "更新 SSH 表机器id 失败:" + value.getName());

View File

@ -28,6 +28,7 @@ import org.dromara.jpom.common.BaseServerController;
import org.dromara.jpom.common.Const; import org.dromara.jpom.common.Const;
import org.dromara.jpom.db.BaseDbCommonService; import org.dromara.jpom.db.BaseDbCommonService;
import org.dromara.jpom.db.DbExtConfig; import org.dromara.jpom.db.DbExtConfig;
import org.dromara.jpom.dialect.DialectUtil;
import org.dromara.jpom.model.BaseDbModel; import org.dromara.jpom.model.BaseDbModel;
import org.dromara.jpom.model.BaseUserModifyDbModel; import org.dromara.jpom.model.BaseUserModifyDbModel;
import org.dromara.jpom.model.PageResultDto; import org.dromara.jpom.model.PageResultDto;
@ -88,7 +89,8 @@ public abstract class BaseDbService<T extends BaseDbModel> extends BaseDbCommonS
* @return list * @return list
*/ */
public List<String> listGroup() { public List<String> listGroup() {
String sql = "select `GROUP` from " + getTableName() + " group by `GROUP`"; String group = DialectUtil.wrapField("group");
String sql = String.format("select %s from %s group by %s",group,getTableName(),group);
return this.listGroupByName(sql, "group"); return this.listGroupByName(sql, "group");
} }
@ -99,7 +101,7 @@ public abstract class BaseDbService<T extends BaseDbModel> extends BaseDbCommonS
* @return list * @return list
*/ */
public List<String> listGroupName() { public List<String> listGroupName() {
String sql = "select `groupName` from " + this.getTableName() + " group by `groupName`"; String sql = "select groupName from " + this.getTableName() + " group by groupName";
return this.listGroupByName(sql, "groupName"); return this.listGroupByName(sql, "groupName");
} }
@ -133,7 +135,8 @@ public abstract class BaseDbService<T extends BaseDbModel> extends BaseDbCommonS
*/ */
public void repairGroupFiled() { public void repairGroupFiled() {
Assert.state(this.canGroup, "当前数据表不支持分组"); Assert.state(this.canGroup, "当前数据表不支持分组");
String sql = "update " + getTableName() + " set `GROUP`=? where `GROUP` is null or `GROUP`=''"; String group = DialectUtil.wrapField("group");
String sql = String.format("update %s set %s =? where %s is null or %s = ''",getTableName(),group,group,group);
super.execute(sql, Const.DEFAULT_GROUP_NAME); super.execute(sql, Const.DEFAULT_GROUP_NAME);
} }
@ -221,7 +224,7 @@ public abstract class BaseDbService<T extends BaseDbModel> extends BaseDbCommonS
private void removeUpdate(Entity entity) { private void removeUpdate(Entity entity) {
for (String s : new String[]{ID_STR, "createTimeMillis", "createUser"}) { for (String s : new String[]{ID_STR, "createTimeMillis", "createUser"}) {
entity.remove(StrUtil.format("`{}`", s)); entity.remove(DialectUtil.wrapField(s));
entity.remove(s); entity.remove(s);
} }
} }
@ -591,11 +594,11 @@ public abstract class BaseDbService<T extends BaseDbModel> extends BaseDbCommonS
} }
key = StrUtil.removeAll(key, "%"); key = StrUtil.removeAll(key, "%");
if (StrUtil.startWith(stringStringEntry.getKey(), "%") && StrUtil.endWith(stringStringEntry.getKey(), "%")) { if (StrUtil.startWith(stringStringEntry.getKey(), "%") && StrUtil.endWith(stringStringEntry.getKey(), "%")) {
where.set(StrUtil.format("`{}`", key), StrUtil.format(" like '%{}%'", value)); where.set(DialectUtil.wrapField(key), StrUtil.format(" like '%{}%'", value));
} else if (StrUtil.endWith(stringStringEntry.getKey(), "%")) { } else if (StrUtil.endWith(stringStringEntry.getKey(), "%")) {
where.set(StrUtil.format("`{}`", key), StrUtil.format(" like '{}%'", value)); where.set(DialectUtil.wrapField(key), StrUtil.format(" like '{}%'", value));
} else if (StrUtil.startWith(stringStringEntry.getKey(), "%")) { } else if (StrUtil.startWith(stringStringEntry.getKey(), "%")) {
where.set(StrUtil.format("`{}`", key), StrUtil.format(" like '%{}'", value)); where.set(DialectUtil.wrapField(key), StrUtil.format(" like '%{}'", value));
} else if (StrUtil.containsIgnoreCase(key, "time") && StrUtil.contains(value, "~")) { } else if (StrUtil.containsIgnoreCase(key, "time") && StrUtil.contains(value, "~")) {
// 时间筛选 // 时间筛选
String[] val = StrUtil.splitToArray(value, "~"); String[] val = StrUtil.splitToArray(value, "~");
@ -632,15 +635,15 @@ public abstract class BaseDbService<T extends BaseDbModel> extends BaseDbCommonS
ignoreField.add(timeKey); ignoreField.add(timeKey);
} else if (StrUtil.endWith(key, ":in")) { } else if (StrUtil.endWith(key, ":in")) {
String inKey = StrUtil.removeSuffix(key, ":in"); String inKey = StrUtil.removeSuffix(key, ":in");
where.set(StrUtil.format("`{}`", inKey), StrUtil.split(value, StrUtil.COMMA)); where.set(DialectUtil.wrapField(inKey), StrUtil.split(value, StrUtil.COMMA));
} else { } else {
where.set(StrUtil.format("`{}`", key), value); where.set(DialectUtil.wrapField(key), value);
} }
} }
// 排序 // 排序
if (StrUtil.isNotEmpty(orderField)) { if (StrUtil.isNotEmpty(orderField)) {
orderField = StrUtil.removeAll(orderField, "%"); orderField = StrUtil.removeAll(orderField, "%");
pageReq.addOrder(new Order(StrUtil.format("`{}`", orderField), StrUtil.equalsIgnoreCase(order, "ascend") ? Direction.ASC : Direction.DESC)); pageReq.addOrder(new Order(DialectUtil.wrapField(orderField), StrUtil.equalsIgnoreCase(order, "ascend") ? Direction.ASC : Direction.DESC));
} }
return this.listPage(where, pageReq, fill); return this.listPage(where, pageReq, fill);
} }

View File

@ -22,6 +22,7 @@ import cn.hutool.extra.spring.SpringUtil;
import org.dromara.jpom.common.BaseServerController; import org.dromara.jpom.common.BaseServerController;
import org.dromara.jpom.common.Const; import org.dromara.jpom.common.Const;
import org.dromara.jpom.common.ServerConst; import org.dromara.jpom.common.ServerConst;
import org.dromara.jpom.dialect.DialectUtil;
import org.dromara.jpom.exception.PermissionException; import org.dromara.jpom.exception.PermissionException;
import org.dromara.jpom.model.BaseWorkspaceModel; import org.dromara.jpom.model.BaseWorkspaceModel;
import org.dromara.jpom.model.PageResultDto; import org.dromara.jpom.model.PageResultDto;
@ -357,7 +358,8 @@ public abstract class BaseWorkspaceService<T extends BaseWorkspaceModel> extends
*/ */
public List<String> listGroup(HttpServletRequest request) { public List<String> listGroup(HttpServletRequest request) {
String workspaceId = getCheckUserWorkspace(request); String workspaceId = getCheckUserWorkspace(request);
String sql = "select `GROUP` from " + getTableName() + " where workspaceId=? group by `GROUP`"; String group = DialectUtil.wrapField("group");
return super.listGroupByName(sql, "GROUP", workspaceId); String sql = String.format("select %s from %s where workspaceId=? group by %s",group,getTableName(),group);
return super.listGroupByName(sql, group, workspaceId);
} }
} }

View File

@ -98,7 +98,7 @@ public class DataInitEvent implements ILoadEvent, ICacheTask {
TableName tableName1 = parents.getAnnotation(TableName.class); TableName tableName1 = parents.getAnnotation(TableName.class);
Assert.notNull(tableName1, "父级表信息配置错误," + aClass); Assert.notNull(tableName1, "父级表信息配置错误," + aClass);
} }
String sql = "select `workspaceId`,count(1) as allCount from " + tableName.value() + " group by `workspaceId`"; String sql = "select workspaceId,count(1) as allCount from " + tableName.value() + " group by workspaceId";
List<Entity> query = workspaceService.query(sql); List<Entity> query = workspaceService.query(sql);
for (Entity entity : query) { for (Entity entity : query) {
String workspaceId = (String) entity.get("workspaceId"); String workspaceId = (String) entity.get("workspaceId");
@ -130,14 +130,14 @@ public class DataInitEvent implements ILoadEvent, ICacheTask {
public void clearErrorWorkspace(String tableName) { public void clearErrorWorkspace(String tableName) {
Assert.state(errorWorkspaceTable.containsKey(tableName), "当前表没有错误数据"); Assert.state(errorWorkspaceTable.containsKey(tableName), "当前表没有错误数据");
Set<String> workspaceIds = this.allowWorkspaceIds(); Set<String> workspaceIds = this.allowWorkspaceIds();
String sql = "select `workspaceId`,count(1) as allCount from " + tableName + " group by `workspaceId`"; String sql = "select workspaceId,count(1) as allCount from " + tableName + " group by workspaceId";
List<Entity> query = workspaceService.query(sql); List<Entity> query = workspaceService.query(sql);
for (Entity entity : query) { for (Entity entity : query) {
String workspaceId = (String) entity.get("workspaceId"); String workspaceId = (String) entity.get("workspaceId");
if (workspaceIds.contains(workspaceId)) { if (workspaceIds.contains(workspaceId)) {
continue; continue;
} }
String deleteSql = "delete from " + tableName + " where `workspaceId`=?"; String deleteSql = "delete from " + tableName + " where workspaceId=?";
int execute = workspaceService.execute(deleteSql, workspaceId); int execute = workspaceService.execute(deleteSql, workspaceId);
log.info("删除表 {} 中 {} 条工作空间id为{} 的数据", tableName, execute, workspaceId); log.info("删除表 {} 中 {} 条工作空间id为{} 的数据", tableName, execute, workspaceId);
} }

View File

@ -21,8 +21,10 @@ import cn.hutool.db.Page;
import cn.hutool.db.PageResult; import cn.hutool.db.PageResult;
import cn.hutool.db.ds.DSFactory; import cn.hutool.db.ds.DSFactory;
import cn.hutool.db.sql.Condition; import cn.hutool.db.sql.Condition;
import cn.hutool.extra.spring.SpringUtil;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.jpom.dialect.DialectUtil;
import org.dromara.jpom.model.PageResultDto; import org.dromara.jpom.model.PageResultDto;
import org.dromara.jpom.system.JpomRuntimeException; import org.dromara.jpom.system.JpomRuntimeException;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -60,7 +62,7 @@ public abstract class BaseDbCommonService<T> {
@Getter @Getter
protected final String tableName; protected final String tableName;
protected final Class<T> tClass; protected final Class<T> tClass;
protected final DbExtConfig.Mode dbMode;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public BaseDbCommonService() { public BaseDbCommonService() {
@ -68,6 +70,7 @@ public abstract class BaseDbCommonService<T> {
TableName annotation = tClass.getAnnotation(TableName.class); TableName annotation = tClass.getAnnotation(TableName.class);
Assert.notNull(annotation, "请配置 table Name"); Assert.notNull(annotation, "请配置 table Name");
this.tableName = annotation.value(); this.tableName = annotation.value();
this.dbMode = SpringUtil.getBean(DbExtConfig.class).getMode();
} }
public String getDataDesc() { public String getDataDesc() {
@ -87,7 +90,7 @@ public abstract class BaseDbCommonService<T> {
* @param t 数据 * @param t 数据
*/ */
protected final int insertDb(T t) { protected final int insertDb(T t) {
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(), DialectUtil.getDialectByMode(dbMode));
try { try {
Entity entity = this.dataBeanToEntity(t); Entity entity = this.dataBeanToEntity(t);
return db.insert(entity); return db.insert(entity);
@ -105,7 +108,7 @@ public abstract class BaseDbCommonService<T> {
if (CollUtil.isEmpty(t)) { if (CollUtil.isEmpty(t)) {
return; return;
} }
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
try { try {
List<Entity> entities = t.stream().map(this::dataBeanToEntity).collect(Collectors.toList()); List<Entity> entities = t.stream().map(this::dataBeanToEntity).collect(Collectors.toList());
db.insert(entities); db.insert(entities);
@ -123,7 +126,7 @@ public abstract class BaseDbCommonService<T> {
public Entity dataBeanToEntity(T data) { public Entity dataBeanToEntity(T data) {
Entity entity = new Entity(tableName); Entity entity = new Entity(tableName);
// 转换为 map // 转换为 map
Map<String, Object> beanToMap = BeanUtil.beanToMap(data, new LinkedHashMap<>(), true, s -> StrUtil.format("`{}`", s)); Map<String, Object> beanToMap = BeanUtil.beanToMap(data, new LinkedHashMap<>(), true, DialectUtil::wrapField);
entity.putAll(beanToMap); entity.putAll(beanToMap);
return entity; return entity;
} }
@ -137,7 +140,7 @@ public abstract class BaseDbCommonService<T> {
* @return 影响行数 * @return 影响行数
*/ */
protected final int updateDb(Entity entity, Entity where) { protected final int updateDb(Entity entity, Entity where) {
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
if (where.isEmpty()) { if (where.isEmpty()) {
throw new JpomRuntimeException("没有更新条件"); throw new JpomRuntimeException("没有更新条件");
} }
@ -166,7 +169,7 @@ public abstract class BaseDbCommonService<T> {
where.set(ID_STR, keyValue); where.set(ID_STR, keyValue);
Entity entity; Entity entity;
try { try {
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
if (consumer != null) { if (consumer != null) {
consumer.accept(where); consumer.accept(where);
} }
@ -193,7 +196,7 @@ public abstract class BaseDbCommonService<T> {
where.set(ID_STR, keyValue); where.set(ID_STR, keyValue);
List<Entity> entities; List<Entity> entities;
try { try {
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
if (consumer != null) { if (consumer != null) {
consumer.accept(where); consumer.accept(where);
} }
@ -216,7 +219,7 @@ public abstract class BaseDbCommonService<T> {
throw new JpomRuntimeException("没有删除条件"); throw new JpomRuntimeException("没有删除条件");
} }
try { try {
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
return db.del(where); return db.del(where);
} catch (Exception e) { } catch (Exception e) {
throw warpException(e); throw warpException(e);
@ -231,7 +234,7 @@ public abstract class BaseDbCommonService<T> {
*/ */
public final long count(Entity where) { public final long count(Entity where) {
where.setTableName(getTableName()); where.setTableName(getTableName());
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
try { try {
return db.count(where); return db.count(where);
} catch (Exception e) { } catch (Exception e) {
@ -247,7 +250,7 @@ public abstract class BaseDbCommonService<T> {
*/ */
public final long count(String sql, Object... params) { public final long count(String sql, Object... params) {
try { try {
return Db.use(this.getDataSource()).count(sql, params); return Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode)).count(sql, params);
} catch (Exception e) { } catch (Exception e) {
throw warpException(e); throw warpException(e);
} }
@ -262,7 +265,7 @@ public abstract class BaseDbCommonService<T> {
*/ */
public final List<Entity> queryList(Entity where) { public final List<Entity> queryList(Entity where) {
where.setTableName(getTableName()); where.setTableName(getTableName());
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
try { try {
return db.find(where); return db.find(where);
} catch (Exception e) { } catch (Exception e) {
@ -277,7 +280,7 @@ public abstract class BaseDbCommonService<T> {
* @return List * @return List
*/ */
public final List<T> findByCondition(Condition... wheres) { public final List<T> findByCondition(Condition... wheres) {
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
try { try {
List<Entity> entities = db.findBy(getTableName(), wheres); List<Entity> entities = db.findBy(getTableName(), wheres);
return this.entityToBeanList(entities); return this.entityToBeanList(entities);
@ -332,7 +335,7 @@ public abstract class BaseDbCommonService<T> {
public final PageResultDto<T> listPageDb(Entity where, Page page, boolean fill) { public final PageResultDto<T> listPageDb(Entity where, Page page, boolean fill) {
where.setTableName(getTableName()); where.setTableName(getTableName());
PageResult<Entity> pageResult; PageResult<Entity> pageResult;
Db db = Db.use(this.getDataSource()); Db db = Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode));
try { try {
pageResult = db.page(where, page); pageResult = db.page(where, page);
} catch (Exception e) { } catch (Exception e) {
@ -358,7 +361,7 @@ public abstract class BaseDbCommonService<T> {
*/ */
public final List<Entity> query(String sql, Object... params) { public final List<Entity> query(String sql, Object... params) {
try { try {
return Db.use(this.getDataSource()).query(sql, params); return Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode)).query(sql, params);
} catch (Exception e) { } catch (Exception e) {
throw warpException(e); throw warpException(e);
} }
@ -382,7 +385,7 @@ public abstract class BaseDbCommonService<T> {
*/ */
public final int execute(String sql, Object... params) { public final int execute(String sql, Object... params) {
try { try {
return Db.use(this.getDataSource()).execute(sql, params); return Db.use(this.getDataSource(),DialectUtil.getDialectByMode(dbMode)).execute(sql, params);
} catch (Exception e) { } catch (Exception e) {
throw warpException(e); throw warpException(e);
} }