diff --git a/README.md b/README.md index ac700bc..557c746 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ MiniDao ======= -当前最新版本: 1.9.6 (发布日期:20240107) +当前最新版本: 1.10.1 (发布日期:2024-07-03) [![AUR](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE) [![](https://img.shields.io/badge/Author-北京国炬软件-orange.svg)](http://jeecg.com/aboutusIndex) [![](https://img.shields.io/badge/Blog-官方博客-blue.svg)](https://jeecg.blog.csdn.net) -[![](https://img.shields.io/badge/version-1.9.6-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot) +[![](https://img.shields.io/badge/version-1.10.1-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot) [![GitHub stars](https://img.shields.io/github/stars/zhangdaiscott/jeecg-boot.svg?style=social&label=Stars)](https://github.com/zhangdaiscott/jeecg-boot) [![GitHub forks](https://img.shields.io/github/forks/zhangdaiscott/jeecg-boot.svg?style=social&label=Fork)](https://github.com/zhangdaiscott/jeecg-boot) @@ -45,7 +45,7 @@ MiniDao 是一款轻量级JAVA持久层框架,基于 SpringJdbc + freemarker org.jeecgframework.boot3 minidao-spring-boot-starter - 1.9.6 + 1.10.1 ``` diff --git "a/docs/\344\277\256\346\224\271\346\227\245\345\277\227.log" "b/docs/\344\277\256\346\224\271\346\227\245\345\277\227.log" index 310e2a4..a26477b 100644 --- "a/docs/\344\277\256\346\224\271\346\227\245\345\277\227.log" +++ "b/docs/\344\277\256\346\224\271\346\227\245\345\277\227.log" @@ -63,3 +63,27 @@ minidao-pe/src/main/java/org/jeecgframework/minidao/aop/MiniDaoHandler.java minidao-pe-example/src/test/java/test/spring/SpringTxTestCase.java ---author:chenrui---date:2024/1/8-----for:[QQYUN-7775]minidao springboot3版本打包,报junit错误--- + + +---author:chenrui---date:20240321-----for:minidao-pe-example去掉老的p3代码生成器的相关代码,导致单元测试不输出日志--- +minidao-pe-example/jeecg\codegenerate\OneToMainUtil.java(-) +minidao-pe-example/jeecg\codegenerate\CodeGenerateUtil.java(-) +minidao-pe-example/jeecg\aop\MinidaoInterceptor.java(-) +minidao-pe-example/examples\util\JdbcUtils.java(-) +minidao-pe-example/pom.xml +---author:chenrui---date:20240321-----for:minidao-pe-example去掉老的p3代码生成器的相关代码,导致单元测试不输出日志--- + +---author:scott---date:2024-07-04-----for:SQL解析兼容机制(判断支持JSqlParser,才用JSqlParser引擎)--- +// 默认可不引入jsqlparser依赖,避免版本冲突问题 +org/jeecgframework/minidao/aop/MiniDaoHandler.java +org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServerDialect.java +org/jeecgframework/minidao/sqlparser/impl/util/JSqlCountSqlParser.java 更名路径 +org/jeecgframework/minidao/sqlparser/impl/util/JSqlRemoveSqlOrderBy.java 更名路径 +org/jeecgframework/minidao/sqlparser/impl/util/JSqlServerPagesHelper.java 更名路径 +org/jeecgframework/minidao/sqlparser/impl/util/JSqlSubSelectBody.java 更名路径 +org/jeecgframework/minidao/sqlparser/impl/JsqlparserSqlProcessor.java(+) +org/jeecgframework/minidao/sqlparser/impl/SimpleSqlProcessor.java(+) +org/jeecgframework/minidao/sqlparser/AbstractSqlProcessor.java(+) +org/jeecgframework/minidao/util/MiniDaoUtil.java +org/jeecgframework/minidao/util/ReflectUtil.java +---author:scott---date:2024-07-04-----for:SQL解析兼容机制(判断支持JSqlParser,才用JSqlParser引擎)--- \ No newline at end of file diff --git a/minidao-pe-example/pom.xml b/minidao-pe-example/pom.xml index 20b24bb..6368cab 100644 --- a/minidao-pe-example/pom.xml +++ b/minidao-pe-example/pom.xml @@ -3,28 +3,28 @@ 4.0.0 org.jeecgframework.boot3 minidao-pe-example - 1.9.6 + 1.10.1 jar http://www.jeecg.com org.jeecgframework.boot3 minidao-parent - 1.9.6 + 1.10.1 - 1.9.6 + 1.10.1 4.13.1 6.0.13 8.0.21 - 42.2.6 + 42.4.3 11.2.0.3 4.0 2.6.2 - 3.7.2 + 3.41.2.2 - 1.2.20 + 1.2.22 1.2.16 @@ -64,7 +64,7 @@ minidao-pe ${minidao.version} - + + com.alibaba druid @@ -187,19 +189,19 @@ org.hsqldb hsqldb - 2.2.8 + 2.7.1 com.h2database h2 - 1.4.197 + 2.2.220 org.apache.derby derby - 10.9.1.0 + 10.17.1.0 org.apache.derby @@ -218,10 +220,9 @@ jcc 11.5.0.0 - - + @@ -271,6 +272,4 @@ - - \ No newline at end of file diff --git a/minidao-pe-example/src/main/java/examples/util/JdbcUtils.java b/minidao-pe-example/src/main/java/examples/util/JdbcUtils.java index 0349a42..74ee6d3 100644 --- a/minidao-pe-example/src/main/java/examples/util/JdbcUtils.java +++ b/minidao-pe-example/src/main/java/examples/util/JdbcUtils.java @@ -1,979 +1,979 @@ -package examples.util; - -import com.alibaba.druid.DbType; -import com.alibaba.druid.support.logging.Log; -import com.alibaba.druid.support.logging.LogFactory; -import com.alibaba.druid.util.*; - -import javax.sql.DataSource; -import java.io.Closeable; -import java.io.InputStream; -import java.io.PrintStream; -import java.net.URL; -import java.sql.*; -import java.util.*; -import java.util.Date; - -import static com.alibaba.druid.util.JdbcConstants.*; - -/** - * @Description: TODO - * @author: lsq - * @date: 2021年07月22日 11:54 - */ -public class JdbcUtils { - private final static Log LOG = LogFactory.getLog(JdbcUtils.class); - - private static final Properties DRIVER_URL_MAPPING = new Properties(); - - private static Boolean mysql_driver_version_6 = null; - - static { - try { - ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader(); - if (ctxClassLoader != null) { - for (Enumeration e = ctxClassLoader.getResources("META-INF/druid-driver.properties"); e.hasMoreElements();) { - URL url = e.nextElement(); - - Properties property = new Properties(); - - InputStream is = null; - try { - is = url.openStream(); - property.load(is); - } finally { - JdbcUtils.close(is); - } - - DRIVER_URL_MAPPING.putAll(property); - } - } - } catch (Exception e) { - LOG.error("load druid-driver.properties error", e); - } - } - - public static void close(Connection x) { - if (x == null) { - return; - } - - try { - if (x.isClosed()) { - return; - } - - x.close(); - } catch (SQLRecoverableException e) { - // skip - } catch (Exception e) { - LOG.debug("close connection error", e); - } - } - - public static void close(Statement x) { - if (x == null) { - return; - } - try { - x.close(); - } catch (Exception e) { - boolean printError = true; - - if (e instanceof SQLRecoverableException - && "Closed Connection".equals(e.getMessage()) - ) { - printError = false; - } - - if (printError) { - LOG.debug("close statement error", e); - } - } - } - - public static void close(ResultSet x) { - if (x == null) { - return; - } - try { - x.close(); - } catch (Exception e) { - LOG.debug("close result set error", e); - } - } - - public static void close(Closeable x) { - if (x == null) { - return; - } - - try { - x.close(); - } catch (Exception e) { - LOG.debug("close error", e); - } - } - - public static void close(Blob x) { - if (x == null) { - return; - } - - try { - x.free(); - } catch (Exception e) { - LOG.debug("close error", e); - } - } - - public static void close(Clob x) { - if (x == null) { - return; - } - - try { - x.free(); - } catch (Exception e) { - LOG.debug("close error", e); - } - } - - public static void printResultSet(ResultSet rs) throws SQLException { - printResultSet(rs, System.out); - } - - public static void printResultSet(ResultSet rs, PrintStream out) throws SQLException { - printResultSet(rs, out, true, "\t"); - } - - public static void printResultSet(ResultSet rs, PrintStream out, boolean printHeader, String seperator) throws SQLException { - ResultSetMetaData metadata = rs.getMetaData(); - int columnCount = metadata.getColumnCount(); - if (printHeader) { - for (int columnIndex = 1; columnIndex <= columnCount; ++columnIndex) { - if (columnIndex != 1) { - out.print(seperator); - } - out.print(metadata.getColumnName(columnIndex)); - } - } - - out.println(); - - while (rs.next()) { - - for (int columnIndex = 1; columnIndex <= columnCount; ++columnIndex) { - if (columnIndex != 1) { - out.print(seperator); - } - - int type = metadata.getColumnType(columnIndex); - - if (type == Types.VARCHAR || type == Types.CHAR || type == Types.NVARCHAR || type == Types.NCHAR) { - out.print(rs.getString(columnIndex)); - } else if (type == Types.DATE) { - Date date = rs.getDate(columnIndex); - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(date.toString()); - } - } else if (type == Types.BIT) { - boolean value = rs.getBoolean(columnIndex); - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(Boolean.toString(value)); - } - } else if (type == Types.BOOLEAN) { - boolean value = rs.getBoolean(columnIndex); - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(Boolean.toString(value)); - } - } else if (type == Types.TINYINT) { - byte value = rs.getByte(columnIndex); - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(Byte.toString(value)); - } - } else if (type == Types.SMALLINT) { - short value = rs.getShort(columnIndex); - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(Short.toString(value)); - } - } else if (type == Types.INTEGER) { - int value = rs.getInt(columnIndex); - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(Integer.toString(value)); - } - } else if (type == Types.BIGINT) { - long value = rs.getLong(columnIndex); - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(Long.toString(value)); - } - } else if (type == Types.TIMESTAMP || type == 2014) { - out.print(String.valueOf(rs.getTimestamp(columnIndex))); - } else if (type == Types.DECIMAL) { - out.print(String.valueOf(rs.getBigDecimal(columnIndex))); - } else if (type == Types.CLOB) { - out.print(String.valueOf(rs.getString(columnIndex))); - } else if (type == Types.JAVA_OBJECT) { - Object object = rs.getObject(columnIndex); - - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(String.valueOf(object)); - } - } else if (type == Types.LONGVARCHAR) { - Object object = rs.getString(columnIndex); - - if (rs.wasNull()) { - out.print("null"); - } else { - out.print(String.valueOf(object)); - } - } else if (type == Types.NULL) { - out.print("null"); - } else { - Object object = rs.getObject(columnIndex); - - if (rs.wasNull()) { - out.print("null"); - } else { - if (object instanceof byte[]) { - byte[] bytes = (byte[]) object; - String text = HexBin.encode(bytes); - out.print(text); - } else { - out.print(String.valueOf(object)); - } - } - } - } - out.println(); - } - } - - public static String getTypeName(int sqlType) { - switch (sqlType) { - case Types.ARRAY: - return "ARRAY"; - - case Types.BIGINT: - return "BIGINT"; - - case Types.BINARY: - return "BINARY"; - - case Types.BIT: - return "BIT"; - - case Types.BLOB: - return "BLOB"; - - case Types.BOOLEAN: - return "BOOLEAN"; - - case Types.CHAR: - return "CHAR"; - - case Types.CLOB: - return "CLOB"; - - case Types.DATALINK: - return "DATALINK"; - - case Types.DATE: - return "DATE"; - - case Types.DECIMAL: - return "DECIMAL"; - - case Types.DISTINCT: - return "DISTINCT"; - - case Types.DOUBLE: - return "DOUBLE"; - - case Types.FLOAT: - return "FLOAT"; - - case Types.INTEGER: - return "INTEGER"; - - case Types.JAVA_OBJECT: - return "JAVA_OBJECT"; - - case Types.LONGNVARCHAR: - return "LONGNVARCHAR"; - - case Types.LONGVARBINARY: - return "LONGVARBINARY"; - - case Types.NCHAR: - return "NCHAR"; - - case Types.NCLOB: - return "NCLOB"; - - case Types.NULL: - return "NULL"; - - case Types.NUMERIC: - return "NUMERIC"; - - case Types.NVARCHAR: - return "NVARCHAR"; - - case Types.REAL: - return "REAL"; - - case Types.REF: - return "REF"; - - case Types.ROWID: - return "ROWID"; - - case Types.SMALLINT: - return "SMALLINT"; - - case Types.SQLXML: - return "SQLXML"; - - case Types.STRUCT: - return "STRUCT"; - - case Types.TIME: - return "TIME"; - - case Types.TIMESTAMP: - return "TIMESTAMP"; - - case 2014: - return "TIMESTAMP_WITH_TIMEZONE"; - - case Types.TINYINT: - return "TINYINT"; - - case Types.VARBINARY: - return "VARBINARY"; - - case Types.VARCHAR: - return "VARCHAR"; - - default: - return "OTHER"; - - } - } - - public static String getDriverClassName(String rawUrl) throws SQLException { - if (rawUrl == null) { - return null; - } - if (rawUrl.startsWith("jdbc:derby:")) { - String prefix = "jdbc:derby:"; - if (rawUrl.startsWith(prefix + "//")) { - return "org.apache.derby.jdbc.ClientDriver"; - }else{ - return "org.apache.derby.jdbc.EmbeddedDriver"; - } - } else if (rawUrl.startsWith("jdbc:mysql:")) { - if (mysql_driver_version_6 == null) { - mysql_driver_version_6 = Utils.loadClass("com.mysql.cj.jdbc.Driver") != null; - } - - if (mysql_driver_version_6) { - return MYSQL_DRIVER_6; - } else { - return MYSQL_DRIVER; - } - } else if (rawUrl.startsWith("jdbc:log4jdbc:")) { - return LOG4JDBC_DRIVER; - } else if (rawUrl.startsWith("jdbc:mariadb:")) { - return MARIADB_DRIVER; - } else if (rawUrl.startsWith("jdbc:oracle:") // - || rawUrl.startsWith("JDBC:oracle:")) { - return ORACLE_DRIVER; - } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { - return ALI_ORACLE_DRIVER; - } else if (rawUrl.startsWith("jdbc:oceanbase:")) { - return OCEANBASE_DRIVER; - } else if (rawUrl.startsWith("jdbc:microsoft:")) { - return "com.microsoft.jdbc.sqlserver.SQLServerDriver"; - } else if (rawUrl.startsWith("jdbc:sqlserver:")) { - return "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - } else if (rawUrl.startsWith("jdbc:sybase:Tds:")) { - return "com.sybase.jdbc2.jdbc.SybDriver"; - } else if (rawUrl.startsWith("jdbc:jtds:")) { - return "net.sourceforge.jtds.jdbc.Driver"; - } else if (rawUrl.startsWith("jdbc:fake:") || rawUrl.startsWith("jdbc:mock:")) { - return "com.alibaba.druid.mock.MockDriver"; - } else if (rawUrl.startsWith("jdbc:postgresql:")) { - return POSTGRESQL_DRIVER; - } else if (rawUrl.startsWith("jdbc:edb:")) { - return ENTERPRISEDB_DRIVER; - } else if (rawUrl.startsWith("jdbc:odps:")) { - return ODPS_DRIVER; - } else if (rawUrl.startsWith("jdbc:hsqldb:")) { - return "org.hsqldb.jdbcDriver"; - } else if (rawUrl.startsWith("jdbc:db2:")) { - // Resolve the DB2 driver from JDBC URL - // Type2 COM.ibm.db2.jdbc.app.DB2Driver, url = jdbc:db2:databasename - // Type3 COM.ibm.db2.jdbc.net.DB2Driver, url = jdbc:db2:ServerIP:6789:databasename - // Type4 8.1+ com.ibm.db2.jcc.DB2Driver, url = jdbc:db2://ServerIP:50000/databasename - String prefix = "jdbc:db2:"; - if (rawUrl.startsWith(prefix + "//")) { // Type4 - return DB2_DRIVER; // "com.ibm.db2.jcc.DB2Driver"; - } else { - String suffix = rawUrl.substring(prefix.length()); - if (suffix.indexOf(':') > 0) { // Type3 - return DB2_DRIVER3; // COM.ibm.db2.jdbc.net.DB2Driver - } else { // Type2 - return DB2_DRIVER2; // COM.ibm.db2.jdbc.app.DB2Driver - } - } - } else if (rawUrl.startsWith("jdbc:sqlite:")) { - return SQLITE_DRIVER; - } else if (rawUrl.startsWith("jdbc:ingres:")) { - return "com.ingres.jdbc.IngresDriver"; - } else if (rawUrl.startsWith("jdbc:h2:")) { - return H2_DRIVER; - } else if (rawUrl.startsWith("jdbc:mckoi:")) { - return "com.mckoi.JDBCDriver"; - } else if (rawUrl.startsWith("jdbc:cloudscape:")) { - return "COM.cloudscape.core.JDBCDriver"; - } else if (rawUrl.startsWith("jdbc:informix-sqli:")) { - return "com.informix.jdbc.IfxDriver"; - } else if (rawUrl.startsWith("jdbc:timesten:")) { - return "com.timesten.jdbc.TimesTenDriver"; - } else if (rawUrl.startsWith("jdbc:as400:")) { - return "com.ibm.as400.access.AS400JDBCDriver"; - } else if (rawUrl.startsWith("jdbc:sapdb:")) { - return "com.sap.dbtech.jdbc.DriverSapDB"; - } else if (rawUrl.startsWith("jdbc:JSQLConnect:")) { - return "com.jnetdirect.jsql.JSQLDriver"; - } else if (rawUrl.startsWith("jdbc:JTurbo:")) { - return "com.newatlanta.jturbo.driver.Driver"; - } else if (rawUrl.startsWith("jdbc:firebirdsql:")) { - return "org.firebirdsql.jdbc.FBDriver"; - } else if (rawUrl.startsWith("jdbc:interbase:")) { - return "interbase.interclient.Driver"; - } else if (rawUrl.startsWith("jdbc:pointbase:")) { - return "com.pointbase.jdbc.jdbcUniversalDriver"; - } else if (rawUrl.startsWith("jdbc:edbc:")) { - return "ca.edbc.jdbc.EdbcDriver"; - } else if (rawUrl.startsWith("jdbc:mimer:multi1:")) { - return "com.mimer.jdbc.Driver"; - } else if (rawUrl.startsWith("jdbc:dm:")) { - return JdbcConstants.DM_DRIVER; - } else if (rawUrl.startsWith("jdbc:kingbase:")) { - return JdbcConstants.KINGBASE_DRIVER; - } else if (rawUrl.startsWith("jdbc:kingbase8:")) { - return "com.kingbase8.Driver"; - } else if (rawUrl.startsWith("jdbc:oscar:")) { - return "com.oscar.Driver"; - } else if (rawUrl.startsWith("jdbc:gbase:")) { - return JdbcConstants.GBASE_DRIVER; - } else if (rawUrl.startsWith("jdbc:xugu:")) { - return JdbcConstants.XUGU_DRIVER; - } else if (rawUrl.startsWith("jdbc:hive:")) { - return JdbcConstants.HIVE_DRIVER; - } else if (rawUrl.startsWith("jdbc:hive2:")) { - return JdbcConstants.HIVE_DRIVER; - } else if (rawUrl.startsWith("jdbc:phoenix:thin:")) { - return "org.apache.phoenix.queryserver.client.Driver"; - } else if (rawUrl.startsWith("jdbc:phoenix://")) { - return JdbcConstants.PHOENIX_DRIVER; - } else if (rawUrl.startsWith("jdbc:kylin:")) { - return JdbcConstants.KYLIN_DRIVER; - } else if (rawUrl.startsWith("jdbc:elastic:")) { - return JdbcConstants.ELASTIC_SEARCH_DRIVER; - } else if (rawUrl.startsWith("jdbc:clickhouse:")) { - return JdbcConstants.CLICKHOUSE_DRIVER; - } else if(rawUrl.startsWith("jdbc:presto:")) { - return JdbcConstants.PRESTO_DRIVER; - } else if(rawUrl.startsWith("jdbc:trino:")) { - return JdbcConstants.TRINO_DRIVER; - } else if (rawUrl.startsWith("jdbc:inspur:")) { - return JdbcConstants.KDB_DRIVER; - } else if (rawUrl.startsWith("jdbc:polardb")) { - return JdbcConstants.POLARDB_DRIVER; - } else if (rawUrl.startsWith("jdbc:highgo:")) { - return "com.highgo.jdbc.Driver"; - } else { - throw new SQLException("unknown jdbc driver : " + rawUrl); - } - } - - public static DbType getDbTypeRaw(String rawUrl, String driverClassName) { - if (rawUrl == null) { - return null; - } - - if (rawUrl.startsWith("jdbc:derby:") || rawUrl.startsWith("jdbc:log4jdbc:derby:")) { - return DbType.derby; - } else if (rawUrl.startsWith("jdbc:mysql:") || rawUrl.startsWith("jdbc:cobar:") - || rawUrl.startsWith("jdbc:log4jdbc:mysql:")) { - return DbType.mysql; - } else if (rawUrl.startsWith("jdbc:mariadb:")) { - return DbType.mariadb; - } else if (rawUrl.startsWith("jdbc:oracle:") || rawUrl.startsWith("jdbc:log4jdbc:oracle:")) { - return DbType.oracle; - } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { - return DbType.ali_oracle; - } else if (rawUrl.startsWith("jdbc:oceanbase:oracle:")) { - return DbType.oceanbase_oracle; - } else if (rawUrl.startsWith("jdbc:oceanbase:")) { - return DbType.oceanbase; - } else if (rawUrl.startsWith("jdbc:microsoft:") || rawUrl.startsWith("jdbc:log4jdbc:microsoft:")) { - return DbType.sqlserver; - } else if (rawUrl.startsWith("jdbc:sqlserver:") || rawUrl.startsWith("jdbc:log4jdbc:sqlserver:")) { - return DbType.sqlserver; - } else if (rawUrl.startsWith("jdbc:sybase:Tds:") || rawUrl.startsWith("jdbc:log4jdbc:sybase:")) { - return DbType.sybase; - } else if (rawUrl.startsWith("jdbc:jtds:") || rawUrl.startsWith("jdbc:log4jdbc:jtds:")) { - return DbType.jtds; - } else if (rawUrl.startsWith("jdbc:fake:") || rawUrl.startsWith("jdbc:mock:")) { - return DbType.mock; - } else if (rawUrl.startsWith("jdbc:postgresql:") || rawUrl.startsWith("jdbc:log4jdbc:postgresql:")) { - return DbType.postgresql; - } else if (rawUrl.startsWith("jdbc:edb:")) { - return DbType.edb; - } else if (rawUrl.startsWith("jdbc:hsqldb:") || rawUrl.startsWith("jdbc:log4jdbc:hsqldb:")) { - return DbType.hsql; - } else if (rawUrl.startsWith("jdbc:odps:")) { - return DbType.odps; - } else if (rawUrl.startsWith("jdbc:db2:")) { - return DbType.db2; - } else if (rawUrl.startsWith("jdbc:sqlite:")) { - return DbType.sqlite; - } else if (rawUrl.startsWith("jdbc:ingres:")) { - return DbType.ingres; - } else if (rawUrl.startsWith("jdbc:h2:") || rawUrl.startsWith("jdbc:log4jdbc:h2:")) { - return DbType.h2; - } else if (rawUrl.startsWith("jdbc:mckoi:")) { - return DbType.mock; - } else if (rawUrl.startsWith("jdbc:cloudscape:")) { - return DbType.cloudscape; - } else if (rawUrl.startsWith("jdbc:informix-sqli:") || rawUrl.startsWith("jdbc:log4jdbc:informix-sqli:")) { - return DbType.informix; - } else if (rawUrl.startsWith("jdbc:timesten:")) { - return DbType.timesten; - } else if (rawUrl.startsWith("jdbc:as400:")) { - return DbType.as400; - } else if (rawUrl.startsWith("jdbc:sapdb:")) { - return DbType.sapdb; - } else if (rawUrl.startsWith("jdbc:JSQLConnect:")) { - return DbType.JSQLConnect; - } else if (rawUrl.startsWith("jdbc:JTurbo:")) { - return DbType.JTurbo; - } else if (rawUrl.startsWith("jdbc:firebirdsql:")) { - return DbType.firebirdsql; - } else if (rawUrl.startsWith("jdbc:interbase:")) { - return DbType.interbase; - } else if (rawUrl.startsWith("jdbc:pointbase:")) { - return DbType.pointbase; - } else if (rawUrl.startsWith("jdbc:edbc:")) { - return DbType.edbc; - } else if (rawUrl.startsWith("jdbc:mimer:multi1:")) { - return DbType.mimer; - } else if (rawUrl.startsWith("jdbc:dm:")) { - return JdbcConstants.DM; - } else if (rawUrl.startsWith("jdbc:kingbase:") || rawUrl.startsWith("jdbc:kingbase8:")) { - return JdbcConstants.KINGBASE; - } else if (rawUrl.startsWith("jdbc:gbase:")) { - return JdbcConstants.GBASE; - } else if (rawUrl.startsWith("jdbc:xugu:")) { - return JdbcConstants.XUGU; - } else if (rawUrl.startsWith("jdbc:log4jdbc:")) { - return DbType.log4jdbc; - } else if (rawUrl.startsWith("jdbc:hive:")) { - return DbType.hive; - } else if (rawUrl.startsWith("jdbc:hive2:")) { - return DbType.hive; - } else if (rawUrl.startsWith("jdbc:phoenix:")) { - return DbType.phoenix; - } else if (rawUrl.startsWith("jdbc:kylin:")) { - return DbType.kylin; - } else if (rawUrl.startsWith("jdbc:elastic:")) { - return DbType.elastic_search; - } else if (rawUrl.startsWith("jdbc:clickhouse:")) { - return DbType.clickhouse; - } else if (rawUrl.startsWith("jdbc:presto:")) { - return DbType.presto; - } else if (rawUrl.startsWith("jdbc:inspur:")) { - return DbType.kdb; - } else if (rawUrl.startsWith("jdbc:polardb")) { - return DbType.polardb; - } else if (rawUrl.startsWith("jdbc:highgo:")) { - return DbType.highgo; - } else { - return null; - } - } - - public static String getDbType(String rawUrl, String driverClassName) { - DbType dbType = getDbTypeRaw(rawUrl, driverClassName); - - if (dbType == null) { - return null; - } - - return dbType.name(); - } - - public static Driver createDriver(String driverClassName) throws SQLException { - return createDriver(null, driverClassName); - } - - public static Driver createDriver(ClassLoader classLoader, String driverClassName) throws SQLException { - Class clazz = null; - if (classLoader != null) { - try { - clazz = classLoader.loadClass(driverClassName); - } catch (ClassNotFoundException e) { - // skip - } - } - - if (clazz == null) { - try { - ClassLoader contextLoader = Thread.currentThread().getContextClassLoader(); - if (contextLoader != null) { - clazz = contextLoader.loadClass(driverClassName); - } - } catch (ClassNotFoundException e) { - // skip - } - } - - if (clazz == null) { - try { - clazz = Class.forName(driverClassName); - } catch (ClassNotFoundException e) { - throw new SQLException(e.getMessage(), e); - } - } - - try { - return (Driver) clazz.newInstance(); - } catch (IllegalAccessException e) { - throw new SQLException(e.getMessage(), e); - } catch (InstantiationException e) { - throw new SQLException(e.getMessage(), e); - } - } - - public static int executeUpdate(DataSource dataSource, String sql, Object... parameters) throws SQLException { - return executeUpdate(dataSource, sql, Arrays.asList(parameters)); - } - - public static int executeUpdate(DataSource dataSource, String sql, List parameters) throws SQLException { - Connection conn = null; - try { - conn = dataSource.getConnection(); - return executeUpdate(conn, sql, parameters); - } finally { - close(conn); - } - } - - public static int executeUpdate(Connection conn, String sql, List parameters) throws SQLException { - PreparedStatement stmt = null; - - int updateCount; - try { - stmt = conn.prepareStatement(sql); - - setParameters(stmt, parameters); - - updateCount = stmt.executeUpdate(); - } finally { - JdbcUtils.close(stmt); - } - - return updateCount; - } - - public static void execute(DataSource dataSource, String sql, Object... parameters) throws SQLException { - execute(dataSource, sql, Arrays.asList(parameters)); - } - - public static void execute(DataSource dataSource, String sql, List parameters) throws SQLException { - Connection conn = null; - try { - conn = dataSource.getConnection(); - execute(conn, sql, parameters); - } finally { - close(conn); - } - } - - public static void execute(Connection conn, String sql) throws SQLException { - execute(conn, sql, Collections.emptyList()); - } - - public static void execute(Connection conn, String sql, List parameters) throws SQLException { - PreparedStatement stmt = null; - - try { - stmt = conn.prepareStatement(sql); - - setParameters(stmt, parameters); - - stmt.executeUpdate(); - } finally { - JdbcUtils.close(stmt); - } - } - - public static List> executeQuery(DataSource dataSource, String sql, Object... parameters) - throws SQLException { - return executeQuery(dataSource, sql, Arrays.asList(parameters)); - } - - public static List> executeQuery(DataSource dataSource, String sql, List parameters) - throws SQLException { - Connection conn = null; - try { - conn = dataSource.getConnection(); - return executeQuery(conn, sql, parameters); - } finally { - close(conn); - } - } - - public static List> executeQuery(Connection conn, String sql, List parameters) - throws SQLException { - List> rows = new ArrayList>(); - - PreparedStatement stmt = null; - ResultSet rs = null; - try { - stmt = conn.prepareStatement(sql); - - setParameters(stmt, parameters); - - rs = stmt.executeQuery(); - - ResultSetMetaData rsMeta = rs.getMetaData(); - - while (rs.next()) { - Map row = new LinkedHashMap(); - - for (int i = 0, size = rsMeta.getColumnCount(); i < size; ++i) { - String columName = rsMeta.getColumnLabel(i + 1); - Object value = rs.getObject(i + 1); - row.put(columName, value); - } - - rows.add(row); - } - } finally { - JdbcUtils.close(rs); - JdbcUtils.close(stmt); - } - - return rows; - } - - private static void setParameters(PreparedStatement stmt, List parameters) throws SQLException { - for (int i = 0, size = parameters.size(); i < size; ++i) { - Object param = parameters.get(i); - stmt.setObject(i + 1, param); - } - } - - public static void insertToTable(DataSource dataSource, String tableName, Map data) - throws SQLException { - Connection conn = null; - try { - conn = dataSource.getConnection(); - insertToTable(conn, tableName, data); - } finally { - close(conn); - } - } - - public static void insertToTable(Connection conn, String tableName, Map data) throws SQLException { - String sql = makeInsertToTableSql(tableName, data.keySet()); - List parameters = new ArrayList(data.values()); - execute(conn, sql, parameters); - } - - public static String makeInsertToTableSql(String tableName, Collection names) { - StringBuilder sql = new StringBuilder() // - .append("insert into ") // - .append(tableName) // - .append("("); // - - int nameCount = 0; - for (String name : names) { - if (nameCount > 0) { - sql.append(","); - } - sql.append(name); - nameCount++; - } - sql.append(") values ("); - for (int i = 0; i < nameCount; ++i) { - if (i != 0) { - sql.append(","); - } - sql.append("?"); - } - sql.append(")"); - - return sql.toString(); - } - - public static void executeQuery(DataSource dataSource - , ResultSetConsumer consumer - , String sql - , Object... parameters) throws SQLException { - Connection conn = null; - PreparedStatement stmt = null; - ResultSet rs = null; - try { - conn = dataSource.getConnection(); - stmt = conn.prepareStatement(sql); - for (int i = 0; i < parameters.length; ++i) { - stmt.setObject(i + 1, parameters[i]); - } - rs = stmt.executeQuery(); - while (rs.next()) { - if (consumer != null) { - T object = consumer.apply(rs); - consumer.accept(object); - } - } - } finally { - close(rs); - close(stmt); - close(conn); - } - } - - public static List showTables(Connection conn, DbType dbType) throws SQLException { - if (DbType.mysql == dbType || DbType.oceanbase == dbType) { - return MySqlUtils.showTables(conn); - } - - if (dbType == DbType.oracle || dbType == DbType.oceanbase_oracle) { - return OracleUtils.showTables(conn); - } - - if (dbType == DbType.postgresql) { - return PGUtils.showTables(conn); - } - throw new SQLException("show tables dbType not support for " + dbType); - } - - public static String getCreateTableScript(Connection conn, DbType dbType) throws SQLException { - return getCreateTableScript(conn, dbType, true, true); - } - - public static String getCreateTableScript(Connection conn, DbType dbType, boolean sorted, boolean simplify) throws SQLException { - if (DbType.mysql == dbType || DbType.oceanbase == dbType) { - return MySqlUtils.getCreateTableScript(conn, sorted, simplify); - } - - if (dbType == DbType.oracle || dbType == DbType.oceanbase_oracle) { - return OracleUtils.getCreateTableScript(conn, sorted, simplify); - } - - throw new SQLException("getCreateTableScript dbType not support for " + dbType); - } - - public static boolean isMySqlDriver(String driverClassName) { - return driverClassName.equals(MYSQL_DRIVER) // - || driverClassName.equals(MYSQL_DRIVER_6) - || driverClassName.equals(JdbcConstants.MYSQL_DRIVER_REPLICATE); - } - - public static boolean isOracleDbType(String dbType) { - return DbType.oracle.name().equals(dbType) || // - DbType.oceanbase.name().equals(dbType) || // - DbType.ali_oracle.name().equalsIgnoreCase(dbType); - } - - public static boolean isOracleDbType(DbType dbType) { - return DbType.oracle == dbType || // - DbType.oceanbase == dbType || // - DbType.ali_oracle == dbType; - } - - public static boolean isMysqlDbType(String dbTypeName) { - return isMysqlDbType( - DbType.of(dbTypeName)); - } - - public static boolean isMysqlDbType(DbType dbType) { - if (dbType == null) { - return false; - } - - switch (dbType) { - case mysql: - case oceanbase: - case drds: - case mariadb: - case h2: - return true; - default: - return false; - } - } - - public static boolean isPgsqlDbType(String dbTypeName) { - return isPgsqlDbType( - DbType.of(dbTypeName) - ); - } - - public static boolean isPgsqlDbType(DbType dbType) { - if (dbType == null) { - return false; - } - - switch (dbType) { - case postgresql: - case edb: - case polardb: - return true; - default: - return false; - } - } - - public static boolean isSqlserverDbType(String dbTypeName) { - return isSqlserverDbType( - DbType.of(dbTypeName)); - } - - public static boolean isSqlserverDbType(DbType dbType) { - if (dbType == null) { - return false; - } - - switch (dbType) { - case sqlserver: - case jtds: - return true; - default: - return false; - } - } -} +//package examples.util; +// +//import com.alibaba.druid.DbType; +//import com.alibaba.druid.support.logging.Log; +//import com.alibaba.druid.support.logging.LogFactory; +//import com.alibaba.druid.util.*; +// +//import javax.sql.DataSource; +//import java.io.Closeable; +//import java.io.InputStream; +//import java.io.PrintStream; +//import java.net.URL; +//import java.sql.*; +//import java.util.*; +//import java.util.Date; +// +//import static com.alibaba.druid.util.JdbcConstants.*; +// +///** +// * @Description: TODO +// * @author: lsq +// * @date: 2021年07月22日 11:54 +// */ +//public class JdbcUtils { +// private final static Log LOG = LogFactory.getLog(JdbcUtils.class); +// +// private static final Properties DRIVER_URL_MAPPING = new Properties(); +// +// private static Boolean mysql_driver_version_6 = null; +// +// static { +// try { +// ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader(); +// if (ctxClassLoader != null) { +// for (Enumeration e = ctxClassLoader.getResources("META-INF/druid-driver.properties"); e.hasMoreElements();) { +// URL url = e.nextElement(); +// +// Properties property = new Properties(); +// +// InputStream is = null; +// try { +// is = url.openStream(); +// property.load(is); +// } finally { +// JdbcUtils.close(is); +// } +// +// DRIVER_URL_MAPPING.putAll(property); +// } +// } +// } catch (Exception e) { +// LOG.error("load druid-driver.properties error", e); +// } +// } +// +// public static void close(Connection x) { +// if (x == null) { +// return; +// } +// +// try { +// if (x.isClosed()) { +// return; +// } +// +// x.close(); +// } catch (SQLRecoverableException e) { +// // skip +// } catch (Exception e) { +// LOG.debug("close connection error", e); +// } +// } +// +// public static void close(Statement x) { +// if (x == null) { +// return; +// } +// try { +// x.close(); +// } catch (Exception e) { +// boolean printError = true; +// +// if (e instanceof SQLRecoverableException +// && "Closed Connection".equals(e.getMessage()) +// ) { +// printError = false; +// } +// +// if (printError) { +// LOG.debug("close statement error", e); +// } +// } +// } +// +// public static void close(ResultSet x) { +// if (x == null) { +// return; +// } +// try { +// x.close(); +// } catch (Exception e) { +// LOG.debug("close result set error", e); +// } +// } +// +// public static void close(Closeable x) { +// if (x == null) { +// return; +// } +// +// try { +// x.close(); +// } catch (Exception e) { +// LOG.debug("close error", e); +// } +// } +// +// public static void close(Blob x) { +// if (x == null) { +// return; +// } +// +// try { +// x.free(); +// } catch (Exception e) { +// LOG.debug("close error", e); +// } +// } +// +// public static void close(Clob x) { +// if (x == null) { +// return; +// } +// +// try { +// x.free(); +// } catch (Exception e) { +// LOG.debug("close error", e); +// } +// } +// +// public static void printResultSet(ResultSet rs) throws SQLException { +// printResultSet(rs, System.out); +// } +// +// public static void printResultSet(ResultSet rs, PrintStream out) throws SQLException { +// printResultSet(rs, out, true, "\t"); +// } +// +// public static void printResultSet(ResultSet rs, PrintStream out, boolean printHeader, String seperator) throws SQLException { +// ResultSetMetaData metadata = rs.getMetaData(); +// int columnCount = metadata.getColumnCount(); +// if (printHeader) { +// for (int columnIndex = 1; columnIndex <= columnCount; ++columnIndex) { +// if (columnIndex != 1) { +// out.print(seperator); +// } +// out.print(metadata.getColumnName(columnIndex)); +// } +// } +// +// out.println(); +// +// while (rs.next()) { +// +// for (int columnIndex = 1; columnIndex <= columnCount; ++columnIndex) { +// if (columnIndex != 1) { +// out.print(seperator); +// } +// +// int type = metadata.getColumnType(columnIndex); +// +// if (type == Types.VARCHAR || type == Types.CHAR || type == Types.NVARCHAR || type == Types.NCHAR) { +// out.print(rs.getString(columnIndex)); +// } else if (type == Types.DATE) { +// Date date = rs.getDate(columnIndex); +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(date.toString()); +// } +// } else if (type == Types.BIT) { +// boolean value = rs.getBoolean(columnIndex); +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(Boolean.toString(value)); +// } +// } else if (type == Types.BOOLEAN) { +// boolean value = rs.getBoolean(columnIndex); +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(Boolean.toString(value)); +// } +// } else if (type == Types.TINYINT) { +// byte value = rs.getByte(columnIndex); +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(Byte.toString(value)); +// } +// } else if (type == Types.SMALLINT) { +// short value = rs.getShort(columnIndex); +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(Short.toString(value)); +// } +// } else if (type == Types.INTEGER) { +// int value = rs.getInt(columnIndex); +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(Integer.toString(value)); +// } +// } else if (type == Types.BIGINT) { +// long value = rs.getLong(columnIndex); +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(Long.toString(value)); +// } +// } else if (type == Types.TIMESTAMP || type == 2014) { +// out.print(String.valueOf(rs.getTimestamp(columnIndex))); +// } else if (type == Types.DECIMAL) { +// out.print(String.valueOf(rs.getBigDecimal(columnIndex))); +// } else if (type == Types.CLOB) { +// out.print(String.valueOf(rs.getString(columnIndex))); +// } else if (type == Types.JAVA_OBJECT) { +// Object object = rs.getObject(columnIndex); +// +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(String.valueOf(object)); +// } +// } else if (type == Types.LONGVARCHAR) { +// Object object = rs.getString(columnIndex); +// +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// out.print(String.valueOf(object)); +// } +// } else if (type == Types.NULL) { +// out.print("null"); +// } else { +// Object object = rs.getObject(columnIndex); +// +// if (rs.wasNull()) { +// out.print("null"); +// } else { +// if (object instanceof byte[]) { +// byte[] bytes = (byte[]) object; +// String text = HexBin.encode(bytes); +// out.print(text); +// } else { +// out.print(String.valueOf(object)); +// } +// } +// } +// } +// out.println(); +// } +// } +// +// public static String getTypeName(int sqlType) { +// switch (sqlType) { +// case Types.ARRAY: +// return "ARRAY"; +// +// case Types.BIGINT: +// return "BIGINT"; +// +// case Types.BINARY: +// return "BINARY"; +// +// case Types.BIT: +// return "BIT"; +// +// case Types.BLOB: +// return "BLOB"; +// +// case Types.BOOLEAN: +// return "BOOLEAN"; +// +// case Types.CHAR: +// return "CHAR"; +// +// case Types.CLOB: +// return "CLOB"; +// +// case Types.DATALINK: +// return "DATALINK"; +// +// case Types.DATE: +// return "DATE"; +// +// case Types.DECIMAL: +// return "DECIMAL"; +// +// case Types.DISTINCT: +// return "DISTINCT"; +// +// case Types.DOUBLE: +// return "DOUBLE"; +// +// case Types.FLOAT: +// return "FLOAT"; +// +// case Types.INTEGER: +// return "INTEGER"; +// +// case Types.JAVA_OBJECT: +// return "JAVA_OBJECT"; +// +// case Types.LONGNVARCHAR: +// return "LONGNVARCHAR"; +// +// case Types.LONGVARBINARY: +// return "LONGVARBINARY"; +// +// case Types.NCHAR: +// return "NCHAR"; +// +// case Types.NCLOB: +// return "NCLOB"; +// +// case Types.NULL: +// return "NULL"; +// +// case Types.NUMERIC: +// return "NUMERIC"; +// +// case Types.NVARCHAR: +// return "NVARCHAR"; +// +// case Types.REAL: +// return "REAL"; +// +// case Types.REF: +// return "REF"; +// +// case Types.ROWID: +// return "ROWID"; +// +// case Types.SMALLINT: +// return "SMALLINT"; +// +// case Types.SQLXML: +// return "SQLXML"; +// +// case Types.STRUCT: +// return "STRUCT"; +// +// case Types.TIME: +// return "TIME"; +// +// case Types.TIMESTAMP: +// return "TIMESTAMP"; +// +// case 2014: +// return "TIMESTAMP_WITH_TIMEZONE"; +// +// case Types.TINYINT: +// return "TINYINT"; +// +// case Types.VARBINARY: +// return "VARBINARY"; +// +// case Types.VARCHAR: +// return "VARCHAR"; +// +// default: +// return "OTHER"; +// +// } +// } +// +// public static String getDriverClassName(String rawUrl) throws SQLException { +// if (rawUrl == null) { +// return null; +// } +// if (rawUrl.startsWith("jdbc:derby:")) { +// String prefix = "jdbc:derby:"; +// if (rawUrl.startsWith(prefix + "//")) { +// return "org.apache.derby.jdbc.ClientDriver"; +// }else{ +// return "org.apache.derby.jdbc.EmbeddedDriver"; +// } +// } else if (rawUrl.startsWith("jdbc:mysql:")) { +// if (mysql_driver_version_6 == null) { +// mysql_driver_version_6 = Utils.loadClass("com.mysql.cj.jdbc.Driver") != null; +// } +// +// if (mysql_driver_version_6) { +// return MYSQL_DRIVER_6; +// } else { +// return MYSQL_DRIVER; +// } +// } else if (rawUrl.startsWith("jdbc:log4jdbc:")) { +// return LOG4JDBC_DRIVER; +// } else if (rawUrl.startsWith("jdbc:mariadb:")) { +// return MARIADB_DRIVER; +// } else if (rawUrl.startsWith("jdbc:oracle:") // +// || rawUrl.startsWith("JDBC:oracle:")) { +// return ORACLE_DRIVER; +// } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { +// return ALI_ORACLE_DRIVER; +// } else if (rawUrl.startsWith("jdbc:oceanbase:")) { +// return OCEANBASE_DRIVER; +// } else if (rawUrl.startsWith("jdbc:microsoft:")) { +// return "com.microsoft.jdbc.sqlserver.SQLServerDriver"; +// } else if (rawUrl.startsWith("jdbc:sqlserver:")) { +// return "com.microsoft.sqlserver.jdbc.SQLServerDriver"; +// } else if (rawUrl.startsWith("jdbc:sybase:Tds:")) { +// return "com.sybase.jdbc2.jdbc.SybDriver"; +// } else if (rawUrl.startsWith("jdbc:jtds:")) { +// return "net.sourceforge.jtds.jdbc.Driver"; +// } else if (rawUrl.startsWith("jdbc:fake:") || rawUrl.startsWith("jdbc:mock:")) { +// return "com.alibaba.druid.mock.MockDriver"; +// } else if (rawUrl.startsWith("jdbc:postgresql:")) { +// return POSTGRESQL_DRIVER; +// } else if (rawUrl.startsWith("jdbc:edb:")) { +// return ENTERPRISEDB_DRIVER; +// } else if (rawUrl.startsWith("jdbc:odps:")) { +// return ODPS_DRIVER; +// } else if (rawUrl.startsWith("jdbc:hsqldb:")) { +// return "org.hsqldb.jdbcDriver"; +// } else if (rawUrl.startsWith("jdbc:db2:")) { +// // Resolve the DB2 driver from JDBC URL +// // Type2 COM.ibm.db2.jdbc.app.DB2Driver, url = jdbc:db2:databasename +// // Type3 COM.ibm.db2.jdbc.net.DB2Driver, url = jdbc:db2:ServerIP:6789:databasename +// // Type4 8.1+ com.ibm.db2.jcc.DB2Driver, url = jdbc:db2://ServerIP:50000/databasename +// String prefix = "jdbc:db2:"; +// if (rawUrl.startsWith(prefix + "//")) { // Type4 +// return DB2_DRIVER; // "com.ibm.db2.jcc.DB2Driver"; +// } else { +// String suffix = rawUrl.substring(prefix.length()); +// if (suffix.indexOf(':') > 0) { // Type3 +// return DB2_DRIVER3; // COM.ibm.db2.jdbc.net.DB2Driver +// } else { // Type2 +// return DB2_DRIVER2; // COM.ibm.db2.jdbc.app.DB2Driver +// } +// } +// } else if (rawUrl.startsWith("jdbc:sqlite:")) { +// return SQLITE_DRIVER; +// } else if (rawUrl.startsWith("jdbc:ingres:")) { +// return "com.ingres.jdbc.IngresDriver"; +// } else if (rawUrl.startsWith("jdbc:h2:")) { +// return H2_DRIVER; +// } else if (rawUrl.startsWith("jdbc:mckoi:")) { +// return "com.mckoi.JDBCDriver"; +// } else if (rawUrl.startsWith("jdbc:cloudscape:")) { +// return "COM.cloudscape.core.JDBCDriver"; +// } else if (rawUrl.startsWith("jdbc:informix-sqli:")) { +// return "com.informix.jdbc.IfxDriver"; +// } else if (rawUrl.startsWith("jdbc:timesten:")) { +// return "com.timesten.jdbc.TimesTenDriver"; +// } else if (rawUrl.startsWith("jdbc:as400:")) { +// return "com.ibm.as400.access.AS400JDBCDriver"; +// } else if (rawUrl.startsWith("jdbc:sapdb:")) { +// return "com.sap.dbtech.jdbc.DriverSapDB"; +// } else if (rawUrl.startsWith("jdbc:JSQLConnect:")) { +// return "com.jnetdirect.jsql.JSQLDriver"; +// } else if (rawUrl.startsWith("jdbc:JTurbo:")) { +// return "com.newatlanta.jturbo.driver.Driver"; +// } else if (rawUrl.startsWith("jdbc:firebirdsql:")) { +// return "org.firebirdsql.jdbc.FBDriver"; +// } else if (rawUrl.startsWith("jdbc:interbase:")) { +// return "interbase.interclient.Driver"; +// } else if (rawUrl.startsWith("jdbc:pointbase:")) { +// return "com.pointbase.jdbc.jdbcUniversalDriver"; +// } else if (rawUrl.startsWith("jdbc:edbc:")) { +// return "ca.edbc.jdbc.EdbcDriver"; +// } else if (rawUrl.startsWith("jdbc:mimer:multi1:")) { +// return "com.mimer.jdbc.Driver"; +// } else if (rawUrl.startsWith("jdbc:dm:")) { +// return JdbcConstants.DM_DRIVER; +// } else if (rawUrl.startsWith("jdbc:kingbase:")) { +// return JdbcConstants.KINGBASE_DRIVER; +// } else if (rawUrl.startsWith("jdbc:kingbase8:")) { +// return "com.kingbase8.Driver"; +// } else if (rawUrl.startsWith("jdbc:oscar:")) { +// return "com.oscar.Driver"; +// } else if (rawUrl.startsWith("jdbc:gbase:")) { +// return JdbcConstants.GBASE_DRIVER; +// } else if (rawUrl.startsWith("jdbc:xugu:")) { +// return JdbcConstants.XUGU_DRIVER; +// } else if (rawUrl.startsWith("jdbc:hive:")) { +// return JdbcConstants.HIVE_DRIVER; +// } else if (rawUrl.startsWith("jdbc:hive2:")) { +// return JdbcConstants.HIVE_DRIVER; +// } else if (rawUrl.startsWith("jdbc:phoenix:thin:")) { +// return "org.apache.phoenix.queryserver.client.Driver"; +// } else if (rawUrl.startsWith("jdbc:phoenix://")) { +// return JdbcConstants.PHOENIX_DRIVER; +// } else if (rawUrl.startsWith("jdbc:kylin:")) { +// return JdbcConstants.KYLIN_DRIVER; +// } else if (rawUrl.startsWith("jdbc:elastic:")) { +// return JdbcConstants.ELASTIC_SEARCH_DRIVER; +// } else if (rawUrl.startsWith("jdbc:clickhouse:")) { +// return JdbcConstants.CLICKHOUSE_DRIVER; +// } else if(rawUrl.startsWith("jdbc:presto:")) { +// return JdbcConstants.PRESTO_DRIVER; +// } else if(rawUrl.startsWith("jdbc:trino:")) { +// return JdbcConstants.TRINO_DRIVER; +// } else if (rawUrl.startsWith("jdbc:inspur:")) { +// return JdbcConstants.KDB_DRIVER; +// } else if (rawUrl.startsWith("jdbc:polardb")) { +// return JdbcConstants.POLARDB_DRIVER; +// } else if (rawUrl.startsWith("jdbc:highgo:")) { +// return "com.highgo.jdbc.Driver"; +// } else { +// throw new SQLException("unknown jdbc driver : " + rawUrl); +// } +// } +// +// public static DbType getDbTypeRaw(String rawUrl, String driverClassName) { +// if (rawUrl == null) { +// return null; +// } +// +// if (rawUrl.startsWith("jdbc:derby:") || rawUrl.startsWith("jdbc:log4jdbc:derby:")) { +// return DbType.derby; +// } else if (rawUrl.startsWith("jdbc:mysql:") || rawUrl.startsWith("jdbc:cobar:") +// || rawUrl.startsWith("jdbc:log4jdbc:mysql:")) { +// return DbType.mysql; +// } else if (rawUrl.startsWith("jdbc:mariadb:")) { +// return DbType.mariadb; +// } else if (rawUrl.startsWith("jdbc:oracle:") || rawUrl.startsWith("jdbc:log4jdbc:oracle:")) { +// return DbType.oracle; +// } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { +// return DbType.ali_oracle; +// } else if (rawUrl.startsWith("jdbc:oceanbase:oracle:")) { +// return DbType.oceanbase_oracle; +// } else if (rawUrl.startsWith("jdbc:oceanbase:")) { +// return DbType.oceanbase; +// } else if (rawUrl.startsWith("jdbc:microsoft:") || rawUrl.startsWith("jdbc:log4jdbc:microsoft:")) { +// return DbType.sqlserver; +// } else if (rawUrl.startsWith("jdbc:sqlserver:") || rawUrl.startsWith("jdbc:log4jdbc:sqlserver:")) { +// return DbType.sqlserver; +// } else if (rawUrl.startsWith("jdbc:sybase:Tds:") || rawUrl.startsWith("jdbc:log4jdbc:sybase:")) { +// return DbType.sybase; +// } else if (rawUrl.startsWith("jdbc:jtds:") || rawUrl.startsWith("jdbc:log4jdbc:jtds:")) { +// return DbType.jtds; +// } else if (rawUrl.startsWith("jdbc:fake:") || rawUrl.startsWith("jdbc:mock:")) { +// return DbType.mock; +// } else if (rawUrl.startsWith("jdbc:postgresql:") || rawUrl.startsWith("jdbc:log4jdbc:postgresql:")) { +// return DbType.postgresql; +// } else if (rawUrl.startsWith("jdbc:edb:")) { +// return DbType.edb; +// } else if (rawUrl.startsWith("jdbc:hsqldb:") || rawUrl.startsWith("jdbc:log4jdbc:hsqldb:")) { +// return DbType.hsql; +// } else if (rawUrl.startsWith("jdbc:odps:")) { +// return DbType.odps; +// } else if (rawUrl.startsWith("jdbc:db2:")) { +// return DbType.db2; +// } else if (rawUrl.startsWith("jdbc:sqlite:")) { +// return DbType.sqlite; +// } else if (rawUrl.startsWith("jdbc:ingres:")) { +// return DbType.ingres; +// } else if (rawUrl.startsWith("jdbc:h2:") || rawUrl.startsWith("jdbc:log4jdbc:h2:")) { +// return DbType.h2; +// } else if (rawUrl.startsWith("jdbc:mckoi:")) { +// return DbType.mock; +// } else if (rawUrl.startsWith("jdbc:cloudscape:")) { +// return DbType.cloudscape; +// } else if (rawUrl.startsWith("jdbc:informix-sqli:") || rawUrl.startsWith("jdbc:log4jdbc:informix-sqli:")) { +// return DbType.informix; +// } else if (rawUrl.startsWith("jdbc:timesten:")) { +// return DbType.timesten; +// } else if (rawUrl.startsWith("jdbc:as400:")) { +// return DbType.as400; +// } else if (rawUrl.startsWith("jdbc:sapdb:")) { +// return DbType.sapdb; +// } else if (rawUrl.startsWith("jdbc:JSQLConnect:")) { +// return DbType.JSQLConnect; +// } else if (rawUrl.startsWith("jdbc:JTurbo:")) { +// return DbType.JTurbo; +// } else if (rawUrl.startsWith("jdbc:firebirdsql:")) { +// return DbType.firebirdsql; +// } else if (rawUrl.startsWith("jdbc:interbase:")) { +// return DbType.interbase; +// } else if (rawUrl.startsWith("jdbc:pointbase:")) { +// return DbType.pointbase; +// } else if (rawUrl.startsWith("jdbc:edbc:")) { +// return DbType.edbc; +// } else if (rawUrl.startsWith("jdbc:mimer:multi1:")) { +// return DbType.mimer; +// } else if (rawUrl.startsWith("jdbc:dm:")) { +// return JdbcConstants.DM; +// } else if (rawUrl.startsWith("jdbc:kingbase:") || rawUrl.startsWith("jdbc:kingbase8:")) { +// return JdbcConstants.KINGBASE; +// } else if (rawUrl.startsWith("jdbc:gbase:")) { +// return JdbcConstants.GBASE; +// } else if (rawUrl.startsWith("jdbc:xugu:")) { +// return JdbcConstants.XUGU; +// } else if (rawUrl.startsWith("jdbc:log4jdbc:")) { +// return DbType.log4jdbc; +// } else if (rawUrl.startsWith("jdbc:hive:")) { +// return DbType.hive; +// } else if (rawUrl.startsWith("jdbc:hive2:")) { +// return DbType.hive; +// } else if (rawUrl.startsWith("jdbc:phoenix:")) { +// return DbType.phoenix; +// } else if (rawUrl.startsWith("jdbc:kylin:")) { +// return DbType.kylin; +// } else if (rawUrl.startsWith("jdbc:elastic:")) { +// return DbType.elastic_search; +// } else if (rawUrl.startsWith("jdbc:clickhouse:")) { +// return DbType.clickhouse; +// } else if (rawUrl.startsWith("jdbc:presto:")) { +// return DbType.presto; +// } else if (rawUrl.startsWith("jdbc:inspur:")) { +// return DbType.kdb; +// } else if (rawUrl.startsWith("jdbc:polardb")) { +// return DbType.polardb; +// } else if (rawUrl.startsWith("jdbc:highgo:")) { +// return DbType.highgo; +// } else { +// return null; +// } +// } +// +// public static String getDbType(String rawUrl, String driverClassName) { +// DbType dbType = getDbTypeRaw(rawUrl, driverClassName); +// +// if (dbType == null) { +// return null; +// } +// +// return dbType.name(); +// } +// +// public static Driver createDriver(String driverClassName) throws SQLException { +// return createDriver(null, driverClassName); +// } +// +// public static Driver createDriver(ClassLoader classLoader, String driverClassName) throws SQLException { +// Class clazz = null; +// if (classLoader != null) { +// try { +// clazz = classLoader.loadClass(driverClassName); +// } catch (ClassNotFoundException e) { +// // skip +// } +// } +// +// if (clazz == null) { +// try { +// ClassLoader contextLoader = Thread.currentThread().getContextClassLoader(); +// if (contextLoader != null) { +// clazz = contextLoader.loadClass(driverClassName); +// } +// } catch (ClassNotFoundException e) { +// // skip +// } +// } +// +// if (clazz == null) { +// try { +// clazz = Class.forName(driverClassName); +// } catch (ClassNotFoundException e) { +// throw new SQLException(e.getMessage(), e); +// } +// } +// +// try { +// return (Driver) clazz.newInstance(); +// } catch (IllegalAccessException e) { +// throw new SQLException(e.getMessage(), e); +// } catch (InstantiationException e) { +// throw new SQLException(e.getMessage(), e); +// } +// } +// +// public static int executeUpdate(DataSource dataSource, String sql, Object... parameters) throws SQLException { +// return executeUpdate(dataSource, sql, Arrays.asList(parameters)); +// } +// +// public static int executeUpdate(DataSource dataSource, String sql, List parameters) throws SQLException { +// Connection conn = null; +// try { +// conn = dataSource.getConnection(); +// return executeUpdate(conn, sql, parameters); +// } finally { +// close(conn); +// } +// } +// +// public static int executeUpdate(Connection conn, String sql, List parameters) throws SQLException { +// PreparedStatement stmt = null; +// +// int updateCount; +// try { +// stmt = conn.prepareStatement(sql); +// +// setParameters(stmt, parameters); +// +// updateCount = stmt.executeUpdate(); +// } finally { +// JdbcUtils.close(stmt); +// } +// +// return updateCount; +// } +// +// public static void execute(DataSource dataSource, String sql, Object... parameters) throws SQLException { +// execute(dataSource, sql, Arrays.asList(parameters)); +// } +// +// public static void execute(DataSource dataSource, String sql, List parameters) throws SQLException { +// Connection conn = null; +// try { +// conn = dataSource.getConnection(); +// execute(conn, sql, parameters); +// } finally { +// close(conn); +// } +// } +// +// public static void execute(Connection conn, String sql) throws SQLException { +// execute(conn, sql, Collections.emptyList()); +// } +// +// public static void execute(Connection conn, String sql, List parameters) throws SQLException { +// PreparedStatement stmt = null; +// +// try { +// stmt = conn.prepareStatement(sql); +// +// setParameters(stmt, parameters); +// +// stmt.executeUpdate(); +// } finally { +// JdbcUtils.close(stmt); +// } +// } +// +// public static List> executeQuery(DataSource dataSource, String sql, Object... parameters) +// throws SQLException { +// return executeQuery(dataSource, sql, Arrays.asList(parameters)); +// } +// +// public static List> executeQuery(DataSource dataSource, String sql, List parameters) +// throws SQLException { +// Connection conn = null; +// try { +// conn = dataSource.getConnection(); +// return executeQuery(conn, sql, parameters); +// } finally { +// close(conn); +// } +// } +// +// public static List> executeQuery(Connection conn, String sql, List parameters) +// throws SQLException { +// List> rows = new ArrayList>(); +// +// PreparedStatement stmt = null; +// ResultSet rs = null; +// try { +// stmt = conn.prepareStatement(sql); +// +// setParameters(stmt, parameters); +// +// rs = stmt.executeQuery(); +// +// ResultSetMetaData rsMeta = rs.getMetaData(); +// +// while (rs.next()) { +// Map row = new LinkedHashMap(); +// +// for (int i = 0, size = rsMeta.getColumnCount(); i < size; ++i) { +// String columName = rsMeta.getColumnLabel(i + 1); +// Object value = rs.getObject(i + 1); +// row.put(columName, value); +// } +// +// rows.add(row); +// } +// } finally { +// JdbcUtils.close(rs); +// JdbcUtils.close(stmt); +// } +// +// return rows; +// } +// +// private static void setParameters(PreparedStatement stmt, List parameters) throws SQLException { +// for (int i = 0, size = parameters.size(); i < size; ++i) { +// Object param = parameters.get(i); +// stmt.setObject(i + 1, param); +// } +// } +// +// public static void insertToTable(DataSource dataSource, String tableName, Map data) +// throws SQLException { +// Connection conn = null; +// try { +// conn = dataSource.getConnection(); +// insertToTable(conn, tableName, data); +// } finally { +// close(conn); +// } +// } +// +// public static void insertToTable(Connection conn, String tableName, Map data) throws SQLException { +// String sql = makeInsertToTableSql(tableName, data.keySet()); +// List parameters = new ArrayList(data.values()); +// execute(conn, sql, parameters); +// } +// +// public static String makeInsertToTableSql(String tableName, Collection names) { +// StringBuilder sql = new StringBuilder() // +// .append("insert into ") // +// .append(tableName) // +// .append("("); // +// +// int nameCount = 0; +// for (String name : names) { +// if (nameCount > 0) { +// sql.append(","); +// } +// sql.append(name); +// nameCount++; +// } +// sql.append(") values ("); +// for (int i = 0; i < nameCount; ++i) { +// if (i != 0) { +// sql.append(","); +// } +// sql.append("?"); +// } +// sql.append(")"); +// +// return sql.toString(); +// } +// +// public static void executeQuery(DataSource dataSource +// , ResultSetConsumer consumer +// , String sql +// , Object... parameters) throws SQLException { +// Connection conn = null; +// PreparedStatement stmt = null; +// ResultSet rs = null; +// try { +// conn = dataSource.getConnection(); +// stmt = conn.prepareStatement(sql); +// for (int i = 0; i < parameters.length; ++i) { +// stmt.setObject(i + 1, parameters[i]); +// } +// rs = stmt.executeQuery(); +// while (rs.next()) { +// if (consumer != null) { +// T object = consumer.apply(rs); +// consumer.accept(object); +// } +// } +// } finally { +// close(rs); +// close(stmt); +// close(conn); +// } +// } +// +// public static List showTables(Connection conn, DbType dbType) throws SQLException { +// if (DbType.mysql == dbType || DbType.oceanbase == dbType) { +// return MySqlUtils.showTables(conn); +// } +// +// if (dbType == DbType.oracle || dbType == DbType.oceanbase_oracle) { +// return OracleUtils.showTables(conn); +// } +// +// if (dbType == DbType.postgresql) { +// return PGUtils.showTables(conn); +// } +// throw new SQLException("show tables dbType not support for " + dbType); +// } +// +// public static String getCreateTableScript(Connection conn, DbType dbType) throws SQLException { +// return getCreateTableScript(conn, dbType, true, true); +// } +// +// public static String getCreateTableScript(Connection conn, DbType dbType, boolean sorted, boolean simplify) throws SQLException { +// if (DbType.mysql == dbType || DbType.oceanbase == dbType) { +// return MySqlUtils.getCreateTableScript(conn, sorted, simplify); +// } +// +// if (dbType == DbType.oracle || dbType == DbType.oceanbase_oracle) { +// return OracleUtils.getCreateTableScript(conn, sorted, simplify); +// } +// +// throw new SQLException("getCreateTableScript dbType not support for " + dbType); +// } +// +// public static boolean isMySqlDriver(String driverClassName) { +// return driverClassName.equals(MYSQL_DRIVER) // +// || driverClassName.equals(MYSQL_DRIVER_6) +// || driverClassName.equals(JdbcConstants.MYSQL_DRIVER_REPLICATE); +// } +// +// public static boolean isOracleDbType(String dbType) { +// return DbType.oracle.name().equals(dbType) || // +// DbType.oceanbase.name().equals(dbType) || // +// DbType.ali_oracle.name().equalsIgnoreCase(dbType); +// } +// +// public static boolean isOracleDbType(DbType dbType) { +// return DbType.oracle == dbType || // +// DbType.oceanbase == dbType || // +// DbType.ali_oracle == dbType; +// } +// +// public static boolean isMysqlDbType(String dbTypeName) { +// return isMysqlDbType( +// DbType.of(dbTypeName)); +// } +// +// public static boolean isMysqlDbType(DbType dbType) { +// if (dbType == null) { +// return false; +// } +// +// switch (dbType) { +// case mysql: +// case oceanbase: +// case drds: +// case mariadb: +// case h2: +// return true; +// default: +// return false; +// } +// } +// +// public static boolean isPgsqlDbType(String dbTypeName) { +// return isPgsqlDbType( +// DbType.of(dbTypeName) +// ); +// } +// +// public static boolean isPgsqlDbType(DbType dbType) { +// if (dbType == null) { +// return false; +// } +// +// switch (dbType) { +// case postgresql: +// case edb: +// case polardb: +// return true; +// default: +// return false; +// } +// } +// +// public static boolean isSqlserverDbType(String dbTypeName) { +// return isSqlserverDbType( +// DbType.of(dbTypeName)); +// } +// +// public static boolean isSqlserverDbType(DbType dbType) { +// if (dbType == null) { +// return false; +// } +// +// switch (dbType) { +// case sqlserver: +// case jtds: +// return true; +// default: +// return false; +// } +// } +//} diff --git a/minidao-pe-example/src/main/java/jeecg/aop/MinidaoInterceptor.java b/minidao-pe-example/src/main/java/jeecg/aop/MinidaoInterceptor.java index 9f3aba5..27525c7 100644 --- a/minidao-pe-example/src/main/java/jeecg/aop/MinidaoInterceptor.java +++ b/minidao-pe-example/src/main/java/jeecg/aop/MinidaoInterceptor.java @@ -1,8 +1,7 @@ package jeecg.aop; +import org.apache.commons.lang3.StringUtils; import org.jeecgframework.minidao.aspect.EmptyInterceptor; -import org.jeecgframework.p3.core.author.LoginUser; -import org.jeecgframework.p3.core.util.plugin.ContextHolderUtils; import org.springframework.stereotype.Service; import java.lang.reflect.Field; @@ -22,37 +21,25 @@ public class MinidaoInterceptor implements EmptyInterceptor { * 支付窗账号ID,保存用户Session会话中 */ public static final String ALIPAY_ACCOUNT_ID = "ALIPAY_ACCOUNT_ID"; - + @Override public boolean onInsert(Field[] fields, Object obj) { Map map = new HashMap(); for (int j = 0; j < fields.length; j++) { fields[j].setAccessible(true); String fieldName = fields[j].getName(); - //获取登录用户 - LoginUser loginUser = ContextHolderUtils.getLoginSessionUser(); - if(loginUser!=null){ + + //TODO 模拟获取登录用户 + String loginUserName = "scott"; + + if(StringUtils.isNotBlank(loginUserName)){ if ("createBy".equals(fieldName)) { - map.put("createBy", loginUser.getUserName()); + map.put("createBy", loginUserName); } } if ("createDate".equals(fieldName)) { map.put("createDate", new Date()); } - - //营销平台,支付窗拦截器,注入当前在线公众ID - if ("accountid".equals(fieldName)) { - try { - //Object accountid = ContextHolderUtils.getSession().get.getAttribute(ALIPAY_ACCOUNT_ID); - Object accountid = null; - if(accountid!=null){ - map.put("accountid", accountid); - } - } catch (Exception e) { - - } - - } } try { //回写Value值 @@ -69,11 +56,12 @@ public boolean onUpdate(Field[] fields, Object obj) { for (int j = 0; j < fields.length; j++) { fields[j].setAccessible(true); String fieldName = fields[j].getName(); - //获取登录用户 - LoginUser loginUser = ContextHolderUtils.getLoginSessionUser(); - if(loginUser!=null){ + + //TODO 模拟获取登录用户 + String loginUserName = "scott"; + if(StringUtils.isNotBlank(loginUserName)){ if ("updateBy".equals(fieldName)) { - map.put("updateBy", loginUser.getUserName()); + map.put("updateBy", loginUserName); } } if ("updateDate".equals(fieldName)) { diff --git a/minidao-pe-example/src/main/java/jeecg/codegenerate/CodeGenerateUtil.java b/minidao-pe-example/src/main/java/jeecg/codegenerate/CodeGenerateUtil.java index d66a743..2c10a86 100644 --- a/minidao-pe-example/src/main/java/jeecg/codegenerate/CodeGenerateUtil.java +++ b/minidao-pe-example/src/main/java/jeecg/codegenerate/CodeGenerateUtil.java @@ -1,23 +1,23 @@ -package jeecg.codegenerate; - -import org.jeecgframework.p3.cg.def.FtlDef; -import org.jeecgframework.p3.cg.factory.CodeGenerateFactory; - -/** - * 描述:代码生成器工具类(支持单表) - * - * @author:scott - * @version:1.0 - */ -public class CodeGenerateUtil { - - public static void main(String[] args) { - //表名(多个表可用逗号隔开) - String code_cg_tables = "sys_dict"; - - //执行代码生成器 - for (String tableName : code_cg_tables.split(",")) { - CodeGenerateFactory.codeGenerateByFTL(tableName, "项目", FtlDef.KEY_TYPE_02); - } - } -} +//package jeecg.codegenerate; +// +//import org.jeecgframework.p3.cg.def.FtlDef; +//import org.jeecgframework.p3.cg.factory.CodeGenerateFactory; +// +///** +// * 描述:代码生成器工具类(支持单表) +// * +// * @author:scott +// * @version:1.0 +// */ +//public class CodeGenerateUtil { +// +// public static void main(String[] args) { +// //表名(多个表可用逗号隔开) +// String code_cg_tables = "sys_dict"; +// +// //执行代码生成器 +// for (String tableName : code_cg_tables.split(",")) { +// CodeGenerateFactory.codeGenerateByFTL(tableName, "项目", FtlDef.KEY_TYPE_02); +// } +// } +//} diff --git a/minidao-pe-example/src/main/java/jeecg/codegenerate/OneToMainUtil.java b/minidao-pe-example/src/main/java/jeecg/codegenerate/OneToMainUtil.java index 943dbd9..1755863 100644 --- a/minidao-pe-example/src/main/java/jeecg/codegenerate/OneToMainUtil.java +++ b/minidao-pe-example/src/main/java/jeecg/codegenerate/OneToMainUtil.java @@ -1,59 +1,59 @@ -package jeecg.codegenerate; - - -import org.jeecgframework.p3.cg.factory.CodeGenerateFactoryOneToMany; -import org.jeecgframework.p3.cg.pojo.onetomany.CodeParamEntity; -import org.jeecgframework.p3.cg.pojo.onetomany.SubTableEntity; - -import java.util.ArrayList; -import java.util.List; - -/** - * 代码生成器【一对多】 - * - * @author scott - * @site www.jeecg.com - * - */ -public class OneToMainUtil { - - /** - * 一对多(父子表)数据模型,生成方法 - * @param args - */ - public static void main(String[] args) { - //第一步:设置主表配置 - CodeParamEntity codeParamEntityIn = new CodeParamEntity(); - - codeParamEntityIn.setTableName("jeecg_order_main");//主表名 - codeParamEntityIn.setEntityName("Order"); //实体名 - codeParamEntityIn.setFtlDescription("订单"); //描述 - - //第二步:设置子表集合配置 - List subTabParamIn = new ArrayList(); - //[1].子表一 - SubTableEntity po = new SubTableEntity(); - po.setTableName("jeecg_order_customer");//子表名 - po.setEntityName("Custom"); //实体名 - po.setEntityPackage("test"); //包名 - po.setFtlDescription("客户明细"); //描述 - //子表外键参数配置 - po.setForeignKey("order_id");//子表外键 - po.setMainForeignKey("id");//对应的主表字段 - subTabParamIn.add(po); - //[2].子表二 - SubTableEntity po2 = new SubTableEntity(); - po2.setTableName("jeecg_order_ticket"); //子表名 - po2.setEntityName("Product"); //实体名 - po2.setEntityPackage("test"); //包名 - po2.setFtlDescription("机票明细"); //描述 - //子表外键参数配置 - po2.setForeignKey("order_id");//子表外键 - po2.setMainForeignKey("id");//对应的主表字段 - subTabParamIn.add(po2); - codeParamEntityIn.setSubTabParam(subTabParamIn); - - //第三步:一对多(父子表)数据模型,代码生成 - CodeGenerateFactoryOneToMany.oneToManyCreate(codeParamEntityIn,subTabParamIn); - } -} +//package jeecg.codegenerate; +// +// +//import org.jeecgframework.p3.cg.factory.CodeGenerateFactoryOneToMany; +//import org.jeecgframework.p3.cg.pojo.onetomany.CodeParamEntity; +//import org.jeecgframework.p3.cg.pojo.onetomany.SubTableEntity; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * 代码生成器【一对多】 +// * +// * @author scott +// * @site www.jeecg.com +// * +// */ +//public class OneToMainUtil { +// +// /** +// * 一对多(父子表)数据模型,生成方法 +// * @param args +// */ +// public static void main(String[] args) { +// //第一步:设置主表配置 +// CodeParamEntity codeParamEntityIn = new CodeParamEntity(); +// +// codeParamEntityIn.setTableName("jeecg_order_main");//主表名 +// codeParamEntityIn.setEntityName("Order"); //实体名 +// codeParamEntityIn.setFtlDescription("订单"); //描述 +// +// //第二步:设置子表集合配置 +// List subTabParamIn = new ArrayList(); +// //[1].子表一 +// SubTableEntity po = new SubTableEntity(); +// po.setTableName("jeecg_order_customer");//子表名 +// po.setEntityName("Custom"); //实体名 +// po.setEntityPackage("test"); //包名 +// po.setFtlDescription("客户明细"); //描述 +// //子表外键参数配置 +// po.setForeignKey("order_id");//子表外键 +// po.setMainForeignKey("id");//对应的主表字段 +// subTabParamIn.add(po); +// //[2].子表二 +// SubTableEntity po2 = new SubTableEntity(); +// po2.setTableName("jeecg_order_ticket"); //子表名 +// po2.setEntityName("Product"); //实体名 +// po2.setEntityPackage("test"); //包名 +// po2.setFtlDescription("机票明细"); //描述 +// //子表外键参数配置 +// po2.setForeignKey("order_id");//子表外键 +// po2.setMainForeignKey("id");//对应的主表字段 +// subTabParamIn.add(po2); +// codeParamEntityIn.setSubTabParam(subTabParamIn); +// +// //第三步:一对多(父子表)数据模型,代码生成 +// CodeGenerateFactoryOneToMany.oneToManyCreate(codeParamEntityIn,subTabParamIn); +// } +//} diff --git a/minidao-pe-example/src/test/java/test/ClientDaoPageTest.java b/minidao-pe-example/src/test/java/test/ClientDaoPageTest.java index fd64f69..d2f24eb 100644 --- a/minidao-pe-example/src/test/java/test/ClientDaoPageTest.java +++ b/minidao-pe-example/src/test/java/test/ClientDaoPageTest.java @@ -1,9 +1,9 @@ package test; -import com.alibaba.druid.support.logging.Log; -import com.alibaba.druid.support.logging.LogFactory; import examples.dao.EmployeeDao; import examples.entity.Employee; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.jeecgframework.minidao.pojo.MiniDaoPage; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; diff --git a/minidao-pe-example/src/test/java/test/EmployeeDaoJunit.java b/minidao-pe-example/src/test/java/test/EmployeeDaoJunit.java index 115d55f..42d019d 100644 --- a/minidao-pe-example/src/test/java/test/EmployeeDaoJunit.java +++ b/minidao-pe-example/src/test/java/test/EmployeeDaoJunit.java @@ -2,6 +2,8 @@ import examples.dao.EmployeeDao; import examples.entity.Employee; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.jeecgframework.minidao.pojo.MiniDaoPage; import org.junit.Before; import org.junit.Test; @@ -21,7 +23,8 @@ * */ public class EmployeeDaoJunit extends SpringTxTestCase { - + private final Log logger = LogFactory.getLog(EmployeeDaoJunit.class); + @Resource(name = "employeeDao") private EmployeeDao employeeDao; @@ -77,7 +80,7 @@ public void testGetMap() { @Test public void testGetEntity() { Employee employee = employeeDao.get("AD1024E0DAD84D2DB76A82E779F85B76"); - logger.info("testGetEntity --" + employee.getName()); + logger.info("testGetEntity --" + (employee != null ? employee.getName() : "查询不到对象")); } @Test diff --git a/minidao-pe/pom.xml b/minidao-pe/pom.xml index 61598db..676ccc1 100644 --- a/minidao-pe/pom.xml +++ b/minidao-pe/pom.xml @@ -4,7 +4,7 @@ org.jeecgframework.boot3 minidao-pe - 1.9.6 + 1.10.1 jar minidao-pe @@ -30,7 +30,7 @@ - 1.9.6 + 1.9.9 3.2.2 2.3.32 3.2.21 @@ -38,7 +38,8 @@ 3.12.0 6.0.13 3.25.0-GA - 4.4 + 4.6 + 4.13.1 @@ -54,6 +55,12 @@ ${org.springframework.version} + + junit + junit + ${junit.version} + test + @@ -107,10 +114,12 @@ ${javassist.version} + com.github.jsqlparser jsqlparser ${jsqlparser.version} + provided jakarta.annotation diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/aop/MiniDaoHandler.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/aop/MiniDaoHandler.java index a92dbc9..10cbe53 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/aop/MiniDaoHandler.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/aop/MiniDaoHandler.java @@ -1,7 +1,19 @@ package org.jeecgframework.minidao.aop; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import net.sf.jsqlparser.JSQLParserException; +import netscape.javascript.JSException; import ognl.Ognl; import ognl.OgnlException; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -14,7 +26,6 @@ import org.jeecgframework.minidao.aspect.EmptyInterceptor; import org.jeecgframework.minidao.def.MiniDaoConstants; import org.jeecgframework.minidao.pagehelper.dialect.PageAutoDialect; -import org.jeecgframework.minidao.pagehelper.parser.CountSqlParser; import org.jeecgframework.minidao.pojo.MiniDaoPage; import org.jeecgframework.minidao.spring.rowMapper.MiniColumnMapRowMapper; import org.jeecgframework.minidao.spring.rowMapper.MiniColumnOriginalMapRowMapper; @@ -35,14 +46,6 @@ import org.springframework.jdbc.support.KeyHolder; import javax.sql.DataSource; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.math.BigDecimal; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; /** * @@ -69,7 +72,7 @@ public class MiniDaoHandler implements InvocationHandler { @Lazy private NamedParameterJdbcTemplate namedParameterJdbcTemplate; /** minidao拦截器 */ - @Autowired + @Autowired(required = false) @Lazy private EmptyInterceptor emptyInterceptor; @@ -90,8 +93,6 @@ public class MiniDaoHandler implements InvocationHandler { //自定获取方言 protected PageAutoDialect pageAutoDialect = new PageAutoDialect(); - //处理SQL - protected CountSqlParser countSqlParser = new CountSqlParser(); //序列查询sql public static final String SEQ_NEXTVAL_SQL = "SELECT %s.nextval FROM DUAL"; @@ -417,11 +418,11 @@ private Object getReturnMinidaoResult(MiniDaoPage pageSetting, Method method, St if (page != 0 && rows != 0) { if (returnType.isAssignableFrom(MiniDaoPage.class)) { if (paramMap != null) { - String countsql = countSqlParser.getSmartCountSql(executeSql); - logger.info("page countsql===> "+countsql); + String countsql = MiniDaoUtil.getCountSql(executeSql); + logger.info("page smart countsql===> "+countsql); pageSetting.setTotal(namedParameterJdbcTemplate.queryForObject(countsql, paramMap, Integer.class)); } else { - String countsql = countSqlParser.getSmartCountSql(executeSql); + String countsql = MiniDaoUtil.getCountSql(executeSql); logger.info("page countsql===> "+countsql); pageSetting.setTotal(jdbcTemplate.queryForObject(countsql, Integer.class)); } diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/AbstractDialect.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/AbstractDialect.java index 6ff9775..6c41a82 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/AbstractDialect.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/AbstractDialect.java @@ -1,6 +1,5 @@ package org.jeecgframework.minidao.pagehelper.dialect; -import org.jeecgframework.minidao.pagehelper.parser.CountSqlParser; import org.jeecgframework.minidao.pojo.MiniDaoPage; /** @@ -8,8 +7,6 @@ * */ public abstract class AbstractDialect implements Dialect { - //TODO 处理SQL - protected CountSqlParser countSqlParser = new CountSqlParser(); /** * 处理分页参数 diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServer2012Dialect.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServer2012Dialect.java index 5dc362d..8404924 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServer2012Dialect.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServer2012Dialect.java @@ -12,17 +12,16 @@ public class SqlServer2012Dialect extends SqlServerDialect { @Override public String getPageSql(String sql, MiniDaoPage miniDaoPage) { StringBuilder sqlBuilder = new StringBuilder(sql.length() + 64); - //update-begin--Author:wangshuai--Date:20211201--for:判断sqlserver是否包含offset或next,包含用select包裹起来,不包含直接拼接 - if(sql.toUpperCase().contains("OFFSET") && sql.toUpperCase().contains("NEXT")){ - sqlBuilder.append("SELECT * FROM ("); - sqlBuilder.append(sql); - sqlBuilder.append(") TMP_PAGE "); - sqlBuilder.append("\n OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY "); - }else{ - sqlBuilder.append(sql); - sqlBuilder.append("\n OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY "); - } - //update-end--Author:wangshuai--Date:20211201--for:判断sqlserver是否包含offset或next,包含用select包裹起来,不包含直接拼接 + + /** + * 在SQL Server中,使用OFFSET关键字来实现分页查询时,通常需要搭配ORDER BY子句来指定排序规则,因为OFFSET必须和ORDER BY一起使用。 + * 如果不需要排序,可以使用ORDER BY (SELECT NULL)来实现类似无排序的效果。 + */ + sqlBuilder.append("SELECT * FROM ("); + sqlBuilder.append(sql); + sqlBuilder.append(") TMP_PAGE "); + sqlBuilder.append(" ORDER BY (SELECT NULL) "); + sqlBuilder.append("\n OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY "); String newSql = sqlBuilder.toString(); newSql = super.format(newSql, super.getPageParam(miniDaoPage)); return newSql; diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServerDialect.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServerDialect.java index 8bef5ea..8194d08 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServerDialect.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/dialect/helper/SqlServerDialect.java @@ -1,24 +1,38 @@ package org.jeecgframework.minidao.pagehelper.dialect.helper; +import org.jeecgframework.minidao.sqlparser.AbstractSqlProcessor; import org.jeecgframework.minidao.pagehelper.dialect.AbstractHelperDialect; -import org.jeecgframework.minidao.pagehelper.parser.SqlServerParser; import org.jeecgframework.minidao.pojo.MiniDaoPage; +import org.jeecgframework.minidao.sqlparser.impl.JsqlparserSqlProcessor; +import org.jeecgframework.minidao.sqlparser.impl.SimpleSqlProcessor; +import org.jeecgframework.minidao.util.MiniDaoUtil; /** * SqlServer */ public class SqlServerDialect extends AbstractHelperDialect { - protected static SqlServerParser pageSql = new SqlServerParser(); + + //update-begin---author:scott ---date:2024-07-04 for:SQL解析引擎改造支持普通和jsqlparser切换---- + protected static AbstractSqlProcessor abstractSqlProcessor; + + static { + if (MiniDaoUtil.isJSqlParserAvailable()) { + abstractSqlProcessor = new JsqlparserSqlProcessor(); + } else { + abstractSqlProcessor = new SimpleSqlProcessor(); + } + } + //update-end---author:scott ---date:2024-07-04 for:SQL解析引擎改造支持普通和jsqlparser切换---- @Override public String getPageSql(String sql, MiniDaoPage miniDaoPage) { - int page = miniDaoPage.getPage(); - int rows = miniDaoPage.getRows(); - int beginNum = (page - 1) * rows; - String cacheSql = sql; - cacheSql = pageSql.convertToPageSql(cacheSql, null, null); - cacheSql = cacheSql.replace(String.valueOf(Long.MIN_VALUE), String.valueOf(beginNum)); - cacheSql = cacheSql.replace(String.valueOf(Long.MAX_VALUE), String.valueOf(rows)); - return cacheSql; + String pageSql = null; + try { + pageSql = abstractSqlProcessor.getSqlServerPageSql(sql, miniDaoPage); + } catch (Exception e) { + e.printStackTrace(); + } + return pageSql; } + } diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/OrderByParser.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/OrderByParser.java deleted file mode 100644 index 22d23f7..0000000 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/OrderByParser.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.jeecgframework.minidao.pagehelper.parser; - -import net.sf.jsqlparser.parser.CCJSqlParserUtil; -import net.sf.jsqlparser.statement.Statement; -import net.sf.jsqlparser.statement.select.*; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jeecgframework.minidao.pagehelper.PageException; - -import java.util.List; - -/** - * 处理 Order by - */ -public class OrderByParser { - private static final Log log = LogFactory.getLog(OrderByParser.class); - - /** - * convert to order by sql - * - * @param sql - * @param orderBy - * @return - */ - public static String converToOrderBySql(String sql, String orderBy) { - //解析SQL - Statement stmt = null; - try { - stmt = CCJSqlParserUtil.parse(sql); - Select select = (Select) stmt; - SelectBody selectBody = select.getSelectBody(); - //处理body-去最外层order by - List orderByElements = extraOrderBy(selectBody); - String defaultOrderBy = PlainSelect.orderByToString(orderByElements); - if (defaultOrderBy.indexOf('?') != -1) { - throw new PageException("原SQL[" + sql + "]中的order by包含参数,因此不能使用OrderBy插件进行修改!"); - } - //新的sql - sql = select.toString(); - } catch (Throwable e) { - log.warn("处理排序失败: " + e + ",降级为直接拼接 order by 参数"); - } - return sql + " order by " + orderBy; - } - - /** - * extra order by and set default orderby to null - * - * @param selectBody - */ - public static List extraOrderBy(SelectBody selectBody) { - if (selectBody instanceof PlainSelect) { - List orderByElements = ((PlainSelect) selectBody).getOrderByElements(); - ((PlainSelect) selectBody).setOrderByElements(null); - return orderByElements; - } else if (selectBody instanceof WithItem) { - WithItem withItem = (WithItem) selectBody; - if (withItem.getSubSelect().getSelectBody() != null) { - return extraOrderBy(withItem.getSubSelect().getSelectBody()); - } - } else { - SetOperationList operationList = (SetOperationList) selectBody; - if (operationList.getSelects() != null && operationList.getSelects().size() > 0) { - List plainSelects = operationList.getSelects(); - return extraOrderBy(plainSelects.get(plainSelects.size() - 1)); - } - } - return null; - } -} diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/AbstractSqlProcessor.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/AbstractSqlProcessor.java new file mode 100644 index 0000000..6b21237 --- /dev/null +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/AbstractSqlProcessor.java @@ -0,0 +1,47 @@ +package org.jeecgframework.minidao.sqlparser; + +import org.jeecgframework.minidao.pojo.MiniDaoPage; + +import java.util.List; +import java.util.Map; + +/** + * SQL解析处理器(普通正则引擎 和 JSqlParser解析引擎) + * + * @author zhang + */ +public interface AbstractSqlProcessor { + + /** + * 获取SqlServer分页SQL + * + * @param sql + * @return + */ + String getSqlServerPageSql(String sql, MiniDaoPage miniDaoPage); + + /** + * 获取SQL查询记录数SQL + * + * @param sql + * @return + */ + String getCountSql(String sql); + + /** + * 去除排序SQL片段 + * + * @param sql + * @return + */ + String removeOrderBy(String sql); + + + /** + * 解析SQL查询字段 + * + * @param parsedSql + * @return + */ + List> parseSqlFields(String parsedSql); +} diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/JsqlparserSqlProcessor.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/JsqlparserSqlProcessor.java new file mode 100644 index 0000000..a29be9b --- /dev/null +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/JsqlparserSqlProcessor.java @@ -0,0 +1,170 @@ +package org.jeecgframework.minidao.sqlparser.impl; + +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.*; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.parser.SimpleNode; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.statement.select.*; +import org.jeecgframework.minidao.pojo.MiniDaoPage; +import org.jeecgframework.minidao.sqlparser.AbstractSqlProcessor; +import org.jeecgframework.minidao.sqlparser.impl.util.JSqlCountSqlParser; +import org.jeecgframework.minidao.sqlparser.impl.util.JSqlRemoveSqlOrderBy; +import org.jeecgframework.minidao.sqlparser.impl.util.JSqlServerPagesHelper; +import java.util.*; + +/** + * jsqlparser解析SQL + * + * @author zhang + */ +public class JsqlparserSqlProcessor implements AbstractSqlProcessor { + protected static JSqlCountSqlParser jsqlCountSqlParser = new JSqlCountSqlParser(); + protected static JSqlServerPagesHelper jsqlServerPagesHelper = new JSqlServerPagesHelper(); + protected static JSqlRemoveSqlOrderBy jsqlRemoveSqlOrderBy = new JSqlRemoveSqlOrderBy(); + + @Override + public String getSqlServerPageSql(String sql, MiniDaoPage miniDaoPage) { + int page = miniDaoPage.getPage(); + int rows = miniDaoPage.getRows(); + int beginNum = (page - 1) * rows; + String pageSql = jsqlServerPagesHelper.convertToPageSql(sql); + pageSql = pageSql.replace(String.valueOf(Long.MIN_VALUE), String.valueOf(beginNum)); + pageSql = pageSql.replace(String.valueOf(Long.MAX_VALUE), String.valueOf(rows)); + return pageSql; + } + + @Override + public String getCountSql(String sql) { + return jsqlCountSqlParser.getSmartCountSql(sql); + } + + /** + * 去除排序SQL片段 + * + * @param sql + * @return + */ + @Override + public String removeOrderBy(String sql) { + if (sql == null) { + return null; + } + try { + sql = jsqlRemoveSqlOrderBy.removeOrderBy(sql); + } catch (JSQLParserException e) { + throw new RuntimeException(e); + } + return sql; + } + + + /** + * 解析SQL查询字段 + * + * @param parsedSql + * @return + */ + @Override + public List> parseSqlFields(String parsedSql) { + List> list = new ArrayList<>(); + Select select = null; + try { + //update-begin---author:wangshuai ---date:20220215 for:[issues/I4STNJ]SQL Server表名关键字查询失败 + select = (Select) CCJSqlParserUtil.parse(parsedSql, parser -> parser.withSquareBracketQuotation(true)); + //update-end---author:wangshuai ---date:20220215 for:[issues/I4STNJ]SQL Server表名关键字查询失败 + } catch (JSQLParserException jsqlParserException) { + jsqlParserException.printStackTrace(); + } + PlainSelect plain; + // 处理union的情况 + SelectBody selectBody = select.getSelectBody(); + if (selectBody instanceof SetOperationList) { + SetOperationList selectBodyList = (SetOperationList) selectBody; + List selects = selectBodyList.getSelects(); + for (int i = 0; i < selects.size(); i++) { + plain = (PlainSelect) selects.get(i); + // 获取字段名的集合 + List tableAndColumns = getTableAndColumns(plain); + // 将list循环放到map中(key和value均是字段名) + getMapFiled(list, tableAndColumns); + } + } + if (selectBody instanceof PlainSelect) { + plain = (PlainSelect) selectBody; + List tableAndColumns = getTableAndColumns(plain); + getMapFiled(list, tableAndColumns); + } + return list; + } + + + private static void getMapFiled(List> list, List tableAndColumns) { + Map map = new HashMap(5); + for (String str : tableAndColumns) { + //排除*不展示 + if (!"*".equals(str)) { + map.put(str, str); + } + } + list.add(map); + } + + private static List getTableAndColumns(PlainSelect plain) { + // 获取select后面的语句 + List selectItems = plain.getSelectItems(); + List items = new ArrayList<>(); + if (selectItems != null) { + for (SelectItem selectItem : selectItems) { + if (selectItem instanceof SelectExpressionItem) { + SelectExpressionItem selectExpressionItem = (SelectExpressionItem) selectItem; + String columnName = ""; + Alias alias = selectExpressionItem.getAlias(); + Expression expression = selectExpressionItem.getExpression(); + if (expression instanceof CaseExpression) { + // case表达式 + columnName = alias.getName(); + } else if (expression instanceof LongValue || expression instanceof StringValue + || expression instanceof DateValue || expression instanceof DoubleValue) { + // 值表达式 + columnName = Objects.nonNull(alias.getName()) ? alias.getName() + : expression.getASTNode().jjtGetValue().toString(); + } else if (expression instanceof TimeKeyExpression) { + // 日期 + columnName = alias.getName(); + } else { + if (alias != null) { + columnName = alias.getName(); + } else { + SimpleNode node = expression.getASTNode(); + Object value = node.jjtGetValue(); + if (value instanceof Column) { + columnName = ((Column) value).getColumnName(); + } else if (value instanceof Function) { + columnName = value.toString(); + } else { + // 增加对select 'aaa' from table; 的支持 + columnName = String.valueOf(value); + columnName = columnName.replace("'", ""); + columnName = columnName.replace("\"", ""); + columnName = columnName.replace("`", ""); + } + } + } + + columnName = columnName.replace("'", ""); + columnName = columnName.replace("\"", ""); + columnName = columnName.replace("`", ""); + + items.add(columnName); + } else if (selectItem instanceof AllTableColumns) { + AllTableColumns allTableColumns = (AllTableColumns) selectItem; + items.add(allTableColumns.toString()); + } else { + items.add(selectItem.toString()); + } + } + } + return items; + } +} diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/SimpleSqlProcessor.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/SimpleSqlProcessor.java new file mode 100644 index 0000000..5337bb9 --- /dev/null +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/SimpleSqlProcessor.java @@ -0,0 +1,99 @@ +package org.jeecgframework.minidao.sqlparser.impl; + +import org.jeecgframework.minidao.pojo.MiniDaoPage; +import org.jeecgframework.minidao.sqlparser.AbstractSqlProcessor; +import org.jeecgframework.minidao.util.MiniDaoUtil; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 简单SQL解析器(采用正则) + * + * @author zhang + */ +public class SimpleSqlProcessor implements AbstractSqlProcessor { + private static final String SQLSERVER_SQL = "select * from ( select row_number() over(order by tempColumn) tempRowNumber, * from (select top {1} tempColumn = 0, {0}) t ) tt where tempRowNumber > {2}"; // sqlserver + + @Override + public String getSqlServerPageSql(String sql, MiniDaoPage miniDaoPage) { + int page = miniDaoPage.getPage(); + int rows = miniDaoPage.getRows(); + String[] sqlParam = new String[3]; + // 去掉排序,兼容SqlServer + sql = MiniDaoUtil.removeOrderBy(sql); + + int beginIndex = (page - 1) * rows; + int endIndex = beginIndex + rows; + sqlParam[2] = Integer.toString(beginIndex); + sqlParam[1] = Integer.toString(endIndex); + sqlParam[0] = sql.substring(getAfterSelectInsertPoint(sql)); + sql = MessageFormat.format(SQLSERVER_SQL, sqlParam); + return sql; + } + + @Override + public String getCountSql(String sql) { + // 去掉排序,兼容SqlServer + sql = MiniDaoUtil.removeOrderBy(sql); + return "select count(0) from (" + sql + ") tmp_count"; + } + + /** + * 去除排序SQL片段 + * + * @param sql + * @return + */ + @Override + public String removeOrderBy(String sql) { + if (sql == null) { + return null; + } + sql = sql.replaceAll("(?i)\\s+ORDER\\s+BY\\s+[\\w\\s,.]+", ""); + return sql; + } + + + /** + * 解析SQL查询字段 + * + * @param parsedSql + * @return + */ + @Override + public List> parseSqlFields(String parsedSql) { + List> list = new ArrayList<>(); + List fields = new ArrayList<>(); + + // 匹配SELECT关键字后的第一个左括号到第一个FROM关键字之间的内容 + Pattern pattern = Pattern.compile("SELECT\\s+(.*?)\\s+FROM", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(parsedSql); + + if (matcher.find()) { + String selectFields = matcher.group(1); + String[] fieldArray = selectFields.split(","); + + for (String field : fieldArray) { + fields.add(field.trim()); + } + } + + return list; + } + + + /** + * @param sql + * @return + */ + private static int getAfterSelectInsertPoint(String sql) { + int selectIndex = sql.toLowerCase().indexOf("select"); + int selectDistinctIndex = sql.toLowerCase().indexOf("select distinct"); + return selectIndex + (selectDistinctIndex == selectIndex ? 15 : 6); + } + +} diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/CountSqlParser.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlCountSqlParser.java similarity index 97% rename from minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/CountSqlParser.java rename to minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlCountSqlParser.java index 822b673..e457b48 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/CountSqlParser.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlCountSqlParser.java @@ -1,4 +1,4 @@ -package org.jeecgframework.minidao.pagehelper.parser; +package org.jeecgframework.minidao.sqlparser.impl.util; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Alias; @@ -21,8 +21,8 @@ * * @author jeecg */ -public class CountSqlParser { - private static final Log logger = LogFactory.getLog(CountSqlParser.class); +public class JSqlCountSqlParser { + private static final Log logger = LogFactory.getLog(JSqlCountSqlParser.class); public static final String KEEP_ORDERBY = "/*keep orderby*/"; private static final Alias TABLE_ALIAS; /** @@ -153,6 +153,8 @@ public String getSmartCountSql(String sql) { /** * 获取智能的countSql * + * 处理body-去order by + * * @param sql * @param countColumn 列名,默认 0 * @return @@ -341,8 +343,8 @@ public void processSelectBody(SelectBody selectBody) { processPlainSelect((PlainSelect) selectBody); } else if (selectBody instanceof WithItem) { WithItem withItem = (WithItem) selectBody; - if (withItem.getSubSelect().getSelectBody() != null) { - processSelectBody(withItem.getSubSelect().getSelectBody()); + if (JSqlSubSelectBody.getItemSelectBody(withItem)!=null) { + processSelectBody(JSqlSubSelectBody.getItemSelectBody(withItem)); } } else { SetOperationList operationList = (SetOperationList) selectBody; @@ -388,7 +390,7 @@ public void processPlainSelect(PlainSelect plainSelect) { public void processWithItemsList(List withItemsList) { if (withItemsList != null && withItemsList.size() > 0) { for (WithItem item : withItemsList) { - processSelectBody(item.getSubSelect().getSelectBody()); + processSelectBody(JSqlSubSelectBody.getItemSelectBody(item)); } } } diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/util/SqlServerParse.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlRemoveSqlOrderBy.java similarity index 65% rename from minidao-pe/src/main/java/org/jeecgframework/minidao/util/SqlServerParse.java rename to minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlRemoveSqlOrderBy.java index b6741d0..3f119f5 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/util/SqlServerParse.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlRemoveSqlOrderBy.java @@ -1,4 +1,4 @@ -package org.jeecgframework.minidao.util; +package org.jeecgframework.minidao.sqlparser.impl.util; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.parser.CCJSqlParserUtil; @@ -15,10 +15,10 @@ import java.util.regex.Pattern; /** - * SQL解析工具 + * sqlserver工具类,去掉order by */ -public class SqlServerParse { - private static final Log logger = LogFactory.getLog(SqlServerParse.class); +public class JSqlRemoveSqlOrderBy { + private static final Log logger = LogFactory.getLog(JSqlRemoveSqlOrderBy.class); /** * 匹配:user.name这样的参数表达式 */ @@ -94,8 +94,8 @@ public void processSelectBody(SelectBody selectBody) { processPlainSelect((PlainSelect) selectBody); } else if (selectBody instanceof WithItem) { WithItem withItem = (WithItem) selectBody; - if (withItem.getSubSelect().getSelectBody() != null) { - processSelectBody(withItem.getSubSelect().getSelectBody()); + if (JSqlSubSelectBody.getItemSelectBody(withItem)!=null) { + processSelectBody(JSqlSubSelectBody.getItemSelectBody(withItem)); } } else { SetOperationList operationList = (SetOperationList) selectBody; @@ -106,9 +106,7 @@ public void processSelectBody(SelectBody selectBody) { processPlainSelect((PlainSelect) optSelect); } else if (optSelect instanceof WithItem) { WithItem withItem = (WithItem) optSelect; - if (withItem.getSubSelect().getSelectBody() != null) { - processSelectBody(withItem.getSubSelect().getSelectBody()); - } + processSelectBody(withItem.getSubSelect().getSelectBody()); } } } @@ -178,32 +176,38 @@ public boolean orderByHashParameters(List orderByElements) { return false; } - public static void main(String[] args) { - String sql1 = "select * from (select s.username,s.create_time,s.realname,jr.create_by,jr.`name` from sys_user s INNER JOIN jimu_report jr on s.username = jr.create_by where jr.type='chartinfo' ORDER BY jr.create_time)a"; - String sql2 = "select * from sys_user ORDER BY create_time,a,c desc"; - String sql3 = "SELECT cf.DB_FIELD_NAME,cf.DB_FIELD_TXT FROM ONL_CGFORM_FIELD cf INNER JOIN ONL_CGFORM_HEAD ch ON cf.CGFORM_HEAD_ID = ch.ID WHERE ch.TABLE_NAME = :tableName ORDER BY cf.ORDER_NUM "; - String sql4 = " select count(*) as visit\n" + - " \t ,count(distinct(ip)) as ip\n" + - " ,CONVERT(varchar(100), create_time, 23) as tian\n" + - " \t ,RIGHT(CONVERT(varchar(100), create_time, 23),5) as type\n" + - " from sys_log \n" + - " where log_type = 1 and create_time >= :dayStart and create_time < :dayEnd \n" + - " group by CONVERT(varchar(100), create_time, 23),RIGHT(CONVERT(varchar(100), create_time, 23),5) \n" + - " order by CONVERT(varchar(100), create_time, 23) \n" + - " asc\t "; - String sql5 = "SELECT * FROM jimu_report jr WHERE 1=1 and jr.CREATE_BY = :jimuReport.createBy and jr.TYPE = :jimuReport.type and jr.DEL_FLAG = :jimuReport.delFlag and jr.TEMPLATE = :jimuReport.template ORDER BY jr.create_time DESC"; - String sql6 = "SELECT count(*) FROM (SELECT * FROM sys_user order by id OFFSET 1 ROWS FETCH NEXT 3 ROWS ONLY) AS a"; - String sql7 = "SELECT * FROM jimu_report as jr WHERE jr.create_by in (SELECT top 100 username FROM sys_user ORDER BY create_time) ORDER BY create_time desc"; - String sql8 = "select a.* from (SELECT top 100 jr.create_time,jr.name,jr.code from jimu_report jr LEFT JOIN sys_user s on jr.create_by = s.username ORDER BY s.create_time) a ORDER BY a.create_time ASC"; - String sql9 = "select * from sys_user order by CASE WHEN sex='1' THEN create_time else update_time END"; - try { - //System.out.println(getKeyListByContent(sql6)); - System.out.println(sql9); - System.out.println(SqlServerParse.class.newInstance().removeOrderBy(sql9)); - - } catch (Exception e) { - e.printStackTrace(); - } - } +// public static void main(String[] args) { +// String sql1 = "select * from (select s.username,s.create_time,s.realname,jr.create_by,jr.`name` from sys_user s INNER JOIN jimu_report jr on s.username = jr.create_by where jr.type='chartinfo' ORDER BY jr.create_time)a"; +// String sql2 = "select * from sys_user ORDER BY create_time,a,c desc"; +// String sql3 = "SELECT cf.DB_FIELD_NAME,cf.DB_FIELD_TXT FROM ONL_CGFORM_FIELD cf INNER JOIN ONL_CGFORM_HEAD ch ON cf.CGFORM_HEAD_ID = ch.ID WHERE ch.TABLE_NAME = :tableName ORDER BY cf.ORDER_NUM "; +// String sql4 = " select count(*) as visit\n" + +// " \t ,count(distinct(ip)) as ip\n" + +// " ,CONVERT(varchar(100), create_time, 23) as tian\n" + +// " \t ,RIGHT(CONVERT(varchar(100), create_time, 23),5) as type\n" + +// " from sys_log \n" + +// " where log_type = 1 and create_time >= :dayStart and create_time < :dayEnd \n" + +// " group by CONVERT(varchar(100), create_time, 23),RIGHT(CONVERT(varchar(100), create_time, 23),5) \n" + +// " order by CONVERT(varchar(100), create_time, 23) \n" + +// " asc\t "; +// String sql5 = "SELECT * FROM jimu_report jr WHERE 1=1 and jr.CREATE_BY = :jimuReport.createBy and jr.TYPE = :jimuReport.type and jr.DEL_FLAG = :jimuReport.delFlag and jr.TEMPLATE = :jimuReport.template ORDER BY jr.create_time DESC"; +// String sql6 = "SELECT count(*) FROM (SELECT * FROM sys_user order by id OFFSET 1 ROWS FETCH NEXT 3 ROWS ONLY) AS a"; +// String sql7 = "SELECT * FROM jimu_report as jr WHERE jr.create_by in (SELECT top 100 username FROM sys_user ORDER BY create_time) ORDER BY create_time desc"; +// String sql8 = "select a.* from (SELECT top 100 jr.create_time,jr.name,jr.code from jimu_report jr LEFT JOIN sys_user s on jr.create_by = s.username ORDER BY s.create_time) a ORDER BY a.create_time ASC"; +// String sql9 = "select * from sys_user order by CASE WHEN sex='1' THEN create_time else update_time END"; +// try { +// System.out.println("1= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql1)); +// System.out.println("2= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql2)); +// System.out.println("3= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql3)); +// System.out.println("4= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql4)); +// System.out.println("5= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql5)); +// System.out.println("6= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql6)); +// System.out.println("7= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql7)); +// System.out.println("8= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql8)); +// System.out.println("9= "+ RemoveSqlOrderByUtil.class.newInstance().removeOrderBy(sql9)); +// +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } } \ No newline at end of file diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/SqlServerParser.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlServerPagesHelper.java similarity index 98% rename from minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/SqlServerParser.java rename to minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlServerPagesHelper.java index 5116781..b8ba2d2 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/pagehelper/parser/SqlServerParser.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlServerPagesHelper.java @@ -1,4 +1,4 @@ -package org.jeecgframework.minidao.pagehelper.parser; +package org.jeecgframework.minidao.sqlparser.impl.util; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Alias; @@ -31,8 +31,8 @@ * * 该类设计为一个独立的工具类,依赖jsqlparser,可以独立使用 */ -public class SqlServerParser { - private static final Log logger = LogFactory.getLog(SqlServerParser.class); +public class JSqlServerPagesHelper { + private static final Log logger = LogFactory.getLog(JSqlServerPagesHelper.class); //开始行号 public static final String START_ROW = String.valueOf(Long.MIN_VALUE); //结束行号 @@ -341,8 +341,8 @@ protected void processSelectBody(SelectBody selectBody, int level) { processPlainSelect((PlainSelect) selectBody, level + 1); } else if (selectBody instanceof WithItem) { WithItem withItem = (WithItem) selectBody; - if (withItem.getSubSelect().getSelectBody() != null) { - processSelectBody(withItem.getSubSelect().getSelectBody(), level + 1); + if (JSqlSubSelectBody.getItemSelectBody(withItem) != null) { + processSelectBody(JSqlSubSelectBody.getItemSelectBody(withItem), level + 1); } } else { SetOperationList operationList = (SetOperationList) selectBody; diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlSubSelectBody.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlSubSelectBody.java new file mode 100644 index 0000000..46ec155 --- /dev/null +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/sqlparser/impl/util/JSqlSubSelectBody.java @@ -0,0 +1,49 @@ +package org.jeecgframework.minidao.sqlparser.impl.util; + +import net.sf.jsqlparser.statement.select.WithItem; +import net.sf.jsqlparser.statement.select.SelectBody; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.lang.reflect.Method; + +/** + * @author: scott + * @date: 2024年07月03日 下午3:14 + */ +public class JSqlSubSelectBody { + private static final Log logger = LogFactory.getLog(JSqlSubSelectBody.class); + + + /** + * 获取子的SelectBody + * + * @param withItem + * @return + */ + public static SelectBody getItemSelectBody(WithItem withItem) { + long startTime = System.nanoTime(); + Class clazz = withItem.getClass(); + try { + Method method = clazz.getMethod("getSelectBody"); + SelectBody result = (SelectBody) method.invoke(withItem); + logger.debug("jsqlparser 4.0 写法: " + method); + return result; + } catch (Exception e) { + } + + try { + Method method = clazz.getMethod("getSubSelect"); + Object subresult = method.invoke(withItem); + Method submethod = subresult.getClass().getMethod("getSelectBody"); + SelectBody result = (SelectBody) submethod.invoke(subresult); + logger.debug("jsqlparser 4.4 写法: " + method + "." + submethod); + return result; + } catch (Exception e) { + } + + logger.debug("Method execution time: " + (System.nanoTime() - startTime)); + return null; + } + +} diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/util/MiniDaoUtil.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/util/MiniDaoUtil.java index 7e74de9..d2239d7 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/util/MiniDaoUtil.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/util/MiniDaoUtil.java @@ -6,6 +6,9 @@ import org.jeecgframework.minidao.pagehelper.dialect.AbstractHelperDialect; import org.jeecgframework.minidao.pagehelper.dialect.PageAutoDialect; import org.jeecgframework.minidao.pojo.MiniDaoPage; +import org.jeecgframework.minidao.sqlparser.AbstractSqlProcessor; +import org.jeecgframework.minidao.sqlparser.impl.JsqlparserSqlProcessor; +import org.jeecgframework.minidao.sqlparser.impl.SimpleSqlProcessor; import javax.sql.DataSource; import java.io.BufferedReader; @@ -17,6 +20,9 @@ import java.sql.Connection; import java.sql.SQLException; import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * @@ -64,9 +70,21 @@ public class MiniDaoUtil { public static final String DATABSE_TYPE_HIGHGO = "highgo";//瀚高数据库 public static final String DATABSE_TYPE_XUGU = "xugu";//瀚高数据库 public static final String DATABSE_TYPE_ZENITH = "zenith"; //华为高斯 GaussDB - public static final String DATABSE_TYPE_POLARDB = "polardb"; //PolarDB + + //update-begin---author:scott ---date:2024-07-04 for:SQL解析引擎改造支持普通和jsqlparser切换---- + private static final boolean JSQLPARSER_AVAILABLE = checkJSqlParserAvailability(); + protected static AbstractSqlProcessor abstractSqlProcessor; + static { + if (MiniDaoUtil.isJSqlParserAvailable()) { + abstractSqlProcessor = new JsqlparserSqlProcessor(); + } else { + abstractSqlProcessor = new SimpleSqlProcessor(); + } + } + //update-end---author:scott ---date::2024-07-04 for:SQL解析引擎改造支持普通和jsqlparser切换---- + // /** // * 分页SQL // */ @@ -189,6 +207,78 @@ public static String createPageSql(String dbUrl, String sql, int page,int rows) return executePageSql; } + /** + * 获取SQL查询记录数SQL + * + * @param sql + * @return + */ + public static String getCountSql(String sql) { + try { + sql = abstractSqlProcessor.getCountSql(sql); + } catch (Exception e) { + logger.warn("getCountSql error:" + e.getMessage()); + } + return sql; + } + + /** + * 去除SQL中的order by (为了兼容SQLServer) + * + * @param sql + * @return + */ + public static String removeOrderBy(String sql) { + try { + sql = abstractSqlProcessor.removeOrderBy(sql); + } catch (Exception e) { + logger.warn("removeOrderBy error:" + e.getMessage()); + } + return sql; + } + + + /** + * 解析SQL查询字段 + * + * @param parsedSql + * @return + */ + public static List> parseSqlFields(String parsedSql) { + List> list = new ArrayList<>(); + try { + list = abstractSqlProcessor.parseSqlFields(parsedSql); + } catch (Exception e) { + logger.warn("parseSqlFields error:" + e.getMessage()); + } + return list; + } + + /** + * 判断当前环境是否支持jsqlparser + * + * @return + */ + public static boolean isJSqlParserAvailable() { + return JSQLPARSER_AVAILABLE; + } + + /** + * 判断当前环境是否存在jsqlparser,返回true或false + * + * @return + */ + private static boolean checkJSqlParserAvailability() { + try { + Class.forName("net.sf.jsqlparser.statement.select.SelectBody"); + logger.info("【Sql Parser】 The environment supports jsqlparser engine"); + return true; + } catch (ClassNotFoundException e) { + logger.warn("【Sql Parser】 The environment does not support jsqlparser engine"); + return false; + } + } + // /** // * 按照数据库类型,封装SQL // * diff --git a/minidao-pe/src/main/java/org/jeecgframework/minidao/util/ReflectUtil.java b/minidao-pe/src/main/java/org/jeecgframework/minidao/util/ReflectUtil.java index 92315a7..ae2c953 100644 --- a/minidao-pe/src/main/java/org/jeecgframework/minidao/util/ReflectUtil.java +++ b/minidao-pe/src/main/java/org/jeecgframework/minidao/util/ReflectUtil.java @@ -1,5 +1,8 @@ package org.jeecgframework.minidao.util; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Map; @@ -10,7 +13,8 @@ * @date: 2021年07月26日 19:49 */ public class ReflectUtil { - + private static final Log logger = LogFactory.getLog(ReflectUtil.class); + /** * 设置bean 属性值 * @@ -131,4 +135,5 @@ public static boolean checkMethod(Method methods[], String met) { } return false; } + } diff --git a/minidao-spring-boot-starter/pom.xml b/minidao-spring-boot-starter/pom.xml index c2861c3..2e28d62 100644 --- a/minidao-spring-boot-starter/pom.xml +++ b/minidao-spring-boot-starter/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.jeecgframework.boot3 minidao-spring-boot-starter - 1.9.6 + 1.10.1 jar @@ -33,8 +33,8 @@ - 1.9.6 - 1.2.20 + 1.10.1 + 1.2.22 @@ -67,12 +67,12 @@ - - com.mysql - mysql-connector-j - true + + com.mysql + mysql-connector-j + true runtime - + com.alibaba druid diff --git a/pom.xml b/pom.xml index 5448d6e..9ad00b9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.jeecgframework.boot3 minidao-parent - 1.9.6 + 1.10.1 pom