diff --git a/mf-api/mf-sys-api/src/main/java/cn/com/mfish/sys/api/entity/TableInfo.java b/mf-api/mf-sys-api/src/main/java/cn/com/mfish/sys/api/entity/TableInfo.java index 8ac46ab7..e9d53f0e 100644 --- a/mf-api/mf-sys-api/src/main/java/cn/com/mfish/sys/api/entity/TableInfo.java +++ b/mf-api/mf-sys-api/src/main/java/cn/com/mfish/sys/api/entity/TableInfo.java @@ -25,6 +25,8 @@ public class TableInfo implements Serializable { private String tableComment; @ApiModelProperty("库") private String tableSchema; + @ApiModelProperty("表类型 0表 1视图") + private Integer tableType; @ApiModelProperty("列信息") private List columns; } diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/MysqlDBDialect.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/MysqlDBDialect.java index f54f3bff..70ee7e89 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/MysqlDBDialect.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/MysqlDBDialect.java @@ -26,7 +26,7 @@ public class MysqlDBDialect extends AbstractDBDialect { @Override public BoundSql getTableInfo(String dbName, String tableName) { - String sql = "SELECT table_name, table_comment, table_schema\n" + + String sql = "SELECT table_name, table_comment, table_schema, if(table_type='VIEW',1,0) table_type\n" + " FROM INFORMATION_SCHEMA.TABLES where 1=1"; return buildCondition(sql, dbName, tableName); } diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/OracleDBDialect.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/OracleDBDialect.java index 4ddc19fd..e2e62a86 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/OracleDBDialect.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/OracleDBDialect.java @@ -43,7 +43,7 @@ public class OracleDBDialect implements DBDialect { @Override public BoundSql getTableInfo(String dbName, String tableName) { - String sql = "select u.table_name, u.comments table_comment, a.owner table_schema\n" + + String sql = "select u.table_name, u.comments table_comment, a.owner table_schema,DECODE(u.table_type,'VIEW', 1, 0) table_type\n" + " from user_tab_comments u\n" + " inner join all_tab_comments a\n" + " on u.table_name = a.table_name\n" + @@ -54,8 +54,10 @@ public class OracleDBDialect implements DBDialect { private BoundSql buildCondition(String sql, String tableName) { BoundSql boundSql = new BoundSql(); if (!StringUtils.isEmpty(tableName)) { - sql += " and a.TABLE_NAME = ?"; + //这里虽然匹配大小写,但是建议oracle表名视图都创建大写名称,避免数据查询时无法查到 + sql += " and (a.TABLE_NAME = ? or a.TABLE_NAME = ?)"; boundSql.getParams().add(new QueryParam().setValue(tableName.toUpperCase(Locale.ROOT))); + boundSql.getParams().add(new QueryParam().setValue(tableName.toLowerCase(Locale.ROOT))); } return boundSql.setSql(sql); } diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/PostgreDBDialect.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/PostgreDBDialect.java index d14e275e..4a5f324d 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/PostgreDBDialect.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/db/PostgreDBDialect.java @@ -35,18 +35,18 @@ public class PostgreDBDialect extends AbstractDBDialect { @Override public BoundSql getTableInfo(String dbName, String tableName) { - String strSql = "SELECT d.table_name,\n" + + String strSql = "SELECT\n" + + "d.table_name,\n" + "CAST(obj_description(C.relfilenode, 'pg_class') AS VARCHAR) AS TABLE_COMMENT,\n" + - "d.table_schema \n" + + "d.table_schema,\n" + + "(CASE WHEN c.relkind = 'v' THEN 1 ELSE 0 END ) AS table_type\n" + "FROM\n" + "pg_class c,\n" + "information_schema.tables d \n" + "WHERE\n" + - "c.relkind = 'r' \n" + - "AND c.relname NOT LIKE'pg_%' \n" + - "AND c.relname NOT LIKE'sql_%' \n" + - "AND c.relkind = 'r' \n" + - "AND c.relname = d.TABLE_NAME\n"; + "c.relnamespace IN ( SELECT relnamespace FROM pg_class WHERE relkind = 'r' AND relname NOT LIKE'pg_%' AND relname NOT LIKE'sql_%' ) \n" + + "AND ( c.relkind = 'r' OR c.relkind = 'v' )\n" + + "AND c.relname = d.TABLE_NAME"; //pg数据库table_schema是单独定义的schema不是数据库名称,此处暂时不传。参数预留 return buildCondition(strSql, "", tableName); } diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/manger/PoolContext.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/manger/PoolContext.java index 85975661..1964c52e 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/manger/PoolContext.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/manger/PoolContext.java @@ -1,6 +1,8 @@ package cn.com.mfish.common.dblink.manger; import cn.com.mfish.common.dblink.dbpool.PoolWrapper; +import lombok.Getter; +import lombok.Setter; import javax.sql.DataSource; import java.sql.Connection; @@ -13,14 +15,18 @@ import java.sql.SQLException; */ public class PoolContext { //连接池有效期(一天 单位:秒) + @Setter + @Getter private long expire = 24 * 60 * 60; //检查时间 // 当datasource被获取的1分钟内,不执行清理线程,降低线程额外开销 + @Getter + @Setter private long checkTime; //连接池包装类 - private PoolWrapper poolWrapper; + private final PoolWrapper poolWrapper; - public PoolContext(PoolWrapper poolWrapper) { + public PoolContext(PoolWrapper poolWrapper) { this.poolWrapper = poolWrapper; } @@ -28,22 +34,6 @@ public class PoolContext { poolWrapper.close(); } - public long getExpire() { - return expire; - } - - public void setExpire(long expire) { - this.expire = expire; - } - - public long getCheckTime() { - return checkTime; - } - - public void setCheckTime(long checkTime) { - this.checkTime = checkTime; - } - public DataSource getDataSource() { return poolWrapper.getDataSource(); } diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/AbstractDialect.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/AbstractDialect.java index 87c97203..54cee580 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/AbstractDialect.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/AbstractDialect.java @@ -86,7 +86,7 @@ public abstract class AbstractDialect implements Dialect { return getPageSql(boundSql, page); } - protected abstract BoundSql getPageSql(BoundSql boundSql, Page page); + protected abstract BoundSql getPageSql(BoundSql boundSql, Page page); @Override public T afterPage(T dataTable) { diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/MysqlDialect.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/MysqlDialect.java index 19ba299d..a3c8dd1b 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/MysqlDialect.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/MysqlDialect.java @@ -17,9 +17,9 @@ public class MysqlDialect extends AbstractDialect { } @Override - protected BoundSql getPageSql(BoundSql boundSql, Page page) { - StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("SELECT * FROM (").append(boundSql.getSql()); + protected BoundSql getPageSql(BoundSql boundSql, Page page) { + StringBuilder sqlBuilder = new StringBuilder("SELECT * FROM ("); + sqlBuilder.append(boundSql.getSql()); if (page.getStartRow() == 0) { sqlBuilder.append(") TEMP LIMIT ?"); boundSql.getParams().add(new QueryParam().setValue(page.getPageSize()).setType(DataType.INTEGER)); diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/OracleDialect.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/OracleDialect.java index e5a9f723..4bcf15ee 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/OracleDialect.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/OracleDialect.java @@ -18,7 +18,7 @@ public class OracleDialect extends AbstractDialect { } @Override - protected BoundSql getPageSql(BoundSql boundSql, Page page) { + protected BoundSql getPageSql(BoundSql boundSql, Page page) { String sql = "SELECT * FROM ( " + " SELECT TMP_PAGE.*, ROWNUM " + DataConstant.ORACLE_ROW + " FROM (" + boundSql.getSql() + diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/PostgreDialect.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/PostgreDialect.java index 4657b497..dba635e6 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/PostgreDialect.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/page/dialect/PostgreDialect.java @@ -18,9 +18,9 @@ public class PostgreDialect extends AbstractDialect { } @Override - protected BoundSql getPageSql(BoundSql boundSql, Page page) { - StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("SELECT * FROM (" + boundSql.getSql()); + protected BoundSql getPageSql(BoundSql boundSql, Page page) { + StringBuilder sqlBuilder = new StringBuilder("SELECT * FROM (") + .append(boundSql.getSql()); if (page.getStartRow() == 0) { sqlBuilder.append(") TEMP LIMIT ?"); boundSql.getParams().add(new QueryParam().setValue(page.getPageSize()).setType(DataType.INTEGER)); diff --git a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/query/BaseQuery.java b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/query/BaseQuery.java index 6ad335c5..11a7380b 100644 --- a/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/query/BaseQuery.java +++ b/mf-common/mf-common-dblink/src/main/java/cn/com/mfish/common/dblink/query/BaseQuery.java @@ -103,12 +103,8 @@ public class BaseQuery { continue; } String type = rs.getMetaData().getColumnTypeName(i); - Object columnValue = formatValue(type, rs.getObject(i)); + Object columnValue = formatValue(type, getValue(field.getType().getTypeName(), rs, i)); field.setAccessible(true); - //数据库中是数字类型,字段类型为boolean时强制转换为boolean - if (field.getType().getTypeName().equals("java.lang.Boolean") && columnValue instanceof Number) { - columnValue = DataUtils.numCompare(columnValue, 0) > 0; - } field.set(t, columnValue); break; } @@ -118,6 +114,36 @@ public class BaseQuery { return list; } + //数据库中是数字类型,字段类型为boolean时强制转换为boolean + private Object getValue(String typeName, ResultSet rs, int i) throws SQLException { + //todo 类型不全后续根据实际情况补充 + if ("java.lang.Boolean".equals(typeName) || "boolean".equals(typeName)) { + return rs.getBoolean(i); + } + if ("java.lang.Integer".equals(typeName) || "int".equals(typeName)) { + return rs.getInt(i); + } + if ("java.lang.Long".equals(typeName) || "long".equals(typeName)) { + return rs.getLong(i); + } + if ("java.lang.Float".equals(typeName) || "float".equals(typeName)) { + return rs.getFloat(i); + } + if ("java.lang.Double".equals(typeName) || "double".equals(typeName)) { + return rs.getDouble(i); + } + if ("java.lang.Short".equals(typeName) || "short".equals(typeName)) { + return rs.getShort(i); + } + if ("java.math.BigDecimal".equals(typeName)) { + return rs.getBigDecimal(i); + } + if ("java.util.Date".equals(typeName)) { + return rs.getTimestamp(i); + } + return rs.getObject(i); + } + /** * 基础查询方法 *