diff --git a/pom.xml b/pom.xml
index ae45c7a7..cd802abe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,21 +46,6 @@
commons-beanutils
1.9.2
-
- mysql
- mysql-connector-java
- 5.1.38
-
-
- com.oracle
- ojdbc14
- 10.2.0.5
-
-
- org.postgresql
- postgresql
- 9.4.1209
-
com.alibaba
fastjson
diff --git a/src/main/java/com/zzg/mybatis/generator/MainUI.java b/src/main/java/com/zzg/mybatis/generator/MainUI.java
index 34757c26..399e7e0e 100644
--- a/src/main/java/com/zzg/mybatis/generator/MainUI.java
+++ b/src/main/java/com/zzg/mybatis/generator/MainUI.java
@@ -1,32 +1,17 @@
package com.zzg.mybatis.generator;
-import java.awt.*;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.net.URL;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import com.zzg.mybatis.generator.controller.MainUIController;
-
-import com.zzg.mybatis.generator.model.GeneratorConfig;
import com.zzg.mybatis.generator.util.ConfigHelper;
-import com.zzg.mybatis.generator.view.AlertUtil;
import javafx.application.Application;
-import javafx.application.Platform;
-import javafx.embed.swing.JFXPanel;
import javafx.fxml.FXMLLoader;
-import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
-import javafx.scene.paint.Color;
-import javafx.scene.text.Font;
-import javafx.scene.text.Text;
import javafx.stage.Stage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.*;
+import java.net.URL;
/**
* 这是本软件的主入口,要运行本软件请直接运行本类就可以了,不用传入任何参数
diff --git a/src/main/java/com/zzg/mybatis/generator/bridge/MybatisGeneratorBridge.java b/src/main/java/com/zzg/mybatis/generator/bridge/MybatisGeneratorBridge.java
index a41299a0..dcd39ef3 100644
--- a/src/main/java/com/zzg/mybatis/generator/bridge/MybatisGeneratorBridge.java
+++ b/src/main/java/com/zzg/mybatis/generator/bridge/MybatisGeneratorBridge.java
@@ -12,6 +12,7 @@
import org.mybatis.generator.api.ShellCallback;
import org.mybatis.generator.config.*;
import org.mybatis.generator.internal.DefaultShellCallback;
+import org.mybatis.generator.internal.ObjectFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -20,6 +21,8 @@
import java.util.List;
import java.util.Set;
+import static org.mybatis.generator.internal.util.ClassloaderUtility.getCustomClassloader;
+
/**
* The bridge between GUI and the mybatis generator. All the operation to mybatis generator should proceed through this
* class
@@ -39,16 +42,18 @@ public class MybatisGeneratorBridge {
private List ignoredColumns;
private List columnOverrides;
+ /**
+ * The Context will share between all controller to be a the mybatis generator configuration collector
+ */
+ private static Configuration configuration = new Configuration();
+ private static Context context = new Context(ModelType.CONDITIONAL);
- public MybatisGeneratorBridge() {
- init();
- }
+ static {
+ configuration.addContext(context);
+ context.addProperty("javaFileEncoding", "UTF-8");
+ }
- private void init() {
- Configuration config = new Configuration();
- Context context = new Context(ModelType.CONDITIONAL);
- context.addProperty("javaFileEncoding", "UTF-8");
- config.addContext(context);
+ public MybatisGeneratorBridge() {
}
public void setGeneratorConfig(GeneratorConfig generatorConfig) {
@@ -60,13 +65,7 @@ public void setDatabaseConfig(DatabaseConfig databaseConfig) {
}
public void generate() throws Exception {
- Configuration config = new Configuration();
- String connectorLibPath = ConfigHelper.findConnectorLibPath(selectedDatabaseConfig.getDbType());
- _LOG.info("connectorLibPath: {}", connectorLibPath);
- config.addClasspathEntry(connectorLibPath);
- Context context = new Context(ModelType.CONDITIONAL);
- config.addContext(context);
- // Table config
+ // Table configuration
TableConfiguration tableConfig = new TableConfiguration(context);
tableConfig.setTableName(generatorConfig.getTableName());
tableConfig.setDomainObjectName(generatorConfig.getDomainObjectName());
@@ -101,7 +100,7 @@ public void generate() throws Exception {
JavaModelGeneratorConfiguration modelConfig = new JavaModelGeneratorConfiguration();
modelConfig.setTargetPackage(generatorConfig.getModelPackage());
modelConfig.setTargetProject(generatorConfig.getProjectFolder() + "/" + generatorConfig.getModelPackageTargetFolder());
- // Mapper config
+ // Mapper configuration
SqlMapGeneratorConfiguration mapperConfig = new SqlMapGeneratorConfiguration();
mapperConfig.setTargetPackage(generatorConfig.getMappingXMLPackage());
mapperConfig.setTargetProject(generatorConfig.getProjectFolder() + "/" + generatorConfig.getMappingXMLTargetFolder());
@@ -148,12 +147,15 @@ public void generate() throws Exception {
Set fullyqualifiedTables = new HashSet<>();
Set contexts = new HashSet<>();
ShellCallback shellCallback = new DefaultShellCallback(true); // override=true
- MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, shellCallback, warnings);
+ MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration, shellCallback, warnings);
myBatisGenerator.generate(progressCallback, contexts, fullyqualifiedTables);
}
+ public static Context getContext() {
+ return context;
+ }
- public void setProgressCallback(ProgressCallback progressCallback) {
+ public void setProgressCallback(ProgressCallback progressCallback) {
this.progressCallback = progressCallback;
}
diff --git a/src/main/java/com/zzg/mybatis/generator/controller/MainUIController.java b/src/main/java/com/zzg/mybatis/generator/controller/MainUIController.java
index 09ba2e21..5a9b1b06 100644
--- a/src/main/java/com/zzg/mybatis/generator/controller/MainUIController.java
+++ b/src/main/java/com/zzg/mybatis/generator/controller/MainUIController.java
@@ -1,6 +1,5 @@
package com.zzg.mybatis.generator.controller;
-import com.mysql.jdbc.exceptions.jdbc4.CommunicationsException;
import com.zzg.mybatis.generator.bridge.MybatisGeneratorBridge;
import com.zzg.mybatis.generator.model.DatabaseConfig;
import com.zzg.mybatis.generator.model.GeneratorConfig;
@@ -30,6 +29,7 @@
import java.io.File;
import java.net.URL;
+import java.sql.SQLRecoverableException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -158,7 +158,7 @@ public void initialize(URL location, ResourceBundle resources) {
children.add(newTreeItem);
}
}
- } catch (CommunicationsException e) {
+ } catch (SQLRecoverableException e) {
_LOG.error(e.getMessage(), e);
AlertUtil.showErrorAlert("连接超时");
} catch (Exception e) {
diff --git a/src/main/java/com/zzg/mybatis/generator/controller/NewConnectionController.java b/src/main/java/com/zzg/mybatis/generator/controller/NewConnectionController.java
index de5e1e2f..de587677 100644
--- a/src/main/java/com/zzg/mybatis/generator/controller/NewConnectionController.java
+++ b/src/main/java/com/zzg/mybatis/generator/controller/NewConnectionController.java
@@ -64,8 +64,6 @@ void testConnection() {
return;
}
try {
- String url = DbUtil.getConnectionUrlWithSchema(config);
- System.out.println(url);
DbUtil.getConnection(config);
AlertUtil.showInfoAlert("连接成功");
} catch (Exception e) {
diff --git a/src/main/java/com/zzg/mybatis/generator/model/DatabaseConfig.java b/src/main/java/com/zzg/mybatis/generator/model/DatabaseConfig.java
index 628439c7..6accf1ba 100644
--- a/src/main/java/com/zzg/mybatis/generator/model/DatabaseConfig.java
+++ b/src/main/java/com/zzg/mybatis/generator/model/DatabaseConfig.java
@@ -1,95 +1,114 @@
package com.zzg.mybatis.generator.model;
+import java.util.Objects;
+
/**
* Created by Owen on 5/13/16.
*/
public class DatabaseConfig {
- private String dbType;
- /**
- * The name of the config
- */
- private String name;
+ private String dbType;
+ /**
+ * The name of the config
+ */
+ private String name;
+
+ private String host;
- private String host;
+ private String port;
- private String port;
+ private String schema;
- private String schema;
+ private String username;
- private String username;
+ private String password;
- private String password;
+ private String encoding;
- private String encoding;
+ public String getName() {
+ return name;
+ }
- public String getName() {
- return name;
- }
+ public void setName(String name) {
+ this.name = name;
+ }
- public void setName(String name) {
- this.name = name;
- }
+ public String getHost() {
+ return host;
+ }
- public String getHost() {
- return host;
- }
+ public void setHost(String host) {
+ this.host = host;
+ }
- public void setHost(String host) {
- this.host = host;
- }
+ public String getPort() {
+ return port;
+ }
- public String getPort() {
- return port;
- }
+ public void setPort(String port) {
+ this.port = port;
+ }
- public void setPort(String port) {
- this.port = port;
- }
+ public String getSchema() {
+ return schema;
+ }
- public String getSchema() {
- return schema;
- }
+ public void setSchema(String schema) {
+ this.schema = schema;
+ }
- public void setSchema(String schema) {
- this.schema = schema;
- }
+ public String getUsername() {
+ return username;
+ }
- public String getUsername() {
- return username;
- }
+ public void setUsername(String username) {
+ this.username = username;
+ }
- public void setUsername(String username) {
- this.username = username;
- }
+ public String getPassword() {
+ return password;
+ }
- public String getPassword() {
- return password;
- }
+ public void setPassword(String password) {
+ this.password = password;
+ }
- public void setPassword(String password) {
- this.password = password;
- }
+ public String getEncoding() {
+ return encoding;
+ }
- public String getEncoding() {
- return encoding;
- }
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
- public void setEncoding(String encoding) {
- this.encoding = encoding;
- }
+ public String getDbType() {
+ return dbType;
+ }
- public String getDbType() {
- return dbType;
- }
+ public void setDbType(String dbType) {
+ this.dbType = dbType;
+ }
- public void setDbType(String dbType) {
- this.dbType = dbType;
- }
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ DatabaseConfig that = (DatabaseConfig) o;
+ return Objects.equals(dbType, that.dbType) && Objects.equals(name, that.name) && Objects.equals(host, that
+ .host) && Objects.equals(port, that.port) && Objects.equals(schema, that.schema) && Objects.equals
+ (username, that.username) && Objects.equals(password, that.password) && Objects.equals(encoding, that
+ .encoding);
+ }
- @Override
- public String toString() {
- return name;
- }
+ @Override
+ public int hashCode() {
+ return Objects.hash(dbType, name, host, port, schema, username, password, encoding);
+ }
+ @Override
+ public String toString() {
+ return "DatabaseConfig{" + "dbType='" + dbType + '\'' + ", name='" + name + '\'' + ", host='" + host + '\'' +
+ ", port='" + port + '\'' + ", schema='" + schema + '\'' + ", username='" + username + '\'' + ", " +
+ "password='" + password + '\'' + ", encoding='" + encoding + '\'' + '}';
+ }
}
diff --git a/src/main/java/com/zzg/mybatis/generator/util/ConfigHelper.java b/src/main/java/com/zzg/mybatis/generator/util/ConfigHelper.java
index 7f2cc524..d5b42290 100644
--- a/src/main/java/com/zzg/mybatis/generator/util/ConfigHelper.java
+++ b/src/main/java/com/zzg/mybatis/generator/util/ConfigHelper.java
@@ -215,5 +215,25 @@ public static String findConnectorLibPath(String dbType) {
}
}
+ public static List getAllJDBCDriverJarPaths() {
+ List jarFilePathList = new ArrayList<>();
+ URL resource = Thread.currentThread().getContextClassLoader().getResource("logback.xml");
+ try {
+ String path = resource.toURI().getRawPath();
+ File file = new File(path.substring(0, path.lastIndexOf("/")) + "/lib");
+ File[] jarFiles = file.listFiles();
+ if (jarFiles != null && jarFiles.length > 0) {
+ for (File jarFile : jarFiles) {
+ if (jarFile.isFile() && jarFile.getAbsolutePath().endsWith(".jar")) {
+ jarFilePathList.add(jarFile.getAbsolutePath());
+ }
+ }
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("找不到驱动文件,请联系开发者");
+ }
+ return jarFilePathList;
+ }
+
}
diff --git a/src/main/java/com/zzg/mybatis/generator/util/DbUtil.java b/src/main/java/com/zzg/mybatis/generator/util/DbUtil.java
index 6d190a07..f7eb4e4f 100644
--- a/src/main/java/com/zzg/mybatis/generator/util/DbUtil.java
+++ b/src/main/java/com/zzg/mybatis/generator/util/DbUtil.java
@@ -3,12 +3,16 @@
import com.zzg.mybatis.generator.model.DatabaseConfig;
import com.zzg.mybatis.generator.model.DbType;
import com.zzg.mybatis.generator.model.UITableColumnVO;
+import org.apache.commons.lang3.StringUtils;
+import org.mybatis.generator.config.JDBCConnectionConfiguration;
+import org.mybatis.generator.internal.util.ClassloaderUtility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.*;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+
+import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
/**
* Created by Owen on 6/12/16.
@@ -18,44 +22,75 @@ public class DbUtil {
private static final Logger _LOG = LoggerFactory.getLogger(DbUtil.class);
private static final int DB_CONNECTION_TIMEOUTS_SECONDS = 1;
+ private static Map drivers;
+
+ static {
+ drivers = new HashMap<>();
+ List driverJars = ConfigHelper.getAllJDBCDriverJarPaths();
+ ClassLoader classloader = ClassloaderUtility.getCustomClassloader(driverJars);
+ DbType[] dbTypes = DbType.values();
+ for (DbType dbType : dbTypes) {
+ try {
+ Class clazz = Class.forName(dbType.getDriverClass(), true, classloader);
+ Driver driver = (Driver) clazz.newInstance();
+ _LOG.info("load driver class: {}", driver);
+ drivers.put(dbType, driver);
+ } catch (Exception e) {
+ _LOG.error("load driver error");
+ }
+ }
+ }
+
public static Connection getConnection(DatabaseConfig config) throws ClassNotFoundException, SQLException {
- DriverManager.setLoginTimeout(DB_CONNECTION_TIMEOUTS_SECONDS);
- DbType dbType = DbType.valueOf(config.getDbType());
- Class.forName(dbType.getDriverClass());
String url = getConnectionUrlWithSchema(config);
- _LOG.info("getConnection, connection url: {}", url);
- return DriverManager.getConnection(url, config.getUsername(), config.getPassword());
+ Properties props = new Properties();
+
+ props.setProperty("user", config.getUsername()); //$NON-NLS-1$
+ props.setProperty("password", config.getPassword()); //$NON-NLS-1$
+
+ DriverManager.setLoginTimeout(DB_CONNECTION_TIMEOUTS_SECONDS);
+ Connection connection = drivers.get(DbType.valueOf(config.getDbType())).connect(url, props);
+ _LOG.info("getConnection, connection url: {}", connection);
+ return connection;
}
public static List getTableNames(DatabaseConfig config) throws Exception {
String url = getConnectionUrlWithSchema(config);
_LOG.info("getTableNames, connection url: {}", url);
- Connection conn = DriverManager.getConnection(url, config.getUsername(), config.getPassword());
- DatabaseMetaData md = conn.getMetaData();
- ResultSet rs = md.getTables(null, config.getUsername().toUpperCase(), null, null);
- List tables = new ArrayList<>();
- while (rs.next()) {
- tables.add(rs.getString(3));
- }
- return tables;
- }
+ Connection connection = getConnection(config);
+ try {
+ DatabaseMetaData md = connection.getMetaData();
+ ResultSet rs = md.getTables(null, config.getUsername().toUpperCase(), null, null);
+ List tables = new ArrayList<>();
+ while (rs.next()) {
+ tables.add(rs.getString(3));
+ }
+ return tables;
+ } finally {
+ connection.close();
+ }
+ }
public static List getTableColumns(DatabaseConfig dbConfig, String tableName) throws Exception {
String url = getConnectionUrlWithSchema(dbConfig);
_LOG.info("getTableColumns, connection url: {}", url);
Connection conn = getConnection(dbConfig);
- DatabaseMetaData md = conn.getMetaData();
- ResultSet rs = md.getColumns(null, null, tableName, null);
- List columns = new ArrayList<>();
- while (rs.next()) {
- UITableColumnVO columnVO = new UITableColumnVO();
- String columnName = rs.getString("COLUMN_NAME");
- columnVO.setColumnName(columnName);
- columnVO.setJdbcType(rs.getString("TYPE_NAME"));
- columns.add(columnVO);
- }
- return columns;
- }
+ try {
+ DatabaseMetaData md = conn.getMetaData();
+ ResultSet rs = md.getColumns(null, null, tableName, null);
+ List columns = new ArrayList<>();
+ while (rs.next()) {
+ UITableColumnVO columnVO = new UITableColumnVO();
+ String columnName = rs.getString("COLUMN_NAME");
+ columnVO.setColumnName(columnName);
+ columnVO.setJdbcType(rs.getString("TYPE_NAME"));
+ columns.add(columnVO);
+ }
+ return columns;
+ } finally {
+ conn.close();
+ }
+ }
public static String getConnectionUrlWithSchema(DatabaseConfig dbConfig) throws ClassNotFoundException {
DbType dbType = DbType.valueOf(dbConfig.getDbType());
diff --git a/src/test/java/com/zzg/mybatis/generator/util/ConfigHelperTest.java b/src/test/java/com/zzg/mybatis/generator/util/ConfigHelperTest.java
index a1fd3db4..d6fa632b 100644
--- a/src/test/java/com/zzg/mybatis/generator/util/ConfigHelperTest.java
+++ b/src/test/java/com/zzg/mybatis/generator/util/ConfigHelperTest.java
@@ -3,6 +3,8 @@
import org.junit.Assert;
import org.junit.Test;
+import java.util.List;
+
/**
* Created by zouzhigang on 2016/9/18.
*/
@@ -25,4 +27,10 @@ public void testFindConnectorLibPath_PostgreSQL() {
String path = ConfigHelper.findConnectorLibPath("PostgreSQL");
Assert.assertTrue(path.contains("postgresql"));
}
+
+ @Test
+ public void testGetAllJDBCDriverJarPaths() {
+ List jarFilePaths = ConfigHelper.getAllJDBCDriverJarPaths();
+ Assert.assertTrue(jarFilePaths != null && jarFilePaths.size() > 0);
+ }
}