├── .gitignore ├── .settings ├── org.eclipse.core.resources.prefs └── org.eclipse.jdt.core.prefs ├── src └── pers │ ├── resource │ ├── image │ │ ├── config.png │ │ ├── table.png │ │ ├── CMEUicon.png │ │ ├── computer.png │ │ ├── database.png │ │ └── MyBatis-CMEU.ico │ ├── lib │ │ ├── mysqlJDBC.jar │ │ ├── oracleJDBC.jar │ │ ├── sqliteJDBC.jar │ │ ├── JSONUtil-1.2.7.jar │ │ ├── log4j-1.2.17.jar │ │ ├── postgresqlJDBC.jar │ │ └── sqlserverJDBC.jar │ ├── config │ │ ├── ConfigDB.db │ │ └── log4j.properties │ ├── models │ │ ├── MyBatisConfigMateri.txt │ │ ├── MyBatisUtilMateri.txt │ │ └── AssistMateri.txt │ ├── css │ │ └── style.css │ └── FXML │ │ ├── HistoryConfig.fxml │ │ ├── Connection.fxml │ │ ├── UpdateConnection.fxml │ │ ├── SetAttribute.fxml │ │ ├── AddGrandAttribute.fxml │ │ └── AddSonAttribute.fxml │ ├── cmeu │ ├── controller │ │ ├── StageManager.java │ │ ├── FXMLPage.java │ │ ├── BaseController.java │ │ ├── UpdateConnection.java │ │ ├── ConnectionController.java │ │ ├── HistoryConfigController.java │ │ └── SetAttributeController.java │ ├── common │ │ ├── ConnectionManager.java │ │ ├── TableUtil.java │ │ ├── MyBatisConfigUtil.java │ │ ├── JDBCType.java │ │ ├── StrUtil.java │ │ ├── JavaType.java │ │ ├── ClassUtil.java │ │ ├── DBUtil.java │ │ ├── ConfigUtil.java │ │ ├── ServiceUtil.java │ │ ├── DaoUtil.java │ │ └── ServiceImplUtil.java │ ├── models │ │ ├── DatabaseDTO.java │ │ ├── HistoryConfigCVF.java │ │ ├── DBType.java │ │ ├── DatabaseConfig.java │ │ ├── ClassConfig.java │ │ ├── ColumnItem.java │ │ ├── AttributeCVF.java │ │ ├── SuperAttribute.java │ │ └── HistoryConfig.java │ └── view │ │ └── AlertUtil.java │ └── Main.java ├── README.md ├── .project ├── .classpath └── .myeclipse └── profiler └── Main (3).xml /.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /build/ 3 | /config/ 4 | /logs/ 5 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /src/pers/resource/image/config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/image/config.png -------------------------------------------------------------------------------- /src/pers/resource/image/table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/image/table.png -------------------------------------------------------------------------------- /src/pers/resource/lib/mysqlJDBC.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/lib/mysqlJDBC.jar -------------------------------------------------------------------------------- /src/pers/resource/config/ConfigDB.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/config/ConfigDB.db -------------------------------------------------------------------------------- /src/pers/resource/image/CMEUicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/image/CMEUicon.png -------------------------------------------------------------------------------- /src/pers/resource/image/computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/image/computer.png -------------------------------------------------------------------------------- /src/pers/resource/image/database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/image/database.png -------------------------------------------------------------------------------- /src/pers/resource/lib/oracleJDBC.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/lib/oracleJDBC.jar -------------------------------------------------------------------------------- /src/pers/resource/lib/sqliteJDBC.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/lib/sqliteJDBC.jar -------------------------------------------------------------------------------- /src/pers/resource/image/MyBatis-CMEU.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/image/MyBatis-CMEU.ico -------------------------------------------------------------------------------- /src/pers/resource/lib/JSONUtil-1.2.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/lib/JSONUtil-1.2.7.jar -------------------------------------------------------------------------------- /src/pers/resource/lib/log4j-1.2.17.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/lib/log4j-1.2.17.jar -------------------------------------------------------------------------------- /src/pers/resource/lib/postgresqlJDBC.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/lib/postgresqlJDBC.jar -------------------------------------------------------------------------------- /src/pers/resource/lib/sqlserverJDBC.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shenzhenMirren/MyBatis-CMEU/HEAD/src/pers/resource/lib/sqlserverJDBC.jar -------------------------------------------------------------------------------- /src/pers/cmeu/controller/StageManager.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.controller; 2 | 3 | import java.util.Map; 4 | 5 | import javafx.stage.Stage; 6 | 7 | public class StageManager { 8 | public static Map STAGE=null; 9 | public static Map CONTROLLER=null; 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 软件说明:本软件已经不再维护,使用新版的Spring-generator代替它,欢迎使用新版Spring-generator 2 | 欢迎使用更强大更灵活的[Spring-generator](https://github.com/EliMirren/Spring-generator/)
3 | # MyBatis-CMEU使用文档 4 | 如果还需要使用CMEU可以查看CMEU的相关文档[Mybatis-CMEU-DOC](https://duhua.gitee.io/mybatis-cmeu-doc/)
5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/ConnectionManager.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.sql.Connection; 4 | import java.sql.DriverManager; 5 | 6 | 7 | public class ConnectionManager { 8 | 9 | private static final String DB_URL = "jdbc:sqlite:./config/sqlite3.db"; 10 | 11 | public static Connection getConnection() throws Exception { 12 | Class.forName("org.sqlite.JDBC"); 13 | Connection conn = DriverManager.getConnection(DB_URL); 14 | return conn; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/TableUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.util.List; 4 | 5 | import pers.cmeu.models.AttributeCVF; 6 | 7 | public class TableUtil { 8 | public static String getParmaryKeyType(String key, List attr) { 9 | if (attr == null) { 10 | return "Object"; 11 | } 12 | for (AttributeCVF item : attr) { 13 | if (item.getConlumn().equalsIgnoreCase(key)) { 14 | return item.getJavaTypeValue(); 15 | } 16 | } 17 | return "Object"; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | MyBatis-CMEU 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.xtext.ui.shared.xtextBuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.xtext.ui.shared.xtextNature 21 | org.eclipse.jdt.core.javanature 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/DatabaseDTO.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | public class DatabaseDTO { 4 | 5 | private String name; 6 | private int value; 7 | private String driverClass; 8 | 9 | public String getName() { 10 | return name; 11 | } 12 | 13 | public void setName(String name) { 14 | this.name = name; 15 | } 16 | 17 | public int getValue() { 18 | return value; 19 | } 20 | 21 | public void setValue(int value) { 22 | this.value = value; 23 | } 24 | 25 | public String getDriverClass() { 26 | return driverClass; 27 | } 28 | 29 | public void setDriverClass(String driverClass) { 30 | this.driverClass = driverClass; 31 | } 32 | 33 | 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/pers/resource/models/MyBatisConfigMateri.txt: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {*mapper*} 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/pers/cmeu/controller/FXMLPage.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.controller; 2 | 3 | public enum FXMLPage { 4 | CONNECTION("pers/resource/FXML/Connection.fxml"), 5 | UPDATE_CONNECTION("pers/resource/FXML/UpdateConnection.fxml"), 6 | HISTORY_CONFIG("pers/resource/FXML/HistoryConfig.fxml"), 7 | ATTRIBUTE_SET("pers/resource/FXML/AttributeSet.fxml"), 8 | SET_ATTRIBUTE("pers/resource/FXML/SetAttribute.fxml"), 9 | ADD_SON_ATTRIBUTE("pers/resource/FXML/AddSonAttribute.fxml"), 10 | ADD_GRAND_ATTRIBUTE("pers/resource/FXML/AddGrandAttribute.fxml"); 11 | 12 | private String fxml; 13 | 14 | FXMLPage(String fxml) { 15 | this.fxml = fxml; 16 | } 17 | 18 | public String getFxml() { 19 | return this.fxml; 20 | } 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/HistoryConfigCVF.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | import javafx.beans.property.SimpleStringProperty; 4 | import javafx.beans.property.StringProperty; 5 | import javafx.scene.layout.HBox; 6 | 7 | public class HistoryConfigCVF { 8 | 9 | StringProperty name; 10 | HBox hbox; 11 | 12 | public HistoryConfigCVF() { 13 | super(); 14 | } 15 | 16 | 17 | public HistoryConfigCVF(String name, HBox hbox) { 18 | super(); 19 | this.name=new SimpleStringProperty(name); 20 | this.hbox = hbox; 21 | } 22 | 23 | 24 | public HistoryConfigCVF(HBox hbox) { 25 | super(); 26 | this.hbox = hbox; 27 | } 28 | public HBox getHbox() { 29 | return hbox; 30 | } 31 | public void setHbox(HBox hbox) { 32 | this.hbox = hbox; 33 | } 34 | public String getName() { 35 | return name.get(); 36 | } 37 | public void setName(SimpleStringProperty name) { 38 | this.name = name; 39 | } 40 | 41 | 42 | 43 | 44 | } 45 | -------------------------------------------------------------------------------- /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/pers/resource/css/style.css: -------------------------------------------------------------------------------- 1 | .btn-success:hover { 2 | -fx-text-fill: #fff; 3 | -fx-background-color: #449d44; 4 | -fx-border-color: #398439; 5 | } 6 | 7 | .btn-success { 8 | -fx-text-fill: #fff; 9 | -fx-background-color: #5cb85c; 10 | -fx-border-color: #4cae4c; 11 | } 12 | .btn { 13 | -fx-border-width: 1.0px; 14 | -fx-border-color: transparent; 15 | -fx-border-radius: 4.0px; 16 | } 17 | .btn-executable { 18 | -fx-text-fill: #333; 19 | -fx-background-color: #fff; 20 | -fx-border-color: #5CB85C; 21 | } 22 | 23 | .btn-executable:hover { 24 | -fx-background-color: #F4F4F4; 25 | -fx-border-color: #5CB85C; 26 | } 27 | 28 | .btn-default { 29 | -fx-text-fill: #333; 30 | -fx-background-color: #fff; 31 | -fx-border-color: #ccc; 32 | } 33 | 34 | .btn-default:hover { 35 | -fx-background-color: #e6e6e6; 36 | -fx-border-color: #adadad; 37 | } 38 | 39 | .pane-padding{ 40 | -fx-padding: 0.0px 10.0px; 41 | } 42 | -------------------------------------------------------------------------------- /src/pers/resource/config/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger = debug,info,err 2 | 3 | log4j.appender.info = org.apache.log4j.DailyRollingFileAppender 4 | log4j.appender.info.Encoding=UTF-8 5 | log4j.appender.info.File =logs/info/info.log 6 | log4j.appender.info.DatePattern = '-'yyyy-MM-dd'.log' 7 | log4j.appender.info.Append = true 8 | log4j.appender.info.Threshold = DEBUG 9 | log4j.appender.info.layout = org.apache.log4j.PatternLayout 10 | log4j.appender.info.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} --> %m%n----------------------> at %l %n %n 11 | 12 | 13 | log4j.appender.err = org.apache.log4j.DailyRollingFileAppender 14 | log4j.appender.err.Encoding=UTF-8 15 | log4j.appender.err.File =logs/error/error.log 16 | log4j.appender.err.DatePattern = '-'yyyy-MM-dd'.log' 17 | log4j.appender.err.Append = true 18 | log4j.appender.err.Threshold = ERROR 19 | log4j.appender.err.layout = org.apache.log4j.PatternLayout 20 | log4j.appender.err.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} --> %m%n----------------------> at %l %n %n 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/DBType.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | public enum DBType { 4 | Oracle("oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@%s:%s:%s", "oracleJDBC.jar"), 5 | MySQL("com.mysql.jdbc.Driver", "jdbc:mysql://%s:%s/%s?useUnicode=true&useSSL=false&characterEncoding=%s", "mysqlJDBC.jar"), 6 | SqlServer("com.microsoft.sqlserver.jdbc.SQLServerDriver","jdbc:sqlserver://%s:%s;databaseName=%s","sqlserverJDBC.jar"), 7 | PostgreSQL("org.postgresql.Driver", "jdbc:postgresql://%s:%s/%s", "postgresqlJDBC.jar"); 8 | private final String driverClass; 9 | private final String connectionUrlPattern; 10 | private final String connectorJarFile; 11 | 12 | DBType(String driverClass, String connectionUrlPattern, String connectorJarFile) { 13 | this.driverClass = driverClass; 14 | this.connectionUrlPattern = connectionUrlPattern; 15 | this.connectorJarFile = connectorJarFile; 16 | } 17 | 18 | public String getDriverClass() { 19 | return driverClass; 20 | } 21 | 22 | public String getConnectionUrlPattern() { 23 | return connectionUrlPattern; 24 | } 25 | 26 | public String getConnectorJarFile() { 27 | return connectorJarFile; 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /.myeclipse/profiler/Main (3).xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Main (3) Launch Configuration 5 | 6 | pers.* 7 | 10 8 | 9 | 1000 10 | false 11 | pers.** 12 | 13 | false 14 | 0 15 | false 16 | 100 17 | true 18 | 19 | 1000 20 | true 21 | true 22 | false 23 | 24 | -------------------------------------------------------------------------------- /src/pers/cmeu/view/AlertUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.view; 2 | 3 | import java.util.Optional; 4 | 5 | import javafx.scene.control.Alert; 6 | import javafx.scene.control.ButtonType; 7 | 8 | public class AlertUtil { 9 | /** 10 | * 信息提示框 11 | * @param message 12 | */ 13 | public static void showInfoAlert(String message) { 14 | Alert alert = new Alert(Alert.AlertType.INFORMATION); 15 | alert.setContentText(message); 16 | alert.show(); 17 | } 18 | /** 19 | * 等待信息提示框 20 | * @param message 21 | */ 22 | public static void showAndWaitInfoAlert(String message) { 23 | Alert alert = new Alert(Alert.AlertType.INFORMATION); 24 | alert.setContentText(message); 25 | alert.showAndWait(); 26 | } 27 | 28 | /** 29 | * 注意提示框 30 | * @param message 31 | */ 32 | public static void showWarnAlert(String message) { 33 | Alert alert = new Alert(Alert.AlertType.WARNING); 34 | alert.setContentText(message); 35 | alert.show(); 36 | } 37 | 38 | /** 39 | * 异常提示框 40 | * @param message 41 | */ 42 | public static void showErrorAlert(String message) { 43 | Alert alert = new Alert(Alert.AlertType.ERROR); 44 | alert.setContentText(message); 45 | alert.show(); 46 | } 47 | 48 | /** 49 | *确定提示框 50 | * @param message 51 | */ 52 | public static boolean showConfirmAlert(String message) { 53 | Alert alert = new Alert(Alert.AlertType.CONFIRMATION); 54 | alert.setContentText(message); 55 | Optional optional = alert.showAndWait(); 56 | if (ButtonType.OK == optional.get()) { 57 | return true; 58 | }else { 59 | return false; 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/pers/Main.java: -------------------------------------------------------------------------------- 1 | package pers; 2 | 3 | import java.net.URL; 4 | 5 | import org.apache.log4j.Logger; 6 | import org.apache.log4j.PropertyConfigurator; 7 | 8 | import javafx.application.Application; 9 | import javafx.fxml.FXMLLoader; 10 | import javafx.scene.Parent; 11 | import javafx.scene.Scene; 12 | import javafx.scene.image.Image; 13 | import javafx.stage.Stage; 14 | import pers.cmeu.common.ConfigUtil; 15 | import pers.cmeu.controller.IndexController; 16 | 17 | public class Main extends Application { 18 | private static Logger log = Logger.getLogger(Main.class.getName()); 19 | 20 | @Override 21 | public void start(Stage primaryStage) throws Exception { 22 | ConfigUtil.existsConfigDB(); 23 | URL url = Thread.currentThread().getContextClassLoader().getResource("pers/resource/FXML/Index.fxml"); 24 | 25 | FXMLLoader fxmlLoader = new FXMLLoader(url); 26 | Parent root = fxmlLoader.load(); 27 | primaryStage.setResizable(true); 28 | primaryStage.setTitle("MyBatis-Config-Mapper-Entity-Util"); 29 | primaryStage.getIcons().add(new Image("pers/resource/image/CMEUicon.png")); 30 | primaryStage.setScene(new Scene(root)); 31 | primaryStage.show(); 32 | IndexController controller = fxmlLoader.getController(); 33 | controller.setPrimaryStage(primaryStage); 34 | } 35 | 36 | public static void main(String[] args) { 37 | PropertyConfigurator.configure( 38 | Thread.currentThread().getContextClassLoader().getResource("pers/resource/config/log4j.properties")); 39 | try { 40 | log.debug("运行MyBatis-CMEU..."); 41 | launch(args); 42 | log.debug("关闭MyBatis-CMEU!!!"); 43 | } catch (Exception e) { 44 | log.error(e); 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /src/pers/resource/models/MyBatisUtilMateri.txt: -------------------------------------------------------------------------------- 1 | import java.io.Reader; 2 | import org.apache.ibatis.io.Resources; 3 | import org.apache.ibatis.session.SqlSession; 4 | import org.apache.ibatis.session.SqlSessionFactory; 5 | import org.apache.ibatis.session.SqlSessionFactoryBuilder; 6 | 7 | public class MyBatisUtil { 8 | private MyBatisUtil() { 9 | } 10 | 11 | private static final String RESOURCE = "{*resource*}"; 12 | private static SqlSessionFactory sqlSessionFactory = null; 13 | private static ThreadLocal threadLocal = new ThreadLocal(); 14 | 15 | static { 16 | Reader reader = null; 17 | try { 18 | reader = Resources.getResourceAsReader(RESOURCE); 19 | SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 20 | sqlSessionFactory = builder.build(reader); 21 | } catch (Exception e1) { 22 | e1.printStackTrace(); 23 | throw new ExceptionInInitializerError("初始化MyBatis错误,请检查配置文件或数据库"); 24 | 25 | } 26 | } 27 | 28 | public static SqlSessionFactory getSqlSessionFactory() { 29 | return sqlSessionFactory; 30 | } 31 | 32 | public static SqlSession getSession() { 33 | // sessionTL的get()方法根据当前线程返回其对应的线程内部变量, 34 | // 也就是我们需要的Session,多线程情况下共享数据库链接是不安全的。 35 | // ThreadLocal保证了每个线程都有自己的Session。 36 | SqlSession session = threadLocal.get(); 37 | // 如果session为null,则打开一个新的session 38 | if (session == null) { 39 | session = (sqlSessionFactory != null) ? sqlSessionFactory.openSession() : null; 40 | threadLocal.set(session); // 5 41 | } 42 | return session; 43 | } 44 | 45 | public static void closeSession() { 46 | SqlSession session = (SqlSession) threadLocal.get(); // 2 47 | threadLocal.set(null); 48 | if (session != null) { 49 | session.close(); 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /src/pers/cmeu/common/MyBatisConfigUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.io.File; 4 | import java.io.FileInputStream; 5 | import java.util.Set; 6 | 7 | public class MyBatisConfigUtil { 8 | private MyBatisConfigUtil() { 9 | } 10 | 11 | public static MyBatisConfigUtil getInstance() { 12 | return new MyBatisConfigUtil(); 13 | } 14 | 15 | /** 16 | * 更新制定路径的配置文件 17 | * 18 | * @param configPath 19 | * @param mapperURL 20 | * @return 21 | * @throws Exception 22 | */ 23 | public String getNewConfig(String configPath, Set mapperURL) throws Exception { 24 | 25 | StringBuffer buffer = new StringBuffer(); 26 | buffer.append(getConfigFile(configPath)); 27 | // 如果存在mappers指直接在mappers里面添加,如果没有mappers,存在跟节点则创建mappers并添加,反则放回null 28 | if (buffer.indexOf("") != -1) { 29 | StringBuffer temp = new StringBuffer(); 30 | for (String map : mapperURL) { 31 | temp.append(" \r\n"); 32 | } 33 | buffer.insert(buffer.indexOf("") - 4, temp); 34 | } else if (buffer.indexOf("") != -1) { 35 | StringBuffer temp = new StringBuffer(); 36 | temp.append(" \r\n"); 37 | for (String map : mapperURL) { 38 | temp.append(" \r\n"); 39 | } 40 | temp.append(" \r\n"); 41 | buffer.insert(buffer.indexOf(""), temp); 42 | } else { 43 | return null; 44 | } 45 | return buffer.toString(); 46 | } 47 | 48 | /** 49 | * 获得配置文件文本信息 50 | * 51 | * @param configPath 52 | * @return 53 | * @throws Exception 54 | */ 55 | private String getConfigFile(String configPath) throws Exception { 56 | FileInputStream fis = new FileInputStream(new File(configPath)); 57 | int size = fis.available(); 58 | byte[] buffer = new byte[size]; 59 | fis.read(buffer); 60 | if (fis != null) { 61 | fis.close(); 62 | } 63 | return new String(buffer, "UTF-8"); 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/DatabaseConfig.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | public class DatabaseConfig { 4 | 5 | private String connName; 6 | private String connURL; 7 | private String listenPort; 8 | private String dbName; 9 | private String userName; 10 | private String userPwd; 11 | private String dbType; 12 | private String encoding; 13 | 14 | 15 | public String getConnName() { 16 | return connName; 17 | } 18 | public void setConnName(String connName) { 19 | this.connName = connName; 20 | } 21 | public String getConnURL() { 22 | return connURL; 23 | } 24 | public void setConnURL(String connURL) { 25 | this.connURL = connURL; 26 | } 27 | public String getListenPort() { 28 | return listenPort; 29 | } 30 | public void setListenPort(String listenPort) { 31 | this.listenPort = listenPort; 32 | } 33 | public String getDbName() { 34 | return dbName; 35 | } 36 | public void setDbName(String dbName) { 37 | this.dbName = dbName; 38 | } 39 | public String getUserName() { 40 | return userName; 41 | } 42 | public void setUserName(String userName) { 43 | this.userName = userName; 44 | } 45 | public String getUserPwd() { 46 | return userPwd; 47 | } 48 | public void setUserPwd(String userPwd) { 49 | this.userPwd = userPwd; 50 | } 51 | public String getDbType() { 52 | return dbType; 53 | } 54 | public void setDbType(String dbType) { 55 | this.dbType = dbType; 56 | } 57 | public String getEncoding() { 58 | return encoding; 59 | } 60 | public void setEncoding(String encoding) { 61 | this.encoding = encoding; 62 | } 63 | public DatabaseConfig() { 64 | super(); 65 | } 66 | public DatabaseConfig(String connName, String connURL, String listenPort, String dbName, String userName, 67 | String userPwd, String dbType, String encoding) { 68 | super(); 69 | this.connName = connName; 70 | this.connURL = connURL; 71 | this.listenPort = listenPort; 72 | this.dbName = dbName; 73 | this.userName = userName; 74 | this.userPwd = userPwd; 75 | this.dbType = dbType; 76 | this.encoding = encoding; 77 | } 78 | 79 | 80 | } 81 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/ClassConfig.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | /** 4 | * 实体类的配置文件 5 | * 6 | * @author Mirren 7 | * 8 | */ 9 | public class ClassConfig { 10 | private boolean getAndSet = true; 11 | private boolean construct = true; 12 | private boolean constructAll = true; 13 | private boolean unlineCamel = true; 14 | private boolean seriz = false; 15 | private boolean createJDBCType = false; 16 | 17 | public ClassConfig() { 18 | super(); 19 | } 20 | 21 | public ClassConfig(boolean getAndSet, boolean construct, boolean constructAll, boolean unlineCamel, boolean seriz, 22 | boolean createJDBCType) { 23 | super(); 24 | this.getAndSet = getAndSet; 25 | this.construct = construct; 26 | this.constructAll = constructAll; 27 | this.unlineCamel = unlineCamel; 28 | this.seriz = seriz; 29 | this.createJDBCType = createJDBCType; 30 | } 31 | 32 | public boolean isGetAndSet() { 33 | return getAndSet; 34 | } 35 | 36 | public void setGetAndSet(boolean getAndSet) { 37 | this.getAndSet = getAndSet; 38 | } 39 | 40 | public boolean isConstruct() { 41 | return construct; 42 | } 43 | 44 | public void setConstruct(boolean construct) { 45 | this.construct = construct; 46 | } 47 | 48 | public boolean isConstructAll() { 49 | return constructAll; 50 | } 51 | 52 | public void setConstructAll(boolean constructAll) { 53 | this.constructAll = constructAll; 54 | } 55 | 56 | public boolean isUnlineCamel() { 57 | return unlineCamel; 58 | } 59 | 60 | public void setUnlineCamel(boolean unlineCamel) { 61 | this.unlineCamel = unlineCamel; 62 | } 63 | 64 | public boolean isSeriz() { 65 | return seriz; 66 | } 67 | 68 | public void setSeriz(boolean seriz) { 69 | this.seriz = seriz; 70 | } 71 | 72 | public boolean isCreateJDBCType() { 73 | return createJDBCType; 74 | } 75 | 76 | public void setCreateJDBCType(boolean createJDBCType) { 77 | this.createJDBCType = createJDBCType; 78 | } 79 | 80 | @Override 81 | public String toString() { 82 | return "ClassConfig [getAndSet=" + getAndSet + ", construct=" + construct + ", constructAll=" + constructAll 83 | + ", unlineCamel=" + unlineCamel + ", seriz=" + seriz + ", createJDBCType=" + createJDBCType + "]"; 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/JDBCType.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | public class JDBCType { 4 | 5 | public static String valiJDBCType(String str) { 6 | /* 7 | * in JDBC enum type have 8 | * 9 | * ARRAY(Types.ARRAY), 10 | * 11 | * BIT(Types.BIT), TINYINT(Types.TINYINT), SMALLINT(Types.SMALLINT), 12 | * INTEGER(Types.INTEGER), 13 | * 14 | * BIGINT(Types.BIGINT), FLOAT(Types.FLOAT), REAL(Types.REAL), 15 | * DOUBLE(Types.DOUBLE), NUMERIC(Types.NUMERIC), 16 | * 17 | * DECIMAL(Types.DECIMAL), CHAR(Types.CHAR), VARCHAR(Types.VARCHAR), 18 | * LONGVARCHAR(Types.LONGVARCHAR), DATE(Types.DATE), 19 | * 20 | * TIME(Types.TIME), TIMESTAMP(Types.TIMESTAMP), BINARY(Types.BINARY), 21 | * VARBINARY(Types.VARBINARY), LONGVARBINARY(Types.LONGVARBINARY), 22 | * 23 | * NULL(Types.NULL), OTHER(Types.OTHER), BLOB(Types.BLOB), 24 | * CLOB(Types.CLOB), BOOLEAN(Types.BOOLEAN), 25 | * 26 | * CURSOR(-10), // Oracle UNDEFINED(Integer.MIN_VALUE + 1000), 27 | * NVARCHAR(Types.NVARCHAR), // JDK6 NCHAR(Types.NCHAR), // JDK6 28 | * NCLOB(Types.NCLOB), // JDK6 29 | * 30 | * STRUCT(Types.STRUCT), JAVA_OBJECT(Types.JAVA_OBJECT), 31 | * DISTINCT(Types.DISTINCT), REF(Types.REF), DATALINK(Types.DATALINK), 32 | * 33 | * ROWID(Types.ROWID), // JDK6 LONGNVARCHAR(Types.LONGNVARCHAR), // JDK6 34 | * SQLXML(Types.SQLXML), // JDK6 DATETIMEOFFSET(-155); // SQL Server 35 | * 2008 36 | * 37 | * 38 | */ 39 | String[] item = { "ARRAY", "BIT", "TINYINT", "SMALLINT", "INTEGER", "BIGINT", "FLOAT", "REAL", "DOUBLE", 40 | "NUMERIC", "DECIMAL", "CHAR", "VARCHAR", "LONGVARCHAR", "DATE", "TIME", "TIMESTAMP", "BINARY", 41 | "VARBINARY", "LONGVARBINARY", "NULL", "OTHER", "BLOB", "CLOB", "BOOLEAN", "CURSOR", "UNDEFINED", 42 | "NVARCHAR", "NCHAR", "NCLOB", "STRUCT", "JAVA_OBJECT", "DISTINCT", "REF", "DATALINK", "ROWID", 43 | "LONGNVARCHAR", "SQLXML", "DATETIMEOFFSET" }; 44 | for (String tmp : item) { 45 | if (str.equals(tmp)) { 46 | return tmp; 47 | } 48 | } 49 | if (str.contains("NUMBER")) { 50 | return "DECIMAL"; 51 | } 52 | if (str.contains("VARCHAR2")) { 53 | return "VARCHAR"; 54 | } 55 | if (str.contains("NVARCHAR2")) { 56 | return "NVARCHAR"; 57 | } 58 | if (str.contains("INT")) { 59 | return "INTEGER"; 60 | } 61 | if (str.contains("DOUBLE")) { 62 | return "DOUBLE"; 63 | } 64 | if (str.contains("FLOAT")) { 65 | return "FLOAT"; 66 | } 67 | if (str.contains("LONG")) { 68 | return "DECIMAL"; 69 | } 70 | if (str.contains("TEXT")) { 71 | return "VARCHAR"; 72 | } 73 | if ( str.indexOf("DATETIME")!=-1) { 74 | return "DATE"; 75 | } 76 | 77 | return null; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/pers/resource/FXML/HistoryConfig.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 12 |
13 | 14 |
15 |
16 | 18 | 19 | 26 | 28 | 30 | 31 | 32 | 33 | 34 | 36 | 37 | 38 | 39 | 40 | 42 | 43 | 44 | 45 | 46 | 48 | 70 | 71 |
72 |
73 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/StrUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | public class StrUtil { 4 | 5 | /** 6 | * 去掉下划线并将字符串转换成帕斯卡命名规范 7 | * 8 | * @param str 9 | * @return 10 | */ 11 | public static String unlineToPascal(String str) { 12 | if (str != null) { 13 | if (str.indexOf("_") == -1) { 14 | return fristToUpCase(str); 15 | } 16 | StringBuilder result = new StringBuilder(); 17 | String[] temp = str.split("_"); 18 | for (int i = 0; i < temp.length; i++) { 19 | if (temp[i].equals("") || temp[i].isEmpty()) { 20 | continue; 21 | } 22 | result.append(fristToUpCaseLaterToLoCase(temp[i])); 23 | } 24 | return result.toString(); 25 | } 26 | 27 | return str; 28 | } 29 | 30 | /** 31 | * 去掉下划线并将字符串转换成驼峰命名规范 32 | * 33 | * @param str 34 | * @return 35 | */ 36 | public static String unlineToCamel(String str) { 37 | if (str != null) { 38 | if (str.indexOf("_") == -1) { 39 | return fristToLoCase(str); 40 | } 41 | StringBuilder result = new StringBuilder(); 42 | String[] temp = str.split("_"); 43 | boolean falg = false; 44 | for (int i = 0; i < temp.length; i++) { 45 | if (temp[i].equals("") || temp[i].isEmpty()) { 46 | continue; 47 | } 48 | if (falg == false) { 49 | falg = true; 50 | result.append(temp[i].toLowerCase()); 51 | } else { 52 | result.append(fristToUpCaseLaterToLoCase(temp[i])); 53 | } 54 | } 55 | return result.toString(); 56 | } 57 | 58 | return str; 59 | } 60 | 61 | /** 62 | * 将字符串首字母大写其后小写 63 | * 64 | * @param str 65 | * @return 66 | */ 67 | public static String fristToUpCaseLaterToLoCase(String str) { 68 | if (str != null && str.length() > 0) { 69 | str = (str.substring(0, 1).toUpperCase()) + (str.substring(1).toLowerCase()); 70 | } 71 | return str; 72 | } 73 | 74 | /** 75 | * 将字符串首字母小写其后大写 76 | * 77 | * @param str 78 | * @return 79 | */ 80 | public static String fristToLoCaseLaterToUpCase(String str) { 81 | if (str != null && str.length() > 0) { 82 | str = (str.substring(0, 1).toLowerCase()) + (str.substring(1).toUpperCase()); 83 | 84 | } 85 | return str; 86 | } 87 | 88 | /** 89 | * 将字符串首字母大写 90 | * 91 | * @param str 92 | * @return 93 | */ 94 | public static String fristToUpCase(String str) { 95 | if (str != null && str.length() > 0) { 96 | str = str.substring(0, 1).toUpperCase() + str.substring(1); 97 | } 98 | return str; 99 | } 100 | 101 | /** 102 | * 将字符串首字母小写 103 | * 104 | * @param str 105 | * @return 106 | */ 107 | public static String fristToLoCase(String str) { 108 | if (str != null && str.length() > 0) { 109 | str = str.substring(0, 1).toLowerCase() + str.substring(1); 110 | } 111 | return str; 112 | } 113 | 114 | } 115 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/ColumnItem.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | import java.util.List; 4 | 5 | public class ColumnItem { 6 | private boolean anyAssociation;//true代表association,false代表collection 7 | private boolean anyHasColl;//true代表存在collection,false代表不存在,用于表示是否需要创建dao层分页嵌套查询接口 8 | private String primaryKey; 9 | private String className; 10 | private String inPropertyName; 11 | private String tableName; 12 | private String tableAlias; 13 | 14 | private String joinType; 15 | private String joinTableName; 16 | private String joinColumn; 17 | 18 | private List attributeCVFs; 19 | private List grandItem;//第三层关系属性 20 | public boolean isAnyAssociation() { 21 | return anyAssociation; 22 | } 23 | public void setAnyAssociation(boolean anyAssociation) { 24 | this.anyAssociation = anyAssociation; 25 | } 26 | 27 | 28 | public boolean isAnyHasColl() { 29 | return anyHasColl; 30 | } 31 | public void setAnyHasColl(boolean anyHasColl) { 32 | this.anyHasColl = anyHasColl; 33 | } 34 | public String getJoinType() { 35 | return joinType; 36 | } 37 | public void setJoinType(String joinType) { 38 | this.joinType = joinType; 39 | } 40 | 41 | public String getJoinTableName() { 42 | return joinTableName; 43 | } 44 | public void setJoinTableName(String joinTableName) { 45 | this.joinTableName = joinTableName; 46 | } 47 | public String getJoinColumn() { 48 | return joinColumn; 49 | } 50 | public void setJoinColumn(String joinColumn) { 51 | this.joinColumn = joinColumn; 52 | } 53 | public List getGrandItem() { 54 | return grandItem; 55 | } 56 | public void setGrandItem(List grandItem) { 57 | this.grandItem = grandItem; 58 | } 59 | public String getClassName() { 60 | return className; 61 | } 62 | public void setClassName(String className) { 63 | this.className = className; 64 | } 65 | 66 | 67 | 68 | public String getTableAlias() { 69 | return tableAlias; 70 | } 71 | public void setTableAlias(String tableAlias) { 72 | this.tableAlias = tableAlias; 73 | } 74 | public String getPrimaryKey() { 75 | return primaryKey; 76 | } 77 | public void setPrimaryKey(String primaryKey) { 78 | this.primaryKey = primaryKey; 79 | } 80 | public String getInPropertyName() { 81 | return inPropertyName; 82 | } 83 | public void setInPropertyName(String inPropertyName) { 84 | this.inPropertyName = inPropertyName; 85 | } 86 | public String getTableName() { 87 | return tableName; 88 | } 89 | public void setTableName(String tableName) { 90 | this.tableName = tableName; 91 | } 92 | public List getAttributeCVFs() { 93 | return attributeCVFs; 94 | } 95 | public void setAttributeCVFs(List attributeCVFs) { 96 | this.attributeCVFs = attributeCVFs; 97 | } 98 | 99 | } 100 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/AttributeCVF.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | 4 | 5 | import javafx.beans.property.BooleanProperty; 6 | import javafx.beans.property.SimpleBooleanProperty; 7 | import javafx.beans.property.SimpleStringProperty; 8 | import javafx.beans.property.StringProperty; 9 | import javafx.scene.control.ComboBox; 10 | 11 | public class AttributeCVF { 12 | private ColumnItem columnItem;//用于存储子表子集 13 | private BooleanProperty check = new SimpleBooleanProperty(true);; 14 | private StringProperty conlumn= new SimpleStringProperty(); 15 | private StringProperty jdbcType =new SimpleStringProperty(); 16 | private ComboBox javaType =new ComboBox(); 17 | private StringProperty propertyName= new SimpleStringProperty(); 18 | private String comment;//表列的注释 19 | 20 | 21 | public String getComment() { 22 | return comment; 23 | } 24 | 25 | public void setComment(String comment) { 26 | this.comment = comment; 27 | } 28 | 29 | public ColumnItem getColumnItem() { 30 | return columnItem; 31 | } 32 | 33 | public void setColumnItem(ColumnItem columnItem) { 34 | this.columnItem = columnItem; 35 | } 36 | 37 | public BooleanProperty checkProperty() { 38 | return check; 39 | } 40 | 41 | public Boolean getCheck() { 42 | return check.get(); 43 | } 44 | 45 | public void setCheck(Boolean check) { 46 | this.check.set(check); 47 | } 48 | 49 | public StringProperty conlumnProperty() { 50 | return conlumn; 51 | } 52 | public String getConlumn() { 53 | return conlumn.get(); 54 | } 55 | public void setConlumn(String conlumn) { 56 | this.setPropertyName(conlumn); 57 | this.conlumn.set(conlumn); 58 | } 59 | 60 | public StringProperty jdbcTypeProperty() { 61 | return jdbcType; 62 | } 63 | 64 | public String getJdbcType() { 65 | return jdbcType.get(); 66 | } 67 | 68 | public void setJdbcType(String jdbcType) { 69 | this.jdbcType.set(jdbcType); 70 | } 71 | 72 | public ComboBox getJavaType() { 73 | return javaType; 74 | } 75 | 76 | public String getJavaTypeValue() { 77 | return javaType.getValue(); 78 | } 79 | 80 | 81 | public void setJavaType(String javaType) { 82 | this.javaType.setValue(javaType); 83 | 84 | } 85 | 86 | public String getPropertyName() { 87 | return propertyName.get(); 88 | } 89 | public void setPropertyName(String propertyName) { 90 | this.propertyName.set(propertyName); 91 | 92 | } 93 | 94 | public AttributeCVF() { 95 | super(); 96 | javaType.setEditable(true); 97 | javaType.getItems().addAll("int","double","char","long", 98 | "java.util.Date","java.sql.Date","java.time.LocalDate","java.time.LocalTime","java.time.LocalDateTime","java.util.List", 99 | "java.util.Set","java.util.Map","String", 100 | "Double","Integer","Long","Object"); 101 | 102 | } 103 | 104 | @Override 105 | public String toString() { 106 | return "AttributeCVF [columnItem=" + columnItem + ", check=" + check + ", conlumn=" + conlumn + ", jdbcType=" 107 | + jdbcType + ", javaType=" + javaType + ", propertyName=" + propertyName + "]"; 108 | } 109 | 110 | 111 | 112 | } 113 | -------------------------------------------------------------------------------- /src/pers/cmeu/controller/BaseController.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.controller; 2 | 3 | import java.io.IOException; 4 | import java.lang.ref.SoftReference; 5 | import java.net.URL; 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | import javafx.fxml.FXMLLoader; 10 | import javafx.fxml.Initializable; 11 | import javafx.scene.Parent; 12 | import javafx.scene.Scene; 13 | import javafx.scene.image.Image; 14 | import javafx.stage.Modality; 15 | import javafx.stage.Stage; 16 | import pers.cmeu.view.AlertUtil; 17 | 18 | public abstract class BaseController implements Initializable { 19 | 20 | private Stage primaryStage; 21 | private Stage dialogStage; 22 | 23 | private static Map> cacheNodeMap = new HashMap<>(); 24 | 25 | public BaseController loadFXMLPage(String title, FXMLPage fxmlPage, boolean cache) { 26 | SoftReference parentNodeRef = cacheNodeMap.get(fxmlPage); 27 | if (cache && parentNodeRef != null) { 28 | return parentNodeRef.get(); 29 | } 30 | URL skeletonResource = Thread.currentThread().getContextClassLoader().getResource(fxmlPage.getFxml()); 31 | 32 | FXMLLoader loader = new FXMLLoader(skeletonResource); 33 | 34 | Parent loginNode; 35 | try { 36 | loginNode = loader.load(); 37 | BaseController controller = loader.getController(); 38 | dialogStage = new Stage(); 39 | dialogStage.setTitle(title); 40 | dialogStage.getIcons().add(new Image("pers/resource/image/CMEUicon.png")); 41 | dialogStage.initModality(Modality.APPLICATION_MODAL); 42 | dialogStage.initOwner(getPrimaryStage()); 43 | dialogStage.setScene(new Scene(loginNode)); 44 | dialogStage.setMaximized(false); 45 | dialogStage.setResizable(false); 46 | dialogStage.show(); 47 | controller.setDialogStage(dialogStage); 48 | SoftReference softReference = new SoftReference<>(controller); 49 | cacheNodeMap.put(fxmlPage, softReference); 50 | return controller; 51 | } catch (IOException e) { 52 | AlertUtil.showErrorAlert(e.getMessage()); 53 | } 54 | return null; 55 | } 56 | 57 | public Stage getPrimaryStage() { 58 | return primaryStage; 59 | } 60 | 61 | public void setPrimaryStage(Stage primaryStage) { 62 | this.primaryStage = primaryStage; 63 | } 64 | 65 | public Stage getDialogStage() { 66 | return dialogStage; 67 | } 68 | 69 | public void setDialogStage(Stage dialogStage) { 70 | this.dialogStage = dialogStage; 71 | } 72 | 73 | public void showDialogStage() { 74 | if (dialogStage != null) { 75 | dialogStage.show(); 76 | } 77 | } 78 | 79 | public void closeDialogStage() { 80 | if (dialogStage != null) { 81 | dialogStage.close(); 82 | } 83 | } 84 | public void closeDialogStageByMap(FXMLPage fxmlPage) { 85 | if (cacheNodeMap.get(fxmlPage).get().getDialogStage()!=null) { 86 | cacheNodeMap.get(fxmlPage).get().getDialogStage().close(); 87 | } 88 | } 89 | 90 | } 91 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/JavaType.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | public class JavaType { 4 | 5 | /** 6 | * 将JDBC类型转换为java数据类型 7 | * 8 | * @param str 9 | * @return 10 | */ 11 | public static String jdbcTypeToJavaType(String str) { 12 | if (str == null) { 13 | return ""; 14 | } 15 | 16 | if (isDate(str)) { 17 | return "java.util.Date"; 18 | } else if (isInteger(str)) { 19 | return "Integer"; 20 | } else if (isLong(str)) { 21 | return "Long"; 22 | } else if (isDouble(str)) { 23 | return "Double"; 24 | } else if (isString(str)) { 25 | return "String"; 26 | } else { 27 | return "Object"; 28 | } 29 | } 30 | 31 | /** 32 | * 判断是否为事件 33 | * 34 | * @param str 35 | * @return 36 | */ 37 | public static boolean isDate(String str) { 38 | if (str.equalsIgnoreCase("DATE") || str.equalsIgnoreCase("DATETIME") || str.equalsIgnoreCase("TIMESTAMP") 39 | || str.equalsIgnoreCase("INTERVAL") || str.equalsIgnoreCase("TIME") 40 | || str.equalsIgnoreCase("DATETIME2")) { 41 | return true; 42 | } else { 43 | return false; 44 | } 45 | } 46 | 47 | /** 48 | * 判断是否可为String类型 49 | * 50 | * @param str 51 | * @return 52 | */ 53 | public static boolean isString(String str) { 54 | if (str.equalsIgnoreCase("NCHAR") || str.equalsIgnoreCase("CHAR") || str.equalsIgnoreCase("NVARCHAR2") 55 | || str.equalsIgnoreCase("VARCHAR2") || str.equalsIgnoreCase("NVARCHAR") 56 | || str.equalsIgnoreCase("VARCHAR") || str.equalsIgnoreCase("DEDIUMBLOB") 57 | || str.equalsIgnoreCase("DEDIUMTEXT") || str.equalsIgnoreCase("CLOB") || str.equalsIgnoreCase("NCLOB") 58 | || str.equalsIgnoreCase("BLOB") || str.equalsIgnoreCase("NBLOB") || str.equalsIgnoreCase("BFILE") 59 | || str.equalsIgnoreCase("XML") || str.equalsIgnoreCase("IMAGE") || str.equalsIgnoreCase("TEXT")) { 60 | return true; 61 | } else { 62 | return false; 63 | } 64 | } 65 | 66 | /** 67 | * 判断是否为Integer类型 68 | * 69 | * @param str 70 | * @return 71 | */ 72 | public static boolean isInteger(String str) { 73 | if (str.equalsIgnoreCase("NUMBER") || str.equalsIgnoreCase("INTEGER") || str.equalsIgnoreCase("INT") 74 | || str.equalsIgnoreCase("TINYINT") || str.equalsIgnoreCase("SMALLINT") || str.equalsIgnoreCase("BIT")) { 75 | return true; 76 | } else { 77 | return false; 78 | } 79 | } 80 | 81 | /** 82 | * 判断是否为Long类型 83 | * 84 | * @param str 85 | * @return 86 | */ 87 | public static boolean isLong(String str) { 88 | if (str.equalsIgnoreCase("Long") || str.equalsIgnoreCase("Int UNSIGEND") 89 | || str.equalsIgnoreCase("LONG UNSIGEND") || str.equalsIgnoreCase("BIGINT") 90 | || str.equalsIgnoreCase("unsigned")|| str.equalsIgnoreCase("TINYINT UNSIGNED")|| str.equalsIgnoreCase("BIGINT UNSIGNED")) { 91 | return true; 92 | } else { 93 | return false; 94 | } 95 | } 96 | 97 | /** 98 | * 判断是否为Double类型 99 | * 100 | * @param str 101 | * @return 102 | */ 103 | public static boolean isDouble(String str) { 104 | if (str.equalsIgnoreCase("BINARY_DOUBLE") || str.equalsIgnoreCase("BINARY_FLOAT") 105 | || str.equalsIgnoreCase("FLOAT") || str.equalsIgnoreCase("DECIMAL") || str.equalsIgnoreCase("MONEY") 106 | || str.equalsIgnoreCase("NUMERIC") || str.equalsIgnoreCase("REAL") || str.equalsIgnoreCase("DOUBLE")) { 107 | return true; 108 | } else { 109 | return false; 110 | } 111 | 112 | } 113 | 114 | } 115 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/ClassUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.util.List; 4 | 5 | public class ClassUtil { 6 | private ClassUtil() { 7 | }; 8 | 9 | /** 10 | * 获得对象 11 | * 12 | * @return 13 | */ 14 | public static ClassUtil getInstance() { 15 | return new ClassUtil(); 16 | } 17 | 18 | /** 19 | * 获得实体类,属性列表包名,实体类名,属性数据集合下标0属性类型,1位属性名字 20 | * 21 | * @param packageName 22 | * @param entityName 23 | * @param property 24 | * @return 25 | */ 26 | public String getEntityString(String packageName, List importSpaces, String entityName, 27 | List property, boolean anySerializable, boolean createConstr, boolean createConstrAll, 28 | boolean createSetGet) { 29 | StringBuffer buffer = new StringBuffer(); 30 | buffer.append("package " + packageName + ";\r\n"); 31 | buffer.append(getImport(importSpaces)); 32 | if (anySerializable) { 33 | buffer.append("public class " + entityName 34 | + " implements java.io.Serializable {\r\n private static final long serialVersionUID = 1L;\r\n"); 35 | } else { 36 | buffer.append("public class " + entityName + " {\r\n"); 37 | } 38 | buffer.append(getProperty(property)); 39 | if (createConstr) { 40 | buffer.append(getConstr(entityName)); 41 | } 42 | if (createConstrAll) { 43 | buffer.append(getConstrAll(entityName, property)); 44 | } 45 | if (createSetGet) { 46 | buffer.append(getGetSet(property)); 47 | } 48 | buffer.append("}\r\n"); 49 | return buffer.toString(); 50 | } 51 | 52 | /** 53 | * 获得导入空间的字符串 54 | * 55 | * @param importSpaces 56 | * @return 57 | */ 58 | private String getImport(List importSpaces) { 59 | if (importSpaces == null || importSpaces.size() == 0) { 60 | return ""; 61 | } 62 | StringBuffer result = new StringBuffer(); 63 | for (String str : importSpaces) { 64 | result.append("import " + str + ";\r\n"); 65 | } 66 | return result.toString(); 67 | } 68 | 69 | /** 70 | * 获得无参构造方法 71 | * 72 | * @param cname 73 | * @return 74 | */ 75 | private String getConstr(String entityName) { 76 | return " public " + entityName + "() {\r\n super();\r\n }\r\n"; 77 | } 78 | 79 | /** 80 | * 获得属性 81 | * 82 | * @param str 83 | * @return 84 | */ 85 | private String getProperty(List str) { 86 | if (str == null) { 87 | return ""; 88 | } 89 | StringBuffer result = new StringBuffer(); 90 | for (String[] list : str) { 91 | result.append(" private " + list[0] + " " + list[1] + ";"); 92 | if (list[2]!=null&&!("".equals(list[2]))) { 93 | result.append("//" + list[2] + "\r\n"); 94 | }else{ 95 | result.append("\r\n"); 96 | } 97 | } 98 | return result.toString(); 99 | } 100 | 101 | /** 102 | * 获得带参构造方法; 103 | * 104 | * @param str 105 | */ 106 | private String getConstrAll(String entityName, List str) { 107 | if (str == null) { 108 | return ""; 109 | } 110 | StringBuffer result = new StringBuffer(" public " + entityName + "("); 111 | for (int i = 0; i < str.size(); i++) { 112 | if (str.get(i)[1] == null) { 113 | continue; 114 | } 115 | if (i == 0) { 116 | result.append(str.get(i)[0] + " " + str.get(i)[1]); 117 | } else { 118 | result.append("," + str.get(i)[0] + " " + str.get(i)[1]); 119 | } 120 | } 121 | 122 | for (int i = 0; i < str.size(); i++) { 123 | if (str.get(i)[1] == null) { 124 | continue; 125 | } 126 | if (i == 0) { 127 | result.append(") {\r\n super();\r\n"); 128 | result.append(" this." + str.get(i)[1] + " = " + str.get(i)[1] + ";\r\n"); 129 | } else { 130 | result.append(" this." + str.get(i)[1] + " = " + str.get(i)[1] + ";\r\n"); 131 | } 132 | } 133 | result.append(" }\r\n"); 134 | return result.toString(); 135 | } 136 | 137 | /** 138 | * 获得get与set 139 | * 140 | * @param str 141 | * @return 142 | */ 143 | private String getGetSet(List str) { 144 | if (str == null) { 145 | return ""; 146 | } 147 | StringBuffer result = new StringBuffer(); 148 | for (int i = 0; i < str.size(); i++) { 149 | result.append(" public " + str.get(i)[0] + " get" + StrUtil.fristToUpCase(str.get(i)[1]) + "() {\r\n"); 150 | result.append(" return this." + str.get(i)[1] + ";\r\n }\r\n\r\n"); 151 | result.append(" public void set" + StrUtil.fristToUpCase(str.get(i)[1]) + "(" + str.get(i)[0] + " " 152 | + str.get(i)[1] + ") {\r\n"); 153 | result.append(" this." + str.get(i)[1] + " = " + str.get(i)[1] + ";\r\n }\r\n\r\n"); 154 | 155 | } 156 | 157 | return result.toString(); 158 | } 159 | 160 | } 161 | -------------------------------------------------------------------------------- /src/pers/cmeu/controller/UpdateConnection.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.controller; 2 | 3 | import java.net.URL; 4 | import java.util.ResourceBundle; 5 | 6 | import org.apache.log4j.Logger; 7 | 8 | import javafx.event.ActionEvent; 9 | import javafx.fxml.FXML; 10 | import javafx.scene.control.Button; 11 | import javafx.scene.control.ComboBox; 12 | import javafx.scene.control.TextField; 13 | import pers.cmeu.common.ConfigUtil; 14 | import pers.cmeu.common.DBUtil; 15 | import pers.cmeu.models.DatabaseConfig; 16 | import pers.cmeu.view.AlertUtil; 17 | 18 | public class UpdateConnection extends BaseController { 19 | private Logger log = Logger.getLogger(UpdateConnection.class.getName()); 20 | private IndexController indexController; 21 | @FXML 22 | private TextField txtConnName; 23 | @FXML 24 | private TextField txtConnURL; 25 | @FXML 26 | private TextField txtListenPort; 27 | @FXML 28 | private TextField txtDBName; 29 | @FXML 30 | private TextField txtUserName; 31 | @FXML 32 | private TextField txtUserPwd; 33 | @FXML 34 | private ComboBox cboDBType; 35 | @FXML 36 | private ComboBox cboDBCoding; 37 | @FXML 38 | private Button btnTestConn; 39 | @FXML 40 | private Button btnCancel; 41 | @FXML 42 | private Button btnSave; 43 | 44 | @Override 45 | public void initialize(URL location, ResourceBundle resources) { 46 | 47 | 48 | } 49 | public void init() { 50 | log.debug("初始化修改数据库连接窗口..."); 51 | DatabaseConfig config = indexController.getUpdateOfDatabaseConfig(); 52 | // 初始化下拉列表 53 | cboDBType.getItems().addAll("Oracle", "MySQL", "SqlServer", "PostgreSQL"); 54 | cboDBType.setValue(config.getDbType()); 55 | cboDBCoding.getItems().addAll("utf8", "gb2312", "gbk"); 56 | cboDBCoding.setValue(config.getEncoding()); 57 | txtConnName.setText(config.getConnName()); 58 | txtConnURL.setText(config.getConnURL()); 59 | txtDBName.setText(config.getDbName()); 60 | txtListenPort.setText(config.getListenPort()); 61 | txtUserName.setText(config.getUserName()); 62 | txtUserPwd.setText(config.getUserPwd()); 63 | log.debug("初始化数据库连接窗口成功!"); 64 | } 65 | 66 | /** 67 | * 确定修改 68 | * @param event 69 | */ 70 | public void btnUpdate(ActionEvent event) { 71 | log.debug("执行修改数据库连接..."); 72 | DatabaseConfig dbConfig = getDatabaseConfig(); 73 | if (dbConfig == null) { 74 | log.debug("连接数据库的数据为null,取消保存操作!!!"); 75 | return; 76 | } 77 | try { 78 | ConfigUtil.updateDatabaseConfig(dbConfig); 79 | AlertUtil.showAndWaitInfoAlert("修改数据库连接成功!"); 80 | indexController.loadTVDataBase(); 81 | log.debug("修改数据库连接成功!"); 82 | getDialogStage().close(); 83 | } catch (Exception e) { 84 | AlertUtil.showErrorAlert(e.getMessage()); 85 | log.error("修改数据库连接失败!!!"+e); 86 | } 87 | } 88 | /** 89 | * 取消修改 90 | * @param event 91 | */ 92 | public void onCancel(ActionEvent event) { 93 | getDialogStage().close(); 94 | } 95 | 96 | /** 97 | * 测试连接 98 | * @param event 99 | */ 100 | public void testConnection(ActionEvent event){ 101 | log.debug("执行测试数据库连接..."); 102 | DatabaseConfig config = getDatabaseConfig(); 103 | if (config == null) { 104 | log.debug("连接数据库的数据为null,取消测试操作!!!"); 105 | return; 106 | } 107 | try { 108 | DBUtil.getConnection(config); 109 | AlertUtil.showInfoAlert("连接成功!"); 110 | log.debug("数据库测试连接成功!"); 111 | } catch (Exception e) { 112 | AlertUtil.showWarnAlert("连接失败!原因:"+e.getMessage()); 113 | log.error("数据库连接测试失败!!!"+e); 114 | } 115 | } 116 | 117 | /** 118 | * 获得连接的所有字段 119 | * @return 120 | */ 121 | public DatabaseConfig getDatabaseConfig() { 122 | String connName=txtConnName.getText().trim(); 123 | String connURL=txtConnURL.getText().trim(); 124 | String listenPort=txtListenPort.getText().trim(); 125 | String dbName=txtDBName.getText().trim(); 126 | String userName=txtUserName.getText().trim(); 127 | String userPwd=txtUserPwd.getText().trim(); 128 | String dbType=cboDBType.getValue(); 129 | String encoding=cboDBCoding.getValue(); 130 | boolean isEmpty=validata(connName,connURL,listenPort,dbName,userName,dbType,encoding); 131 | if (isEmpty) { 132 | DatabaseConfig config=new DatabaseConfig(connName, connURL, listenPort, dbName, userName, userPwd, dbType, encoding); 133 | return config; 134 | }else { 135 | AlertUtil.showWarnAlert("除了密码以外所有属性都为必需填与选择"); 136 | return null; 137 | } 138 | 139 | } 140 | 141 | /** 142 | * 验证所有属性是否已经填写 143 | * @param str 144 | * @return 145 | */ 146 | public boolean validata(String...str) { 147 | for (String string : str) { 148 | if (string==null||"".equals(string)) { 149 | return false; 150 | } 151 | } 152 | return true; 153 | } 154 | 155 | public IndexController getIndexController() { 156 | return indexController; 157 | } 158 | 159 | public void setIndexController(IndexController indexController) { 160 | this.indexController = indexController; 161 | } 162 | 163 | 164 | } 165 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/DBUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.sql.Connection; 4 | import java.sql.DatabaseMetaData; 5 | import java.sql.DriverManager; 6 | import java.sql.ResultSet; 7 | import java.sql.SQLException; 8 | import java.util.ArrayList; 9 | import java.util.HashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | import pers.cmeu.models.AttributeCVF; 14 | import pers.cmeu.models.DBType; 15 | import pers.cmeu.models.DatabaseConfig; 16 | 17 | public class DBUtil { 18 | private static final int DB_CONNECTION_TIMEOUTS_SECONDS = 1; 19 | 20 | /** 21 | * 获得数据库连接 22 | * 23 | * @param config 24 | * @return 25 | * @throws ClassNotFoundException 26 | * @throws SQLException 27 | */ 28 | public static Connection getConnection(DatabaseConfig config) throws ClassNotFoundException, SQLException { 29 | DriverManager.setLoginTimeout(DB_CONNECTION_TIMEOUTS_SECONDS); 30 | DBType dbType = DBType.valueOf(config.getDbType()); 31 | Class.forName(dbType.getDriverClass()); 32 | String url = getConnectionURL(config); 33 | return DriverManager.getConnection(url, config.getUserName(), config.getUserPwd()); 34 | } 35 | 36 | /** 37 | * 获得数据库连接URL 38 | * 39 | * @param dbConfig 40 | * @return 41 | * @throws ClassNotFoundException 42 | */ 43 | public static String getConnectionURL(DatabaseConfig dbConfig) throws ClassNotFoundException { 44 | DBType dbType = DBType.valueOf(dbConfig.getDbType()); 45 | String connectionRUL = String.format(dbType.getConnectionUrlPattern(), dbConfig.getConnURL(), 46 | dbConfig.getListenPort(), dbConfig.getDbName(), dbConfig.getEncoding()); 47 | return connectionRUL; 48 | } 49 | 50 | /** 51 | * 获得数据库的表名 52 | * 53 | * @param config 54 | * @return 55 | * @throws Exception 56 | */ 57 | public static List getTableNames(DatabaseConfig config) throws Exception { 58 | Connection conn = getConnection(config); 59 | List tables = new ArrayList<>(); 60 | ResultSet rs; 61 | if (config.getDbType().equalsIgnoreCase("sqlserver")) { 62 | // 如果是sqlserver数据库通过查询获得所有表跟视图 63 | String sql = "select name from sysobjects where xtype='u' or xtype='v' "; 64 | rs = conn.createStatement().executeQuery(sql); 65 | while (rs.next()) { 66 | tables.add(rs.getString("name")); 67 | } 68 | 69 | } else { 70 | // 如果非sqlserver类型的数据库通过JDBC获得所有表跟视图 71 | DatabaseMetaData md = conn.getMetaData(); 72 | String[] types = { "TABLE", "VIEW" }; 73 | if (config.getDbType().equalsIgnoreCase("PostgreSQL")) { 74 | rs = md.getTables(null, null, null, types); 75 | } else { 76 | rs = md.getTables(null, config.getUserName().toUpperCase(), null, types); 77 | } 78 | while (rs.next()) { 79 | tables.add(rs.getString(3)); 80 | } 81 | } 82 | 83 | return tables; 84 | } 85 | 86 | /** 87 | * 获得所有列同时生成Attribute表模型 88 | * 89 | * @param config 90 | * @param tableName 91 | * @return 92 | * @throws Exception 93 | */ 94 | public static List getTableColumns(DatabaseConfig config, String tableName) throws Exception { 95 | Connection conn = getConnection(config); 96 | DatabaseMetaData md = conn.getMetaData(); 97 | ResultSet rs = md.getColumns(null, null, tableName, null); 98 | Map columnMap = new HashMap<>(); 99 | while (rs.next()) { 100 | AttributeCVF attribute = new AttributeCVF(); 101 | attribute.setConlumn(rs.getString("COLUMN_NAME")); 102 | attribute.setComment(rs.getString("REMARKS")); 103 | attribute.setJavaType(JavaType.jdbcTypeToJavaType(rs.getString("TYPE_NAME"))); 104 | attribute.setJdbcType(JDBCType.valiJDBCType(rs.getString("TYPE_NAME").toUpperCase())); 105 | columnMap.put(rs.getString("COLUMN_NAME"), attribute); 106 | } 107 | if (columnMap.size() == 0) { 108 | throw new NullPointerException("从表中获取字段失败!获取不到任何字段!"); 109 | } 110 | List result = new ArrayList<>(columnMap.values()); 111 | // 将主键放在第一位 112 | String key = null; 113 | key = getTablePrimaryKey(config, tableName); 114 | if (key != null) { 115 | boolean anyKeyInFrist = false; 116 | if (result.size() > 0) { 117 | if (result.get(0).getConlumn() != null) { 118 | if (result.get(0).getConlumn().equals(key)) { 119 | anyKeyInFrist = true; 120 | } 121 | } 122 | } 123 | if (!anyKeyInFrist) { 124 | int keyIndex = 0; 125 | for (int i = 0; i < result.size(); i++) { 126 | if (result.get(i).getConlumn() != null) { 127 | if (result.get(i).getConlumn().equals(key)) { 128 | keyIndex = i; 129 | break; 130 | } 131 | } 132 | } 133 | result.add(0, result.remove(keyIndex)); 134 | } 135 | } 136 | 137 | return result; 138 | } 139 | 140 | /** 141 | * 获得主键名称 142 | * 143 | * @param config 144 | * @param tableName 145 | * @return 146 | * @throws Exception 147 | */ 148 | public static String getTablePrimaryKey(DatabaseConfig config, String tableName) throws Exception { 149 | Connection conn = getConnection(config); 150 | DatabaseMetaData md = conn.getMetaData(); 151 | ResultSet rs = md.getPrimaryKeys(null, null, tableName); 152 | while (rs.next()) { 153 | return rs.getString("COLUMN_NAME"); 154 | } 155 | return null; 156 | } 157 | 158 | } 159 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/SuperAttribute.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | import java.util.List; 4 | 5 | public class SuperAttribute { 6 | 7 | private boolean isCamel; 8 | private boolean isSerializable; 9 | private boolean isCreateJDBCType; 10 | private boolean isCreateGetSet; 11 | private boolean isConstruct; 12 | private boolean isConstructAll; 13 | 14 | private String className; 15 | private String tableName; 16 | private String tableAlias; 17 | private String primaryKey; 18 | private String daoName; 19 | private String mapperName; 20 | private String serviceName; 21 | private String serviceImplName; 22 | private String joinType; 23 | private String joinColumn; 24 | private String selectKey; 25 | private List attributes; 26 | private List columnItems; 27 | private boolean anyHasColl;// true代表即将创建的类中存在集合,false代表不存在,用于表示是否需要创建dao层分页嵌套查询接口 28 | 29 | public SuperAttribute() { 30 | super(); 31 | } 32 | 33 | public SuperAttribute(boolean isCamel, boolean isCreateJDBCType, boolean isCreateGetSet, boolean isConstruct, 34 | boolean isConstructAll, String className, String tableName, String primaryKey, 35 | List attributes) { 36 | super(); 37 | this.isCamel = isCamel; 38 | this.isCreateJDBCType = isCreateJDBCType; 39 | this.isCreateGetSet = isCreateGetSet; 40 | this.isConstruct = isConstruct; 41 | this.isConstructAll = isConstructAll; 42 | this.className = className; 43 | this.tableName = tableName; 44 | this.primaryKey = primaryKey; 45 | this.attributes = attributes; 46 | } 47 | 48 | public String getTableAlias() { 49 | return tableAlias; 50 | } 51 | 52 | public void setTableAlias(String tableAlias) { 53 | this.tableAlias = tableAlias; 54 | } 55 | 56 | public List getColumnItems() { 57 | return columnItems; 58 | } 59 | 60 | public void setColumnItems(List columnItems) { 61 | this.columnItems = columnItems; 62 | } 63 | 64 | public String getSelectKey() { 65 | return selectKey; 66 | } 67 | 68 | public void setSelectKey(String selectKey) { 69 | this.selectKey = selectKey; 70 | } 71 | 72 | public String getDaoName() { 73 | return daoName; 74 | } 75 | 76 | public void setDaoName(String daoName) { 77 | this.daoName = daoName; 78 | } 79 | 80 | public String getMapperName() { 81 | return mapperName; 82 | } 83 | 84 | public void setMapperName(String mapperName) { 85 | this.mapperName = mapperName; 86 | } 87 | 88 | public String getServiceName() { 89 | return serviceName; 90 | } 91 | 92 | public void setServiceName(String serviceName) { 93 | this.serviceName = serviceName; 94 | } 95 | 96 | public String getServiceImplName() { 97 | return serviceImplName; 98 | } 99 | 100 | public void setServiceImplName(String serviceImplName) { 101 | this.serviceImplName = serviceImplName; 102 | } 103 | 104 | public String getJoinType() { 105 | return joinType; 106 | } 107 | 108 | public void setJoinType(String joinType) { 109 | this.joinType = joinType; 110 | } 111 | 112 | public String getJoinColumn() { 113 | return joinColumn; 114 | } 115 | 116 | public void setJoinColumn(String joinColumn) { 117 | this.joinColumn = joinColumn; 118 | } 119 | 120 | public boolean isCamel() { 121 | return isCamel; 122 | } 123 | 124 | public void setCamel(boolean isCamel) { 125 | this.isCamel = isCamel; 126 | } 127 | 128 | public boolean isSerializable() { 129 | return isSerializable; 130 | } 131 | 132 | public void setSerializable(boolean isSerializable) { 133 | this.isSerializable = isSerializable; 134 | } 135 | 136 | public boolean isCreateJDBCType() { 137 | return isCreateJDBCType; 138 | } 139 | 140 | public void setCreateJDBCType(boolean isCreateJDBCType) { 141 | this.isCreateJDBCType = isCreateJDBCType; 142 | } 143 | 144 | public boolean isCreateGetSet() { 145 | return isCreateGetSet; 146 | } 147 | 148 | public void setCreateGetSet(boolean isCreateGetSet) { 149 | this.isCreateGetSet = isCreateGetSet; 150 | } 151 | 152 | public boolean isConstruct() { 153 | return isConstruct; 154 | } 155 | 156 | public void setConstruct(boolean isConstruct) { 157 | this.isConstruct = isConstruct; 158 | } 159 | 160 | public boolean isConstructAll() { 161 | return isConstructAll; 162 | } 163 | 164 | public void setConstructAll(boolean isConstructAll) { 165 | this.isConstructAll = isConstructAll; 166 | } 167 | 168 | public String getClassName() { 169 | return className; 170 | } 171 | 172 | public void setClassName(String className) { 173 | this.className = className; 174 | } 175 | 176 | public String getTableName() { 177 | return tableName; 178 | } 179 | 180 | public void setTableName(String tableName) { 181 | this.tableName = tableName; 182 | } 183 | 184 | public String getPrimaryKey() { 185 | return primaryKey; 186 | } 187 | 188 | public void setPrimaryKey(String primaryKey) { 189 | this.primaryKey = primaryKey; 190 | } 191 | 192 | public List getAttributes() { 193 | return attributes; 194 | } 195 | 196 | public void setAttributes(List attributes) { 197 | this.attributes = attributes; 198 | } 199 | 200 | public boolean isAnyHasColl() { 201 | return anyHasColl; 202 | } 203 | 204 | public void setAnyHasColl(boolean anyHasColl) { 205 | this.anyHasColl = anyHasColl; 206 | } 207 | 208 | } 209 | -------------------------------------------------------------------------------- /src/pers/resource/FXML/Connection.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 30 | 42 | 43 | 44 | 45 | 46 |
47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 131 | 132 | 133 |
134 |
135 | -------------------------------------------------------------------------------- /src/pers/resource/FXML/UpdateConnection.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 30 | 42 | 43 | 44 | 45 | 46 |
47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 131 | 132 | 133 |
134 |
135 | -------------------------------------------------------------------------------- /src/pers/cmeu/controller/ConnectionController.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.controller; 2 | import java.net.URL; 3 | import java.util.ResourceBundle; 4 | 5 | import org.apache.log4j.Logger; 6 | 7 | import javafx.event.ActionEvent; 8 | import javafx.fxml.FXML; 9 | import javafx.scene.control.Button; 10 | import javafx.scene.control.ComboBox; 11 | import javafx.scene.control.TextField; 12 | import pers.cmeu.common.ConfigUtil; 13 | import pers.cmeu.common.DBUtil; 14 | import pers.cmeu.models.DatabaseConfig; 15 | import pers.cmeu.view.AlertUtil; 16 | 17 | public class ConnectionController extends BaseController { 18 | private Logger log=Logger.getLogger(ConnectionController.class.getName()); 19 | private IndexController indexController; 20 | @FXML 21 | private TextField txtConnName; 22 | @FXML 23 | private TextField txtConnURL; 24 | @FXML 25 | private TextField txtListenPort; 26 | @FXML 27 | private TextField txtDBName; 28 | @FXML 29 | private TextField txtUserName; 30 | @FXML 31 | private TextField txtUserPwd; 32 | @FXML 33 | private ComboBox cboDBType; 34 | @FXML 35 | private ComboBox cboDBCoding; 36 | @FXML 37 | private Button btnTestConn; 38 | @FXML 39 | private Button btnCancel; 40 | @FXML 41 | private Button btnSave; 42 | 43 | 44 | 45 | @Override 46 | public void initialize(URL location, ResourceBundle resources) { 47 | log.debug("初始化数据库连接窗口...."); 48 | //初始化下拉列表 49 | cboDBType.getItems().addAll("Oracle","MySQL","SqlServer","PostgreSQL"); 50 | cboDBCoding.getItems().addAll("utf8","utf16","utf32","utf8mb4","gb2312","gbk","ascii"); 51 | cboDBCoding.setValue("utf8"); 52 | log.debug("初始化数据库连接成功!"); 53 | } 54 | 55 | /** 56 | * 保存连接 57 | * @param event 58 | */ 59 | public void saveConnection(ActionEvent event){ 60 | log.debug("执行保存数据库连接..."); 61 | DatabaseConfig config = getDatabaseConfig(); 62 | if (config == null) { 63 | log.debug("连接数据库的数据为null,取消保存操作!!!"); 64 | return; 65 | } 66 | try { 67 | ConfigUtil.saveDatabaseConfig(config.getConnName(),config); 68 | getDialogStage().close(); 69 | indexController.loadTVDataBase(); 70 | log.debug("保存数据库连接成功!"); 71 | } catch (Exception e) { 72 | AlertUtil.showErrorAlert(e.getMessage()); 73 | log.error("保存数据库连接失败!!!"+e); 74 | } 75 | 76 | 77 | } 78 | /** 79 | * 关闭当前窗口 80 | * @param event 81 | */ 82 | public void onCancel(ActionEvent event) { 83 | closeDialogStage(); 84 | } 85 | 86 | /** 87 | * 测试连接 88 | * @param event 89 | */ 90 | public void testConnection(ActionEvent event){ 91 | log.debug("执行测试数据库连接..."); 92 | DatabaseConfig config = getDatabaseConfig(); 93 | if (config == null) { 94 | log.debug("连接数据库的数据为null,取消测试操作!!!"); 95 | return; 96 | } 97 | try { 98 | DBUtil.getConnection(config); 99 | AlertUtil.showInfoAlert("连接成功!"); 100 | log.debug("数据库测试连接成功!"); 101 | } catch (Exception e) { 102 | AlertUtil.showWarnAlert("连接失败"+e.getMessage()); 103 | log.error("数据库连接测试失败!!!"+e); 104 | } 105 | } 106 | 107 | 108 | /** 109 | * 获得连接的所有字段 110 | * @return 111 | */ 112 | public DatabaseConfig getDatabaseConfig() { 113 | String connName=txtConnName.getText().trim(); 114 | String connURL=txtConnURL.getText().trim(); 115 | String listenPort=txtListenPort.getText().trim(); 116 | String dbName=txtDBName.getText().trim(); 117 | String userName=txtUserName.getText().trim(); 118 | String userPwd=txtUserPwd.getText().trim(); 119 | String dbType=cboDBType.getValue(); 120 | String encoding=cboDBCoding.getValue(); 121 | boolean isEmpty=validata(connName,connURL,listenPort,dbName,userName,dbType,encoding); 122 | if (isEmpty) { 123 | DatabaseConfig config=new DatabaseConfig(connName, connURL, listenPort, dbName, userName, userPwd, dbType, encoding); 124 | return config; 125 | }else { 126 | AlertUtil.showWarnAlert("除了密码以外所有属性都为必需填与选择"); 127 | return null; 128 | } 129 | 130 | } 131 | 132 | /** 133 | * 验证所有属性是否已经填写 134 | * @param str 135 | * @return 136 | */ 137 | public boolean validata(String...str) { 138 | for (String string : str) { 139 | if (string==null||"".equals(string)) { 140 | return false; 141 | } 142 | } 143 | return true; 144 | } 145 | 146 | 147 | //----------------------get/set---------------------------- 148 | public IndexController getIndexController() { 149 | return indexController; 150 | } 151 | 152 | public void setIndexController(IndexController indexController) { 153 | this.indexController = indexController; 154 | } 155 | 156 | public TextField getTxtConnName() { 157 | return txtConnName; 158 | } 159 | 160 | public void setTxtConnName(TextField txtConnName) { 161 | this.txtConnName = txtConnName; 162 | } 163 | 164 | public TextField getTxtConnURL() { 165 | return txtConnURL; 166 | } 167 | 168 | public void setTxtConnURL(TextField txtConnURL) { 169 | this.txtConnURL = txtConnURL; 170 | } 171 | 172 | public TextField getTxtListenPort() { 173 | return txtListenPort; 174 | } 175 | 176 | public void setTxtListenPort(TextField txtListenPort) { 177 | this.txtListenPort = txtListenPort; 178 | } 179 | 180 | public TextField getTxtDBName() { 181 | return txtDBName; 182 | } 183 | 184 | public void setTxtDBName(TextField txtDBName) { 185 | this.txtDBName = txtDBName; 186 | } 187 | 188 | public TextField getTxtUserName() { 189 | return txtUserName; 190 | } 191 | 192 | public void setTxtUserName(TextField txtUserName) { 193 | this.txtUserName = txtUserName; 194 | } 195 | 196 | public TextField getTxtUserPwd() { 197 | return txtUserPwd; 198 | } 199 | 200 | public void setTxtUserPwd(TextField txtUserPwd) { 201 | this.txtUserPwd = txtUserPwd; 202 | } 203 | 204 | public ComboBox getCboDBType() { 205 | return cboDBType; 206 | } 207 | 208 | public void setCboDBType(ComboBox cboDBType) { 209 | this.cboDBType = cboDBType; 210 | } 211 | 212 | public ComboBox getCboDBCoding() { 213 | return cboDBCoding; 214 | } 215 | 216 | public void setCboDBCoding(ComboBox cboDBCoding) { 217 | this.cboDBCoding = cboDBCoding; 218 | } 219 | 220 | public Button getBtnTestConn() { 221 | return btnTestConn; 222 | } 223 | 224 | public void setBtnTestConn(Button btnTestConn) { 225 | this.btnTestConn = btnTestConn; 226 | } 227 | 228 | public Button getBtnCancel() { 229 | return btnCancel; 230 | } 231 | 232 | public void setBtnCancel(Button btnCancel) { 233 | this.btnCancel = btnCancel; 234 | } 235 | 236 | public Button getBtnSave() { 237 | return btnSave; 238 | } 239 | 240 | public void setBtnSave(Button btnSave) { 241 | this.btnSave = btnSave; 242 | } 243 | 244 | 245 | 246 | } 247 | -------------------------------------------------------------------------------- /src/pers/cmeu/models/HistoryConfig.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.models; 2 | 3 | public class HistoryConfig { 4 | private String historyConfigName; 5 | private String projectPath; 6 | private String rootDir; 7 | private String daoPackage; 8 | private String daoName; 9 | private String servicePackage; 10 | private String serviceName; 11 | private String serviceImplPackage; 12 | private String serviceImplName; 13 | private String entityPackage; 14 | private String entityName; 15 | private String mapPackage; 16 | private String mapName; 17 | private String updateMapper; 18 | private String assistPackage; 19 | private String assistName; 20 | private String configPackage; 21 | private String configName; 22 | private String myUtilPackage; 23 | private String myUtilName; 24 | private boolean isService; 25 | private boolean isSpringAnno; 26 | private boolean isAssist; 27 | private boolean isConfig; 28 | private boolean isMyUtil; 29 | 30 | 31 | public String getConfigName() { 32 | return configName; 33 | } 34 | public void setConfigName(String configName) { 35 | this.configName = configName; 36 | } 37 | public String getHistoryConfigName() { 38 | return historyConfigName; 39 | } 40 | public void setHistoryConfigName(String historyConfigName) { 41 | this.historyConfigName = historyConfigName; 42 | } 43 | public String getProjectPath() { 44 | return projectPath; 45 | } 46 | public void setProjectPath(String projectPath) { 47 | this.projectPath = projectPath; 48 | } 49 | public String getRootDir() { 50 | return rootDir; 51 | } 52 | public void setRootDir(String rootDir) { 53 | this.rootDir = rootDir; 54 | } 55 | public String getDaoPackage() { 56 | return daoPackage; 57 | } 58 | public void setDaoPackage(String daoPackage) { 59 | this.daoPackage = daoPackage; 60 | } 61 | public String getDaoName() { 62 | return daoName; 63 | } 64 | public void setDaoName(String daoName) { 65 | this.daoName = daoName; 66 | } 67 | 68 | public String getUpdateMapper() { 69 | return updateMapper; 70 | } 71 | public void setUpdateMapper(String updateMapper) { 72 | this.updateMapper = updateMapper; 73 | } 74 | public String getServicePackage() { 75 | return servicePackage; 76 | } 77 | public void setServicePackage(String servicePackage) { 78 | this.servicePackage = servicePackage; 79 | } 80 | public String getServiceName() { 81 | return serviceName; 82 | } 83 | public void setServiceName(String serviceName) { 84 | this.serviceName = serviceName; 85 | } 86 | 87 | public String getServiceImplPackage() { 88 | return serviceImplPackage; 89 | } 90 | public void setServiceImplPackage(String serviceImplPackage) { 91 | this.serviceImplPackage = serviceImplPackage; 92 | } 93 | public String getServiceImplName() { 94 | return serviceImplName; 95 | } 96 | public void setServiceImplName(String serviceImplName) { 97 | this.serviceImplName = serviceImplName; 98 | } 99 | public String getEntityPackage() { 100 | return entityPackage; 101 | } 102 | public void setEntityPackage(String entityPackage) { 103 | this.entityPackage = entityPackage; 104 | } 105 | public String getEntityName() { 106 | return entityName; 107 | } 108 | public void setEntityName(String entityName) { 109 | this.entityName = entityName; 110 | } 111 | public String getMapPackage() { 112 | return mapPackage; 113 | } 114 | public void setMapPackage(String mapPackage) { 115 | this.mapPackage = mapPackage; 116 | } 117 | public String getMapName() { 118 | return mapName; 119 | } 120 | public void setMapName(String mapName) { 121 | this.mapName = mapName; 122 | } 123 | public String getAssistPackage() { 124 | return assistPackage; 125 | } 126 | public void setAssistPackage(String assistPackage) { 127 | this.assistPackage = assistPackage; 128 | } 129 | public String getAssistName() { 130 | return assistName; 131 | } 132 | public void setAssistName(String assistName) { 133 | this.assistName = assistName; 134 | } 135 | public String getConfigPackage() { 136 | return configPackage; 137 | } 138 | public void setConfigPackage(String configPackage) { 139 | this.configPackage = configPackage; 140 | } 141 | public String getMyUtilPackage() { 142 | return myUtilPackage; 143 | } 144 | public void setMyUtilPackage(String myUtilPackage) { 145 | this.myUtilPackage = myUtilPackage; 146 | } 147 | public String getMyUtilName() { 148 | return myUtilName; 149 | } 150 | public void setMyUtilName(String myUtilName) { 151 | this.myUtilName = myUtilName; 152 | } 153 | 154 | public boolean isAssist() { 155 | return isAssist; 156 | } 157 | public void setAssist(boolean isAssist) { 158 | this.isAssist = isAssist; 159 | } 160 | public boolean isConfig() { 161 | return isConfig; 162 | } 163 | public void setConfig(boolean isConfig) { 164 | this.isConfig = isConfig; 165 | } 166 | public boolean isMyUtil() { 167 | return isMyUtil; 168 | } 169 | public void setMyUtil(boolean isMyUtil) { 170 | this.isMyUtil = isMyUtil; 171 | } 172 | 173 | 174 | public boolean isService() { 175 | return isService; 176 | } 177 | public void setService(boolean isService) { 178 | this.isService = isService; 179 | } 180 | 181 | public boolean isSpringAnno() { 182 | return isSpringAnno; 183 | } 184 | public void setSpringAnno(boolean isSpringAnno) { 185 | this.isSpringAnno = isSpringAnno; 186 | } 187 | public HistoryConfig() { 188 | super(); 189 | } 190 | public HistoryConfig(String projectPath, String rootDir, String daoPackage, String daoName, String servicePackage, 191 | String serviceName, String serviceImplPackage, String serviceImplName, String entityPackage, 192 | String entityName, String mapPackage, String mapName,String updateMapper, String assistPackage, String assistName, 193 | String configPackage, String configName, String myUtilPackage, String myUtilName, boolean isService,boolean isSpringAnno, 194 | boolean isAssist, boolean isConfig, boolean isMyUtil) { 195 | super(); 196 | this.projectPath = projectPath; 197 | this.rootDir = rootDir; 198 | this.daoPackage = daoPackage; 199 | this.daoName = daoName; 200 | this.servicePackage = servicePackage; 201 | this.serviceName = serviceName; 202 | this.serviceImplPackage = serviceImplPackage; 203 | this.serviceImplName = serviceImplName; 204 | this.entityPackage = entityPackage; 205 | this.entityName = entityName; 206 | this.mapPackage = mapPackage; 207 | this.mapName = mapName; 208 | this.updateMapper=updateMapper; 209 | this.assistPackage = assistPackage; 210 | this.assistName = assistName; 211 | this.configPackage = configPackage; 212 | this.configName = configName; 213 | this.myUtilPackage = myUtilPackage; 214 | this.myUtilName = myUtilName; 215 | this.isService = isService; 216 | this.isSpringAnno = isSpringAnno; 217 | this.isAssist = isAssist; 218 | this.isConfig = isConfig; 219 | this.isMyUtil = isMyUtil; 220 | } 221 | 222 | 223 | 224 | } 225 | -------------------------------------------------------------------------------- /src/pers/cmeu/controller/HistoryConfigController.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.controller; 2 | 3 | import java.net.URL; 4 | import java.util.List; 5 | import java.util.ResourceBundle; 6 | 7 | import org.apache.log4j.Logger; 8 | 9 | import javafx.collections.FXCollections; 10 | import javafx.collections.ObservableList; 11 | import javafx.event.ActionEvent; 12 | import javafx.fxml.FXML; 13 | import javafx.scene.control.Button; 14 | import javafx.scene.control.CheckBox; 15 | import javafx.scene.control.Label; 16 | import javafx.scene.control.TableColumn; 17 | import javafx.scene.control.TableView; 18 | import javafx.scene.control.cell.PropertyValueFactory; 19 | import javafx.scene.layout.HBox; 20 | import pers.cmeu.common.ConfigUtil; 21 | import pers.cmeu.models.ClassConfig; 22 | import pers.cmeu.models.HistoryConfig; 23 | import pers.cmeu.models.HistoryConfigCVF; 24 | import pers.cmeu.view.AlertUtil; 25 | 26 | public class HistoryConfigController extends BaseController { 27 | private Logger log = Logger.getLogger(HistoryConfigController.class.getName()); 28 | private IndexController indexController; 29 | 30 | @FXML 31 | private TableView tblConfigInfo; 32 | 33 | @FXML 34 | private CheckBox chkGetAndSet; 35 | @FXML 36 | private CheckBox chkConstruct; 37 | @FXML 38 | private CheckBox chkConstructAll; 39 | @FXML 40 | private CheckBox chkUnlineCamel; 41 | @FXML 42 | private CheckBox chkSerializable; 43 | @FXML 44 | private CheckBox chkCreateJDBCtype; 45 | 46 | @FXML 47 | private Button btnSaveClassConfig; 48 | 49 | @Override 50 | public void initialize(URL location, ResourceBundle resources) { 51 | log.debug("初始化配置信息窗口...."); 52 | tblConfigInfo.setPlaceholder(new Label("尚未添加任何配置信息;可以通过首页保存配置新增")); 53 | log.debug("初始化配置信息窗口完成!"); 54 | initTable(); 55 | } 56 | 57 | /** 58 | * 初始化配置table 59 | */ 60 | public void initTable() { 61 | log.debug("初始化配置信息表格..."); 62 | ObservableList data = null; 63 | try { 64 | data = getHistoryConfig(); 65 | } catch (Exception e) { 66 | tblConfigInfo.setPlaceholder(new Label("加载配置文件失败!失败原因:\r\n" + e.getMessage())); 67 | log.error("初始化配置信息表格出现异常!!!" + e); 68 | } 69 | 70 | TableColumn tdInfo = new TableColumn("配置信息文件名"); 71 | TableColumn tdOperation = new TableColumn("操作"); 72 | 73 | tdInfo.setPrefWidth(320); 74 | tdInfo.setCellValueFactory(new PropertyValueFactory<>("name")); 75 | 76 | tdOperation.setPrefWidth(198); 77 | tdOperation.setCellValueFactory(new PropertyValueFactory<>("hbox")); 78 | 79 | tblConfigInfo.getColumns().add(tdInfo); 80 | tblConfigInfo.getColumns().add(tdOperation); 81 | 82 | tblConfigInfo.setItems(data); 83 | log.debug("初始化配置信息完成!"); 84 | 85 | try { 86 | log.debug("初始化创建类配置信息..."); 87 | // 从配置文件中获取配置信息并应用 88 | ClassConfig classConfig = ConfigUtil.getClassConfig(); 89 | chkGetAndSet.setSelected(classConfig.isGetAndSet()); 90 | chkConstruct.setSelected(classConfig.isConstruct()); 91 | chkConstructAll.setSelected(classConfig.isConstructAll()); 92 | chkUnlineCamel.setSelected(classConfig.isUnlineCamel()); 93 | chkSerializable.setSelected(classConfig.isSeriz()); 94 | chkCreateJDBCtype.setSelected(classConfig.isCreateJDBCType()); 95 | log.debug("初始化创建类配置信息-->成功!"); 96 | } catch (Exception e) { 97 | log.error("初始化创建类配置信息-->失败:" + e); 98 | } 99 | 100 | } 101 | 102 | /** 103 | * 保存实体类配置信息 104 | * 105 | * @param event 106 | */ 107 | public void saveClassConfig(ActionEvent event) { 108 | log.info("执行实体类配置..."); 109 | boolean getAndSet = chkGetAndSet.isSelected(); 110 | boolean construct = chkConstruct.isSelected(); 111 | boolean constructAll = chkConstructAll.isSelected(); 112 | boolean unlineCamel = chkUnlineCamel.isSelected(); 113 | boolean serializable = chkSerializable.isSelected(); 114 | boolean createJDBCType = chkCreateJDBCtype.isSelected(); 115 | ClassConfig classConfig = new ClassConfig(getAndSet, construct, constructAll, unlineCamel, serializable, 116 | createJDBCType); 117 | try { 118 | int result = ConfigUtil.saveClassConfig(classConfig); 119 | if (result != 0) { 120 | AlertUtil.showInfoAlert("保存成功!"); 121 | } 122 | log.info("执行实体类配置-->成功:受影响:" + result); 123 | } catch (Exception e) { 124 | AlertUtil.showErrorAlert(e.toString()); 125 | log.error("执行实体类配置-->失败:" + e); 126 | } 127 | 128 | } 129 | 130 | /** 131 | * 获得配置文件Table 特别注意,条件添加的关系,加载与删除配置需要在这里面操作 132 | * 133 | * @return 134 | * @throws Exception 135 | */ 136 | public ObservableList getHistoryConfig() throws Exception { 137 | ObservableList result = FXCollections.observableArrayList(); 138 | List item = ConfigUtil.getHistoryConfigs(); 139 | // 遍历配置文件并加载到工厂里面,同时给操作配置文件的加载与删除 140 | 141 | for (HistoryConfig tmp : item) { 142 | String configName = tmp.getHistoryConfigName(); 143 | HBox box = new HBox(); 144 | box.setSpacing(15); 145 | Button button = new Button("加载配置"); 146 | button.setUserData(tmp.getHistoryConfigName()); 147 | button.setOnAction(Event -> { 148 | try { 149 | log.debug("执行将配置信息加载到首页..."); 150 | indexController.loadIndexConfigInfo(button.getUserData().toString()); 151 | closeDialogStage(); 152 | log.debug("将配置信息加载到首页成功!"); 153 | } catch (Exception e) { 154 | AlertUtil.showErrorAlert("加载配置失败!失败原因:\r\n" + e.getMessage()); 155 | log.error("将配置信息加载到首页失败!!!" + e); 156 | } 157 | }); 158 | Button button1 = new Button("删除配置"); 159 | button1.setUserData(tmp.getHistoryConfigName()); 160 | button1.setOnAction(Event -> { 161 | if (AlertUtil.showConfirmAlert("确定删除吗?")) { 162 | try { 163 | log.debug("执行删除配置信息..."); 164 | ConfigUtil.deleteHistoryConfigByName(button1.getUserData().toString()); 165 | for (int i = 0; i < tblConfigInfo.getItems().size(); i++) { 166 | if (tblConfigInfo.getItems().get(i).getName().equals(button1.getUserData().toString())) { 167 | tblConfigInfo.getItems().remove(i); 168 | break; 169 | } 170 | } 171 | log.debug("执行删除配置完成!"); 172 | } catch (Exception e) { 173 | AlertUtil.showErrorAlert("删除失败!失败原因:\r\n" + e.getMessage()); 174 | log.error("执行删除配置失败!!!" + e); 175 | } 176 | } 177 | }); 178 | box.getChildren().addAll(button, button1); 179 | 180 | HistoryConfigCVF cvf = new HistoryConfigCVF(configName, box); 181 | result.add(cvf); 182 | } 183 | 184 | return result; 185 | } 186 | 187 | // -------------------get/set------------------------------ 188 | 189 | public IndexController getIndexController() { 190 | return indexController; 191 | } 192 | 193 | public void setIndexController(IndexController indexController) { 194 | this.indexController = indexController; 195 | } 196 | 197 | public TableView getTblConfigInfo() { 198 | return tblConfigInfo; 199 | } 200 | 201 | public void setTblConfigInfo(TableView tblConfigInfo) { 202 | this.tblConfigInfo = tblConfigInfo; 203 | } 204 | 205 | } 206 | -------------------------------------------------------------------------------- /src/pers/resource/FXML/SetAttribute.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 119 | 120 | 121 | 122 | 123 | 124 | 129 | 134 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 168 | 183 | 198 | 210 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 235 | 240 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/ConfigUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.io.File; 4 | import java.io.FileOutputStream; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.sql.Connection; 8 | import java.sql.DriverManager; 9 | import java.sql.ResultSet; 10 | import java.sql.Statement; 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | import com.alibaba.fastjson.JSON; 15 | 16 | import pers.cmeu.models.ClassConfig; 17 | import pers.cmeu.models.DatabaseConfig; 18 | import pers.cmeu.models.HistoryConfig; 19 | 20 | public class ConfigUtil { 21 | private static final String CONFIG_DIR = "config"; 22 | private static final String CONFIG_FILE = "/ConfigDB.db"; 23 | private static final String DRIVER = "org.sqlite.JDBC"; 24 | private static final String DB_URL = "jdbc:sqlite:./config/ConfigDB.db"; 25 | 26 | /** 27 | * 获得数据库连接 28 | * 29 | * @return 30 | * @throws Exception 31 | */ 32 | public static Connection getConnection() throws Exception { 33 | Class.forName(DRIVER); 34 | Connection conn = DriverManager.getConnection(DB_URL); 35 | return conn; 36 | } 37 | 38 | /** 39 | * 查看是否存在配置文件数据库,如果不存在则创建 40 | * 41 | * @throws IOException 42 | */ 43 | public static void existsConfigDB() throws IOException { 44 | File path = new File(CONFIG_DIR); 45 | 46 | if (!path.exists()) { 47 | path.mkdir(); 48 | } 49 | File file = new File(CONFIG_DIR + CONFIG_FILE); 50 | if (!file.exists()) { 51 | InputStream fis = null; 52 | FileOutputStream fos = null; 53 | try { 54 | fis = Thread.currentThread().getContextClassLoader() 55 | .getResourceAsStream("pers/resource/config/ConfigDB.db"); 56 | fos = new FileOutputStream(CONFIG_DIR + CONFIG_FILE); 57 | byte[] buffer = new byte[1024]; 58 | int byteread = 0; 59 | while ((byteread = fis.read(buffer)) != -1) { 60 | fos.write(buffer, 0, byteread); 61 | } 62 | } finally { 63 | if (fis != null) 64 | fis.close(); 65 | if (fos != null) 66 | fos.close(); 67 | } 68 | 69 | } 70 | } 71 | 72 | /** 73 | * 保存数据库连接 74 | * 75 | * @param connName 76 | * @param dbConfig 77 | * @throws Exception 78 | */ 79 | public static void saveDatabaseConfig(String connName, DatabaseConfig dbConfig) throws Exception { 80 | Connection conn = null; 81 | Statement stat = null; 82 | ResultSet rs = null; 83 | try { 84 | conn = getConnection(); 85 | stat = conn.createStatement(); 86 | ResultSet rs1 = stat.executeQuery(String.format("select * from DBSet where name ='%s'", connName)); 87 | if (rs1.next()) { 88 | throw new RuntimeException("该连接名称已经存在!请使用其它名字..."); 89 | } 90 | String jsonStr = JSON.toJSONString(dbConfig); 91 | String sql = String.format("insert into DBSet values('%s', '%s')", connName, jsonStr); 92 | stat.executeUpdate(sql); 93 | } finally { 94 | if (rs != null) 95 | rs.close(); 96 | if (stat != null) 97 | stat.close(); 98 | if (conn != null) 99 | conn.close(); 100 | } 101 | } 102 | 103 | /** 104 | * 更新数据库连接 105 | * 106 | * @param dbConfig 107 | * @throws Exception 108 | */ 109 | public static void updateDatabaseConfig(DatabaseConfig dbConfig) throws Exception { 110 | Connection conn = null; 111 | Statement stat = null; 112 | ResultSet rs = null; 113 | try { 114 | conn = getConnection(); 115 | stat = conn.createStatement(); 116 | String jsonStr = JSON.toJSONString(dbConfig); 117 | String sql = String.format("update DBSet set value='%s' where name='%s'", jsonStr, dbConfig.getConnName()); 118 | stat.executeUpdate(sql); 119 | } finally { 120 | if (rs != null) 121 | rs.close(); 122 | if (stat != null) 123 | stat.close(); 124 | if (conn != null) 125 | conn.close(); 126 | } 127 | } 128 | 129 | /** 130 | * 获得数据库连接 131 | * 132 | * @return 133 | * @throws Exception 134 | */ 135 | public static List getDatabaseConfig() throws Exception { 136 | Connection conn = null; 137 | Statement stat = null; 138 | ResultSet rs = null; 139 | try { 140 | conn = getConnection(); 141 | stat = conn.createStatement(); 142 | rs = stat.executeQuery("select * from DBSet"); 143 | List result = new ArrayList(); 144 | while (rs.next()) { 145 | String name = rs.getString("name"); 146 | String value = rs.getString("value"); 147 | DatabaseConfig databaseConfig = JSON.parseObject(value, DatabaseConfig.class); 148 | databaseConfig.setConnName(name); 149 | result.add(databaseConfig); 150 | } 151 | 152 | return result; 153 | } finally { 154 | if (rs != null) 155 | rs.close(); 156 | if (stat != null) 157 | stat.close(); 158 | if (conn != null) 159 | conn.close(); 160 | } 161 | } 162 | 163 | /** 164 | * 删除数据库连接 165 | * 166 | * @param name 167 | * @throws Exception 168 | */ 169 | public static void deleteDatabaseConfig(String name) throws Exception { 170 | Connection conn = null; 171 | Statement stat = null; 172 | ResultSet rs = null; 173 | try { 174 | conn = getConnection(); 175 | stat = conn.createStatement(); 176 | String sql = String.format("delete from DBSet where name='%s'", name); 177 | stat.executeUpdate(sql); 178 | } finally { 179 | if (rs != null) 180 | rs.close(); 181 | if (stat != null) 182 | stat.close(); 183 | if (conn != null) 184 | conn.close(); 185 | } 186 | } 187 | 188 | /** 189 | * 保存配置文件信息 190 | * 191 | * @param Config 192 | * @throws Exception 193 | */ 194 | public static void saveHistoryConfig(HistoryConfig config) throws Exception { 195 | Connection conn = null; 196 | Statement stat = null; 197 | ResultSet rs = null; 198 | try { 199 | conn = getConnection(); 200 | stat = conn.createStatement(); 201 | ResultSet rs1 = stat.executeQuery( 202 | String.format("select * from HistoryConfig where name ='%s'", config.getHistoryConfigName())); 203 | if (rs1.next()) { 204 | throw new RuntimeException("该配置名称已经存在!请使用其它名字..."); 205 | } 206 | 207 | String jsonStr = JSON.toJSONString(config); 208 | String sql = String.format("insert into HistoryConfig values('%s', '%s')", config.getHistoryConfigName(), 209 | jsonStr); 210 | stat.executeUpdate(sql); 211 | } finally { 212 | if (rs != null) 213 | rs.close(); 214 | if (stat != null) 215 | stat.close(); 216 | if (conn != null) 217 | conn.close(); 218 | } 219 | } 220 | 221 | /** 222 | * 获得配置文件信息 223 | * 224 | * @return 225 | * @throws Exception 226 | */ 227 | public static List getHistoryConfigs() throws Exception { 228 | Connection conn = null; 229 | Statement stat = null; 230 | ResultSet rs = null; 231 | try { 232 | conn = getConnection(); 233 | stat = conn.createStatement(); 234 | String sql = "select * from HistoryConfig "; 235 | rs = stat.executeQuery(sql); 236 | List configs = new ArrayList<>(); 237 | while (rs.next()) { 238 | String value = rs.getString("value"); 239 | configs.add(JSON.parseObject(value, HistoryConfig.class)); 240 | } 241 | return configs; 242 | } finally { 243 | if (rs != null) 244 | rs.close(); 245 | if (stat != null) 246 | stat.close(); 247 | if (conn != null) 248 | conn.close(); 249 | } 250 | } 251 | 252 | /** 253 | * 通过名字找到配置信息 254 | * 255 | * @param name 256 | * @return 257 | * @throws Exception 258 | */ 259 | public static HistoryConfig getHistoryConfigByName(String name) throws Exception { 260 | Connection conn = null; 261 | Statement stat = null; 262 | ResultSet rs = null; 263 | try { 264 | conn = getConnection(); 265 | stat = conn.createStatement(); 266 | String sql = String.format("select * from HistoryConfig where name ='%s'", name); 267 | rs = stat.executeQuery(sql); 268 | HistoryConfig config = null; 269 | while (rs.next()) { 270 | String value = rs.getString("value"); 271 | config = JSON.parseObject(value, HistoryConfig.class); 272 | } 273 | return config; 274 | } finally { 275 | if (rs != null) 276 | rs.close(); 277 | if (stat != null) 278 | stat.close(); 279 | if (conn != null) 280 | conn.close(); 281 | } 282 | } 283 | 284 | /** 285 | * 删除配置文件信息 286 | * 287 | * @param name 288 | * @return 289 | * @throws Exception 290 | */ 291 | public static int deleteHistoryConfigByName(String name) throws Exception { 292 | Connection conn = null; 293 | Statement stat = null; 294 | try { 295 | conn = getConnection(); 296 | stat = conn.createStatement(); 297 | String sql = String.format("DELETE FROM HistoryConfig where name='%s'", name); 298 | return stat.executeUpdate(sql); 299 | } finally { 300 | if (stat != null) 301 | stat.close(); 302 | if (conn != null) 303 | conn.close(); 304 | } 305 | } 306 | 307 | /** 308 | * 保存实体类配置文件信息 309 | * 310 | * @param Config 311 | * @throws Exception 312 | */ 313 | public static int saveClassConfig(ClassConfig config) throws Exception { 314 | Connection conn = null; 315 | Statement stat = null; 316 | ResultSet rs = null; 317 | try { 318 | conn = getConnection(); 319 | stat = conn.createStatement(); 320 | String jsonStr = JSON.toJSONString(config); 321 | String sql = String.format("replace into ClassConfig(name,value) values('classConfig', '%s')", jsonStr); 322 | int result = stat.executeUpdate(sql); 323 | return result; 324 | } finally { 325 | if (rs != null) 326 | rs.close(); 327 | if (stat != null) 328 | stat.close(); 329 | if (conn != null) 330 | conn.close(); 331 | } 332 | } 333 | 334 | /** 335 | * 获得实体类配置文件信息 336 | * 337 | * @return 338 | * @throws Exception 339 | */ 340 | public static ClassConfig getClassConfig() throws Exception { 341 | Connection conn = null; 342 | Statement stat = null; 343 | ResultSet rs = null; 344 | try { 345 | conn = getConnection(); 346 | stat = conn.createStatement(); 347 | String sql = String.format("select * from ClassConfig where name='classConfig'"); 348 | ResultSet resultSet = stat.executeQuery(sql); 349 | while (resultSet.next()) { 350 | ClassConfig result = JSON.parseObject(resultSet.getString("value"), ClassConfig.class); 351 | return result; 352 | } 353 | } finally { 354 | if (rs != null) 355 | rs.close(); 356 | if (stat != null) 357 | stat.close(); 358 | if (conn != null) 359 | conn.close(); 360 | } 361 | return null; 362 | } 363 | 364 | } 365 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/ServiceUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.util.List; 4 | 5 | public class ServiceUtil { 6 | private ServiceUtil() { 7 | } 8 | 9 | public static ServiceUtil getInstance() { 10 | return new ServiceUtil(); 11 | } 12 | 13 | /** 14 | * 获得service 15 | * 16 | * @param packageName 17 | * @param importSpaces 18 | * @param serviceName 19 | * @param entityName 20 | * @param idType 21 | * @param anyAssist 22 | * @param anyHasColl 23 | * @return 24 | */ 25 | public String getServiceString(String packageName, List importSpaces, String serviceName, String entityName, 26 | String idType, boolean anyAssist, boolean anyHasColl) { 27 | StringBuffer buffer = new StringBuffer(); 28 | buffer.append("package " + packageName + ";\r\n"); 29 | buffer.append(getImport(importSpaces)); 30 | buffer.append("public interface " + serviceName + "{\r\n"); 31 | buffer.append(getRowCount(entityName, anyAssist)); 32 | buffer.append(getSelectEntity(entityName, anyAssist)); 33 | if (anyHasColl) { 34 | buffer.append(getSelectEntityOfPaging(entityName, anyAssist)); 35 | } 36 | buffer.append(getSelectEntityByObj(entityName)); 37 | buffer.append(getSelectEntityById(entityName, idType)); 38 | buffer.append(getInsert(entityName)); 39 | buffer.append(getInsertNonEmpty(entityName)); 40 | buffer.append(getInsertBatch(entityName)); 41 | buffer.append(getDelete(entityName, idType, anyAssist)); 42 | buffer.append(getUpdate(entityName, anyAssist)); 43 | buffer.append(getUpdateNonEmpty(entityName, anyAssist)); 44 | buffer.append("}"); 45 | return buffer.toString(); 46 | } 47 | 48 | /** 49 | * 获得导入空间的字符串 50 | * 51 | * @param packages 52 | * @return 53 | */ 54 | private String getImport(List packages) { 55 | if (packages == null || packages.size() == 0) { 56 | return ""; 57 | } 58 | StringBuffer result = new StringBuffer(); 59 | for (String str : packages) { 60 | result.append("import " + str + ";\r\n"); 61 | } 62 | return result.toString(); 63 | } 64 | 65 | /** 66 | * 获得数据总行数 67 | * 68 | * @param daoName 69 | * @param anyAssist 70 | * @return 71 | */ 72 | private String getRowCount(String entityName, boolean anyAssist) { 73 | StringBuffer countStr = new StringBuffer(); 74 | countStr.append(" /**\r\n"); 75 | if (anyAssist) { 76 | countStr.append(" * 获得" + entityName + "数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null\r\n"); 77 | countStr.append(" * @param assist\r\n"); 78 | } else { 79 | countStr.append(" * 获得" + entityName + "数据的总行数\r\n"); 80 | } 81 | countStr.append(" * @return\r\n"); 82 | countStr.append(" */\r\n"); 83 | if (anyAssist) { 84 | countStr.append(" long get" + entityName + "RowCount(Assist assist);\r\n"); 85 | } else { 86 | countStr.append(" long get" + entityName + "RowCount();\r\n"); 87 | } 88 | return countStr.toString(); 89 | 90 | } 91 | 92 | /** 93 | * 获得查询语句 94 | * 95 | * @param entityName 96 | * @param anyAssist 97 | * @return 98 | */ 99 | private String getSelectEntity(String entityName, boolean anyAssist) { 100 | StringBuffer countStr = new StringBuffer(); 101 | countStr.append(" /**\r\n"); 102 | if (anyAssist) { 103 | countStr.append(" * 获得" + entityName + "数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null\r\n"); 104 | countStr.append(" * @param assist\r\n"); 105 | } else { 106 | countStr.append(" * 获得" + entityName + "数据集合\r\n"); 107 | } 108 | countStr.append(" * @return\r\n"); 109 | countStr.append(" */\r\n"); 110 | if (anyAssist) { 111 | countStr.append(" List<" + entityName + "> select" + entityName + "(Assist assist);\r\n"); 112 | } else { 113 | countStr.append(" List<" + entityName + "> select" + entityName + "();\r\n"); 114 | } 115 | return countStr.toString(); 116 | 117 | } 118 | 119 | /** 120 | * 获得需要分页的查询语句 121 | * 122 | * @param entityName 123 | * @param anyAssist 124 | * @return 125 | */ 126 | private String getSelectEntityOfPaging(String entityName, boolean anyAssist) { 127 | StringBuffer countStr = new StringBuffer(); 128 | countStr.append(" /**\r\n"); 129 | if (anyAssist) { 130 | countStr.append(" * 获得" + entityName 131 | + "数据集合,该方法为多表关联时保证分页的数据不缺失不重复,可以正常得到所有数据,如果非多表分页的情况建议使用不带ofPaging的方法,可以通过辅助工具Assist进行查询,如果没有条件则传入null\r\n"); 132 | countStr.append(" * @param assist\r\n"); 133 | } else { 134 | countStr.append( 135 | " * 获得" + entityName + "数据集合,该方法为多表关联时保证分页的数据不缺失不重复,可以正常得到所有数据,如果非多表分页的情况建议使用不带ofPaging的方法\r\n"); 136 | } 137 | countStr.append(" * @return\r\n"); 138 | countStr.append(" */\r\n"); 139 | if (anyAssist) { 140 | countStr.append(" List<" + entityName + "> select" + entityName + "OfPaging(Assist assist);\r\n"); 141 | } else { 142 | countStr.append(" List<" + entityName + "> select" + entityName + "OfPaging();\r\n"); 143 | } 144 | return countStr.toString(); 145 | } 146 | 147 | /** 148 | * 获得查询语句通过对象 149 | * 150 | * @param entityName 151 | * @return 152 | */ 153 | private String getSelectEntityByObj(String entityName) { 154 | StringBuffer countStr = new StringBuffer(); 155 | countStr.append(" /**\r\n"); 156 | countStr.append(" * 获得一个" + entityName + "对象,以参数" + entityName + "对象中不为空的属性作为条件进行查询\r\n"); 157 | countStr.append(" * @param obj\r\n"); 158 | countStr.append(" * @return\r\n"); 159 | countStr.append(" */\r\n"); 160 | countStr.append(" " + entityName + " select" + entityName + "ByObj(" + entityName + " obj);\r\n"); 161 | return countStr.toString(); 162 | } 163 | 164 | /** 165 | * 获得查询语句通过Id 166 | * 167 | * @param entityName 168 | * @param idType 169 | * @return 170 | */ 171 | private String getSelectEntityById(String entityName, String idType) { 172 | if (idType == null) { 173 | return ""; 174 | } 175 | StringBuffer countStr = new StringBuffer(); 176 | countStr.append(" /**\r\n"); 177 | countStr.append(" * 通过" + entityName + "的id获得" + entityName + "对象\r\n"); 178 | countStr.append(" * @param id\r\n"); 179 | countStr.append(" * @return\r\n"); 180 | countStr.append(" */\r\n"); 181 | countStr.append(" " + entityName + " select" + entityName + "ById(" + idType + " id);\r\n"); 182 | return countStr.toString(); 183 | } 184 | 185 | /** 186 | * 获得插入语句 187 | * 188 | * @param entityName 189 | * @return 190 | */ 191 | private String getInsert(String entityName) { 192 | StringBuffer countStr = new StringBuffer(); 193 | countStr.append(" /**\r\n"); 194 | countStr.append(" * 插入" + entityName + "到数据库,包括null值\r\n"); 195 | countStr.append(" * @param value\r\n"); 196 | countStr.append(" * @return\r\n"); 197 | countStr.append(" */\r\n"); 198 | countStr.append(" int insert" + entityName + "(" + entityName + " value);\r\n"); 199 | return countStr.toString(); 200 | } 201 | 202 | /** 203 | * 获得插入非空语句 204 | * 205 | * @param entityName 206 | * @return 207 | */ 208 | private String getInsertNonEmpty(String entityName) { 209 | StringBuffer countStr = new StringBuffer(); 210 | countStr.append(" /**\r\n"); 211 | countStr.append(" * 插入" + entityName + "中属性值不为null的数据到数据库\r\n"); 212 | countStr.append(" * @param value\r\n"); 213 | countStr.append(" * @return\r\n"); 214 | countStr.append(" */\r\n"); 215 | countStr.append(" int insertNonEmpty" + entityName + "(" + entityName + " value);\r\n"); 216 | return countStr.toString(); 217 | } 218 | 219 | /** 220 | * 获得批量插入语句 221 | * 222 | * @param entityName 223 | * @return 224 | */ 225 | private String getInsertBatch(String entityName) { 226 | StringBuffer countStr = new StringBuffer(); 227 | countStr.append(" /**\r\n"); 228 | countStr.append(" * 批量插入" + entityName + "到数据库\r\n"); 229 | countStr.append(" * @param value\r\n"); 230 | countStr.append(" * @return\r\n"); 231 | countStr.append(" */\r\n"); 232 | countStr.append(" int insert" + entityName + "ByBatch(List<" + entityName + "> value);\r\n"); 233 | return countStr.toString(); 234 | } 235 | 236 | /** 237 | * 创建删除语句 238 | * 239 | * @param entityName 240 | * @param idType 241 | * @return 242 | */ 243 | private String getDelete(String entityName, String idType, boolean anyAssist) { 244 | if (idType == null) { 245 | return ""; 246 | } 247 | StringBuffer countStr = new StringBuffer(); 248 | countStr.append(" /**\r\n"); 249 | countStr.append(" * 通过" + entityName + "的id删除" + entityName + "\r\n"); 250 | countStr.append(" * @param id\r\n"); 251 | countStr.append(" * @return\r\n"); 252 | countStr.append(" */\r\n"); 253 | 254 | if (anyAssist) { 255 | countStr.append(" int delete" + entityName + "ById(" + idType + " id);\r\n"); 256 | countStr.append(" /**\r\n"); 257 | countStr.append(" * 通过辅助工具Assist的条件删除" + entityName + "\r\n"); 258 | countStr.append(" * @param assist\r\n"); 259 | countStr.append(" * @return\r\n"); 260 | countStr.append(" */\r\n"); 261 | countStr.append(" int delete" + entityName + "(Assist assist);\r\n"); 262 | } else { 263 | countStr.append(" int delete" + entityName + "ById(" + idType + " id);\r\n"); 264 | } 265 | 266 | return countStr.toString(); 267 | } 268 | 269 | /** 270 | * 获得更新语句 271 | * 272 | * @param entityName 273 | * @param anyAssist 274 | * @return 275 | */ 276 | private String getUpdate(String entityName, boolean anyAssist) { 277 | StringBuffer countStr = new StringBuffer(); 278 | countStr.append(" /**\r\n"); 279 | countStr.append(" * 通过" + entityName + "的id更新" + entityName + "中的数据,包括null值\r\n"); 280 | countStr.append(" * @param enti\r\n"); 281 | countStr.append(" * @return\r\n"); 282 | countStr.append(" */\r\n"); 283 | 284 | if (anyAssist) { 285 | countStr.append(" int update" + entityName + "ById(" + entityName + " enti);\r\n "); 286 | countStr.append(" /**\r\n"); 287 | countStr.append(" * 通过辅助工具Assist的条件更新" + entityName + "中的数据,包括null值\r\n"); 288 | countStr.append(" * @param value\r\n"); 289 | countStr.append(" * @param assist\r\n"); 290 | countStr.append(" * @return\r\n"); 291 | countStr.append(" */\r\n"); 292 | countStr.append(" int update" + entityName + "(" + entityName + " value, Assist assist);\r\n"); 293 | } else { 294 | countStr.append(" int update" + entityName + "ById(" + entityName + " enti);\r\n"); 295 | } 296 | 297 | return countStr.toString(); 298 | } 299 | 300 | /** 301 | * 获得更新不为空的语句 302 | * 303 | * @param entityName 304 | * @param anyAssist 305 | * @return 306 | */ 307 | private String getUpdateNonEmpty(String entityName, boolean anyAssist) { 308 | StringBuffer countStr = new StringBuffer(); 309 | countStr.append(" /**\r\n"); 310 | countStr.append(" * 通过" + entityName + "的id更新" + entityName + "中属性不为null的数据\r\n"); 311 | countStr.append(" * @param enti\r\n"); 312 | countStr.append(" * @return\r\n"); 313 | countStr.append(" */\r\n"); 314 | 315 | if (anyAssist) { 316 | countStr.append(" int updateNonEmpty" + entityName + "ById(" + entityName + " enti);\r\n "); 317 | countStr.append(" /**\r\n"); 318 | countStr.append(" * 通过辅助工具Assist的条件更新" + entityName + "中属性不为null的数据\r\n"); 319 | countStr.append(" * @param value\r\n"); 320 | countStr.append(" * @param assist\r\n"); 321 | countStr.append(" * @return\r\n"); 322 | countStr.append(" */\r\n"); 323 | countStr.append(" int updateNonEmpty" + entityName + "(" + entityName + " value, Assist assist);\r\n"); 324 | } else { 325 | countStr.append(" int updateNonEmpty" + entityName + "ById(" + entityName + " enti);\r\n"); 326 | } 327 | 328 | return countStr.toString(); 329 | } 330 | 331 | } 332 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/DaoUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.util.List; 4 | 5 | public class DaoUtil { 6 | private DaoUtil() { 7 | }; 8 | 9 | public static DaoUtil getInstance() { 10 | return new DaoUtil(); 11 | } 12 | 13 | /** 14 | * 获得dao层字符串 15 | * 16 | * @param packageName 17 | * @param importSpaces 18 | * @param daoName 19 | * @param entityName 20 | * @param idType 21 | * @param anyAssist 22 | * @return 23 | */ 24 | public String getDaoString(String packageName, List importSpaces, String daoName, String entityName, 25 | String idType, boolean anyAssist, boolean anyHasColl) { 26 | StringBuffer buffer = new StringBuffer(); 27 | buffer.append("package " + packageName + ";\r\n"); 28 | buffer.append(getImport(importSpaces)); 29 | buffer.append("public interface " + daoName + "{\r\n"); 30 | buffer.append(getRowCount(entityName, anyAssist)); 31 | buffer.append(getSelectEntity(entityName, anyAssist)); 32 | if (anyHasColl) { 33 | buffer.append(getSelectEntityOfPaging(entityName, anyAssist)); 34 | } 35 | buffer.append(getSelectEntityByObj(entityName)); 36 | buffer.append(getSelectEntityById(entityName, idType)); 37 | buffer.append(getInsert(entityName)); 38 | buffer.append(getInsertNonEmpty(entityName)); 39 | buffer.append(getInsertBatch(entityName)); 40 | buffer.append(getDelete(entityName, idType, anyAssist)); 41 | buffer.append(getUpdate(entityName, anyAssist)); 42 | buffer.append(getUpdateNonEmpty(entityName, anyAssist)); 43 | buffer.append("}"); 44 | return buffer.toString(); 45 | } 46 | 47 | /** 48 | * 获得导入空间的字符串 49 | * 50 | * @param importSpaces 51 | * @return 52 | */ 53 | private String getImport(List importSpaces) { 54 | if (importSpaces == null || importSpaces.size() == 0) { 55 | return ""; 56 | } 57 | StringBuffer result = new StringBuffer(); 58 | for (String str : importSpaces) { 59 | result.append("import " + str + ";\r\n"); 60 | } 61 | return result.toString(); 62 | } 63 | 64 | /** 65 | * 获得数据总行数 66 | * 67 | * @param daoName 68 | * @param anyAssist 69 | * @return 70 | */ 71 | private String getRowCount(String entityName, boolean anyAssist) { 72 | StringBuffer countStr = new StringBuffer(); 73 | countStr.append(" /**\r\n"); 74 | if (anyAssist) { 75 | countStr.append(" * 获得" + entityName + "数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null\r\n"); 76 | countStr.append(" * @param assist\r\n"); 77 | } else { 78 | countStr.append(" * 获得" + entityName + "数据的总行数\r\n"); 79 | } 80 | countStr.append(" * @return\r\n"); 81 | countStr.append(" */\r\n"); 82 | if (anyAssist) { 83 | countStr.append(" long get" + entityName + "RowCount(Assist assist);\r\n"); 84 | } else { 85 | countStr.append(" long get" + entityName + "RowCount();\r\n"); 86 | } 87 | return countStr.toString(); 88 | } 89 | 90 | /** 91 | * 获得查询所有语句 92 | * 93 | * @param entityName 94 | * @param anyAssist 95 | * @return 96 | */ 97 | private String getSelectEntity(String entityName, boolean anyAssist) { 98 | StringBuffer countStr = new StringBuffer(); 99 | countStr.append(" /**\r\n"); 100 | if (anyAssist) { 101 | countStr.append(" * 获得" + entityName + "数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null\r\n"); 102 | countStr.append(" * @param assist\r\n"); 103 | } else { 104 | countStr.append(" * 获得" + entityName + "数据集合\r\n"); 105 | } 106 | countStr.append(" * @return\r\n"); 107 | countStr.append(" */\r\n"); 108 | if (anyAssist) { 109 | countStr.append(" List<" + entityName + "> select" + entityName + "(Assist assist);\r\n"); 110 | } else { 111 | countStr.append(" List<" + entityName + "> select" + entityName + "();\r\n"); 112 | } 113 | return countStr.toString(); 114 | } 115 | 116 | /** 117 | * 获得需要分页的查询语句 118 | * 119 | * @param entityName 120 | * @param anyAssist 121 | * @return 122 | */ 123 | private String getSelectEntityOfPaging(String entityName, boolean anyAssist) { 124 | StringBuffer countStr = new StringBuffer(); 125 | countStr.append(" /**\r\n"); 126 | if (anyAssist) { 127 | countStr.append(" * 获得" + entityName 128 | + "数据集合,该方法为多表关联时保证分页的数据不缺失不重复,可以正常得到所有数据,如果非多表分页的情况建议使用不带ofPaging的方法,可以通过辅助工具Assist进行查询,如果没有条件则传入null\r\n"); 129 | countStr.append(" * @param assist\r\n"); 130 | } else { 131 | countStr.append( 132 | " * 获得" + entityName + "数据集合,该方法为多表关联时保证分页的数据不缺失不重复,可以正常得到所有数据,如果非多表分页的情况建议使用不带ofPaging的方法\r\n"); 133 | } 134 | countStr.append(" * @return\r\n"); 135 | countStr.append(" */\r\n"); 136 | if (anyAssist) { 137 | countStr.append(" List<" + entityName + "> select" + entityName + "OfPaging(Assist assist);\r\n"); 138 | } else { 139 | countStr.append(" List<" + entityName + "> select" + entityName + "OfPaging();\r\n"); 140 | } 141 | return countStr.toString(); 142 | } 143 | 144 | /** 145 | * 获得通过对象查找一个对象 146 | * 147 | * @param entityName 148 | * @param idType 149 | * @return 150 | */ 151 | private String getSelectEntityByObj(String entityName) { 152 | StringBuffer countStr = new StringBuffer(); 153 | countStr.append(" /**\r\n"); 154 | countStr.append(" * 获得一个" + entityName + "对象,以参数" + entityName + "对象中不为空的属性作为条件进行查询\r\n"); 155 | countStr.append(" * @param obj\r\n"); 156 | countStr.append(" * @return\r\n"); 157 | countStr.append(" */\r\n"); 158 | countStr.append(" " + entityName + " select" + entityName + "ByObj(" + entityName + " obj);\r\n"); 159 | return countStr.toString(); 160 | } 161 | 162 | /** 163 | * 获得查询语句通过Id 164 | * 165 | * @param entityName 166 | * @param idType 167 | * @return 168 | */ 169 | private String getSelectEntityById(String entityName, String idType) { 170 | if (idType == null) { 171 | return ""; 172 | } 173 | StringBuffer countStr = new StringBuffer(); 174 | countStr.append(" /**\r\n"); 175 | countStr.append(" * 通过" + entityName + "的id获得" + entityName + "对象\r\n"); 176 | countStr.append(" * @param id\r\n"); 177 | countStr.append(" * @return\r\n"); 178 | countStr.append(" */\r\n"); 179 | countStr.append(" " + entityName + " select" + entityName + "ById(" + idType + " id);\r\n"); 180 | return countStr.toString(); 181 | } 182 | 183 | /** 184 | * 获得插入语句 185 | * 186 | * @param entityName 187 | * @return 188 | */ 189 | private String getInsert(String entityName) { 190 | StringBuffer countStr = new StringBuffer(); 191 | countStr.append(" /**\r\n"); 192 | countStr.append(" * 插入" + entityName + "到数据库,包括null值\r\n"); 193 | countStr.append(" * @param value\r\n"); 194 | countStr.append(" * @return\r\n"); 195 | countStr.append(" */\r\n"); 196 | countStr.append(" int insert" + entityName + "(" + entityName + " value);\r\n"); 197 | return countStr.toString(); 198 | } 199 | 200 | /** 201 | * 获得插入非空语句 202 | * 203 | * @param entityName 204 | * @return 205 | */ 206 | private String getInsertNonEmpty(String entityName) { 207 | StringBuffer countStr = new StringBuffer(); 208 | countStr.append(" /**\r\n"); 209 | countStr.append(" * 插入" + entityName + "中属性值不为null的数据到数据库\r\n"); 210 | countStr.append(" * @param value\r\n"); 211 | countStr.append(" * @return\r\n"); 212 | countStr.append(" */\r\n"); 213 | countStr.append(" int insertNonEmpty" + entityName + "(" + entityName + " value);\r\n"); 214 | return countStr.toString(); 215 | } 216 | 217 | /** 218 | * 获得插入非空语句 219 | * 220 | * @param entityName 221 | * @return 222 | */ 223 | private String getInsertBatch(String entityName) { 224 | StringBuffer countStr = new StringBuffer(); 225 | countStr.append(" /**\r\n"); 226 | countStr.append(" * 批量插入" + entityName + "到数据库,包括null值\r\n"); 227 | countStr.append(" * @param value\r\n"); 228 | countStr.append(" * @return\r\n"); 229 | countStr.append(" */\r\n"); 230 | countStr.append(" int insert" + entityName + "ByBatch(List<" + entityName + "> value);\r\n"); 231 | return countStr.toString(); 232 | } 233 | 234 | /** 235 | * 创建删除语句 236 | * 237 | * @param entityName 238 | * @param idType 239 | * @return 240 | */ 241 | private String getDelete(String entityName, String idType, boolean anyAssist) { 242 | if (idType == null) { 243 | return ""; 244 | } 245 | StringBuffer countStr = new StringBuffer(); 246 | countStr.append(" /**\r\n"); 247 | countStr.append(" * 通过" + entityName + "的id删除" + entityName + "\r\n"); 248 | countStr.append(" * @param id\r\n"); 249 | countStr.append(" * @return\r\n"); 250 | countStr.append(" */\r\n"); 251 | 252 | if (anyAssist) { 253 | countStr.append(" int delete" + entityName + "ById(" + idType + " id);\r\n"); 254 | countStr.append(" /**\r\n"); 255 | countStr.append(" * 通过辅助工具Assist的条件删除" + entityName + "\r\n"); 256 | countStr.append(" * @param assist\r\n"); 257 | countStr.append(" * @return\r\n"); 258 | countStr.append(" */\r\n"); 259 | countStr.append(" int delete" + entityName + "(Assist assist);\r\n"); 260 | } else { 261 | countStr.append(" int delete" + entityName + "ById(" + idType + " id);\r\n"); 262 | } 263 | 264 | return countStr.toString(); 265 | } 266 | 267 | /** 268 | * 获得更新语句 269 | * 270 | * @param entityName 271 | * @param anyAssist 272 | * @return 273 | */ 274 | private String getUpdate(String entityName, boolean anyAssist) { 275 | StringBuffer countStr = new StringBuffer(); 276 | countStr.append(" /**\r\n"); 277 | countStr.append(" * 通过" + entityName + "的id更新" + entityName + "中的数据,包括null值\r\n"); 278 | countStr.append(" * @param enti\r\n"); 279 | countStr.append(" * @return\r\n"); 280 | countStr.append(" */\r\n"); 281 | 282 | if (anyAssist) { 283 | countStr.append(" int update" + entityName + "ById(" + entityName + " enti);\r\n "); 284 | countStr.append(" /**\r\n"); 285 | countStr.append(" * 通过辅助工具Assist的条件更新" + entityName + "中的数据,包括null值\r\n"); 286 | countStr.append(" * @param value\r\n"); 287 | countStr.append(" * @param assist\r\n"); 288 | countStr.append(" * @return\r\n"); 289 | countStr.append(" */\r\n"); 290 | countStr.append(" int update" + entityName + "(@Param(\"enti\") " + entityName 291 | + " value, @Param(\"assist\") Assist assist);\r\n"); 292 | } else { 293 | countStr.append(" int update" + entityName + "ById(" + entityName + " enti);\r\n"); 294 | } 295 | 296 | return countStr.toString(); 297 | } 298 | 299 | /** 300 | * 获得更新不为空的语句 301 | * 302 | * @param entityName 303 | * @param anyAssist 304 | * @return 305 | */ 306 | private String getUpdateNonEmpty(String entityName, boolean anyAssist) { 307 | StringBuffer countStr = new StringBuffer(); 308 | countStr.append(" /**\r\n"); 309 | countStr.append(" * 通过" + entityName + "的id更新" + entityName + "中属性不为null的数据\r\n"); 310 | countStr.append(" * @param enti\r\n"); 311 | countStr.append(" * @return\r\n"); 312 | countStr.append(" */\r\n"); 313 | 314 | if (anyAssist) { 315 | countStr.append(" int updateNonEmpty" + entityName + "ById(" + entityName + " enti);\r\n "); 316 | countStr.append(" /**\r\n"); 317 | countStr.append(" * 通过辅助工具Assist的条件更新" + entityName + "中属性不为null的数据\r\n"); 318 | countStr.append(" * @param value\r\n"); 319 | countStr.append(" * @param assist\r\n"); 320 | countStr.append(" * @return\r\n"); 321 | countStr.append(" */\r\n"); 322 | countStr.append(" int updateNonEmpty" + entityName + "(@Param(\"enti\") " + entityName 323 | + " value, @Param(\"assist\") Assist assist);\r\n"); 324 | } else { 325 | countStr.append(" int updateNonEmpty" + entityName + "ById(" + entityName + " enti);\r\n"); 326 | } 327 | 328 | return countStr.toString(); 329 | 330 | } 331 | 332 | } 333 | -------------------------------------------------------------------------------- /src/pers/cmeu/common/ServiceImplUtil.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.common; 2 | 3 | import java.util.List; 4 | 5 | public class ServiceImplUtil { 6 | private ServiceImplUtil() { 7 | } 8 | 9 | public static ServiceImplUtil getInstance() { 10 | return new ServiceImplUtil(); 11 | } 12 | 13 | public String getServiceImplString(String packageName, List importSpaces, String daoName, 14 | String serviceName, String serviceImplName, String entityName, String idType, boolean anyAssist, 15 | boolean anyHasColl, boolean anySpringAnno) { 16 | StringBuffer buffer = new StringBuffer(); 17 | buffer.append("package " + packageName + ";\r\n"); 18 | buffer.append(getImport(importSpaces)); 19 | if (anySpringAnno) { 20 | buffer.append( 21 | "import org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.stereotype.Service;\r\n"); 22 | buffer.append("@Service\r\n"); 23 | } 24 | buffer.append("public class " + serviceImplName + " implements " + serviceName + "{\r\n"); 25 | if (anySpringAnno) { 26 | buffer.append(" @Autowired\r\n"); 27 | } 28 | buffer.append(" private " + daoName + " " + StrUtil.fristToLoCase(daoName) + ";\r\n"); 29 | buffer.append(getRowCount(StrUtil.fristToLoCase(daoName), entityName, anyAssist)); 30 | buffer.append(getSelectEntity(StrUtil.fristToLoCase(daoName), entityName, anyAssist)); 31 | if (anyHasColl) { 32 | buffer.append(getSelectEntityOfPaging(StrUtil.fristToLoCase(daoName), entityName, anyAssist)); 33 | } 34 | buffer.append(getSelectEntityByObj(StrUtil.fristToLoCase(daoName), entityName)); 35 | buffer.append(getSelectEntityById(StrUtil.fristToLoCase(daoName), entityName, idType)); 36 | buffer.append(getInsert(StrUtil.fristToLoCase(daoName), entityName)); 37 | buffer.append(getInsertNonEmpty(StrUtil.fristToLoCase(daoName), entityName)); 38 | buffer.append(getInsertBatch(StrUtil.fristToLoCase(daoName), entityName)); 39 | buffer.append(getDelete(StrUtil.fristToLoCase(daoName), entityName, idType, anyAssist)); 40 | buffer.append(getUpdate(StrUtil.fristToLoCase(daoName), entityName, anyAssist)); 41 | buffer.append(getUpdateNonEmpty(StrUtil.fristToLoCase(daoName), entityName, anyAssist)); 42 | buffer.append("\r\n public " + daoName + " get" + daoName + "() {\r\n"); 43 | buffer.append(" return this." + StrUtil.fristToLoCase(daoName) + ";\r\n }\r\n\r\n"); 44 | buffer.append( 45 | " public void set" + daoName + "(" + daoName + " " + StrUtil.fristToLoCase(daoName) + ") {\r\n"); 46 | buffer.append(" this." + StrUtil.fristToLoCase(daoName) + " = " + StrUtil.fristToLoCase(daoName) 47 | + ";\r\n }\r\n\r\n"); 48 | buffer.append("}"); 49 | return buffer.toString(); 50 | } 51 | 52 | /** 53 | * 获得导入空间的字符串 54 | * 55 | * @param packages 56 | * @return 57 | */ 58 | private String getImport(List packages) { 59 | if (packages == null || packages.size() == 0) { 60 | return ""; 61 | } 62 | StringBuffer result = new StringBuffer(); 63 | for (String str : packages) { 64 | result.append("import " + str + ";\r\n"); 65 | } 66 | return result.toString(); 67 | } 68 | 69 | /** 70 | * 获得数据总行数 71 | * 72 | * @param daoName 73 | * @param anyAssist 74 | * @return 75 | */ 76 | private String getRowCount(String daoName, String entityName, boolean anyAssist) { 77 | StringBuffer buffer = new StringBuffer(); 78 | if (anyAssist) { 79 | buffer.append(" @Override\r\n public long get" + entityName + "RowCount(Assist assist){\r\n"); 80 | buffer.append(" return " + daoName + ".get" + entityName + "RowCount(assist);\r\n"); 81 | buffer.append(" }\r\n"); 82 | } else { 83 | buffer.append(" @Override\r\n public long get" + entityName + "RowCount(){\r\n"); 84 | buffer.append(" return " + daoName + ".get" + entityName + "RowCount();\r\n"); 85 | buffer.append(" }\r\n"); 86 | } 87 | return buffer.toString(); 88 | } 89 | 90 | /** 91 | * 获得查询语句 92 | * 93 | * @param entityName 94 | * @param anyAssist 95 | * @return 96 | */ 97 | private String getSelectEntity(String daoName, String entityName, boolean anyAssist) { 98 | StringBuffer buffer = new StringBuffer(); 99 | if (anyAssist) { 100 | buffer.append(" @Override\r\n public List<" + entityName + "> select" + entityName 101 | + "(Assist assist){\r\n"); 102 | buffer.append(" return " + daoName + ".select" + entityName + "(assist);\r\n"); 103 | buffer.append(" }\r\n"); 104 | } else { 105 | buffer.append(" @Override\r\n public List<" + entityName + "> select" + entityName + "(){\r\n"); 106 | buffer.append(" return " + daoName + ".select" + entityName + "();\r\n"); 107 | buffer.append(" }\r\n"); 108 | } 109 | return buffer.toString(); 110 | } 111 | 112 | /** 113 | * 获得需要分页的查询语句 114 | * 115 | * @param entityName 116 | * @param anyAssist 117 | * @return 118 | */ 119 | private String getSelectEntityOfPaging(String daoName, String entityName, boolean anyAssist) { 120 | StringBuffer buffer = new StringBuffer(); 121 | if (anyAssist) { 122 | buffer.append(" @Override\r\n public List<" + entityName + "> select" + entityName 123 | + "OfPaging(Assist assist){\r\n"); 124 | buffer.append(" return " + daoName + ".select" + entityName + "OfPaging(assist);\r\n"); 125 | buffer.append(" }\r\n"); 126 | } else { 127 | buffer.append( 128 | " @Override\r\n public List<" + entityName + "> select" + entityName + "OfPaging(){\r\n"); 129 | buffer.append(" return " + daoName + ".select" + entityName + "OfPaging();\r\n"); 130 | buffer.append(" }\r\n"); 131 | } 132 | return buffer.toString(); 133 | } 134 | 135 | /** 136 | * 获得查询语句通过Id 137 | * 138 | * @param entityName 139 | * @param idType 140 | * @return 141 | */ 142 | private String getSelectEntityByObj(String daoName, String entityName) { 143 | StringBuffer buffer = new StringBuffer(); 144 | buffer.append(" @Override\r\n public " + entityName + " select" + entityName + "ByObj(" + entityName 145 | + " obj){\r\n"); 146 | buffer.append(" return " + daoName + ".select" + entityName + "ByObj(obj);\r\n"); 147 | buffer.append(" }\r\n"); 148 | return buffer.toString(); 149 | } 150 | 151 | /** 152 | * 获得查询语句通过Id 153 | * 154 | * @param entityName 155 | * @param idType 156 | * @return 157 | */ 158 | private String getSelectEntityById(String daoName, String entityName, String idType) { 159 | if (idType == null) { 160 | return ""; 161 | } 162 | StringBuffer buffer = new StringBuffer(); 163 | buffer.append( 164 | " @Override\r\n public " + entityName + " select" + entityName + "ById(" + idType + " id){\r\n"); 165 | buffer.append(" return " + daoName + ".select" + entityName + "ById(id);\r\n"); 166 | buffer.append(" }\r\n"); 167 | return buffer.toString(); 168 | } 169 | 170 | /** 171 | * 获得插入语句 172 | * 173 | * @param entityName 174 | * @return 175 | */ 176 | private String getInsert(String daoName, String entityName) { 177 | StringBuffer buffer = new StringBuffer(); 178 | buffer.append(" @Override\r\n public int insert" + entityName + "(" + entityName + " value){\r\n"); 179 | buffer.append(" return " + daoName + ".insert" + entityName + "(value);\r\n"); 180 | buffer.append(" }\r\n"); 181 | return buffer.toString(); 182 | } 183 | 184 | /** 185 | * 获得插入非空语句 186 | * 187 | * @param entityName 188 | * @return 189 | */ 190 | private String getInsertNonEmpty(String daoName, String entityName) { 191 | StringBuffer buffer = new StringBuffer(); 192 | buffer.append( 193 | " @Override\r\n public int insertNonEmpty" + entityName + "(" + entityName + " value){\r\n"); 194 | buffer.append(" return " + daoName + ".insertNonEmpty" + entityName + "(value);\r\n"); 195 | buffer.append(" }\r\n"); 196 | return buffer.toString(); 197 | } 198 | 199 | /** 200 | * 获得批量插入语句 201 | * 202 | * @param entityName 203 | * @return 204 | */ 205 | private String getInsertBatch(String daoName, String entityName) { 206 | StringBuffer buffer = new StringBuffer(); 207 | buffer.append( 208 | " @Override\r\n public int insert" + entityName + "ByBatch(List<" + entityName + "> value){\r\n"); 209 | buffer.append(" return " + daoName + ".insert" + entityName + "ByBatch(value);\r\n"); 210 | buffer.append(" }\r\n"); 211 | return buffer.toString(); 212 | } 213 | 214 | /** 215 | * 创建删除语句 216 | * 217 | * @param entityName 218 | * @param idType 219 | * @return 220 | */ 221 | private String getDelete(String daoName, String entityName, String idType, boolean anyAssist) { 222 | if (idType == null) { 223 | return ""; 224 | } 225 | StringBuffer buffer = new StringBuffer(); 226 | if (anyAssist) { 227 | buffer.append(" @Override\r\n public int delete" + entityName + "ById(" + idType + " id){\r\n"); 228 | buffer.append(" return " + daoName + ".delete" + entityName + "ById(id);\r\n"); 229 | buffer.append(" }\r\n"); 230 | buffer.append(" @Override\r\n public int delete" + entityName + "(Assist assist){\r\n"); 231 | buffer.append(" return " + daoName + ".delete" + entityName + "(assist);\r\n"); 232 | buffer.append(" }\r\n"); 233 | } else { 234 | buffer.append(" @Override\r\n public int delete" + entityName + "ById(" + idType + " id){\r\n"); 235 | buffer.append(" return " + daoName + ".delete" + entityName + "ById(id);\r\n"); 236 | buffer.append(" }\r\n"); 237 | } 238 | return buffer.toString(); 239 | 240 | } 241 | 242 | /** 243 | * 获得更新语句 244 | * 245 | * @param entityName 246 | * @param anyAssist 247 | * @return 248 | */ 249 | private String getUpdate(String daoName, String entityName, boolean anyAssist) { 250 | StringBuffer buffer = new StringBuffer(); 251 | if (anyAssist) { 252 | buffer.append(" @Override\r\n public int update" + entityName + "ById(" + entityName + " enti){\r\n"); 253 | buffer.append(" return " + daoName + ".update" + entityName + "ById(enti);\r\n"); 254 | buffer.append(" }\r\n"); 255 | 256 | buffer.append(" @Override\r\n public int update" + entityName + "(" + entityName 257 | + " value, Assist assist){\r\n"); 258 | buffer.append(" return " + daoName + ".update" + entityName + "(value,assist);\r\n"); 259 | buffer.append(" }\r\n"); 260 | } else { 261 | buffer.append(" @Override\r\n public int update" + entityName + "ById(" + entityName + " enti){\r\n"); 262 | buffer.append(" return " + daoName + ".update" + entityName + "ById(enti);\r\n"); 263 | buffer.append(" }\r\n"); 264 | } 265 | return buffer.toString(); 266 | } 267 | 268 | /** 269 | * 获得更新不为空的语句 270 | * 271 | * @param entityName 272 | * @param anyAssist 273 | * @return 274 | */ 275 | private String getUpdateNonEmpty(String daoName, String entityName, boolean anyAssist) { 276 | StringBuffer buffer = new StringBuffer(); 277 | if (anyAssist) { 278 | buffer.append(" @Override\r\n public int updateNonEmpty" + entityName + "ById(" + entityName 279 | + " enti){\r\n"); 280 | buffer.append(" return " + daoName + ".updateNonEmpty" + entityName + "ById(enti);\r\n"); 281 | buffer.append(" }\r\n"); 282 | 283 | buffer.append(" @Override\r\n public int updateNonEmpty" + entityName + "(" + entityName 284 | + " value, Assist assist){\r\n"); 285 | buffer.append(" return " + daoName + ".updateNonEmpty" + entityName + "(value,assist);\r\n"); 286 | buffer.append(" }\r\n"); 287 | } else { 288 | buffer.append(" @Override\r\n public int updateNonEmpty" + entityName + "ById(" + entityName 289 | + " enti){\r\n"); 290 | buffer.append(" return " + daoName + ".updateNonEmpty" + entityName + "ById(enti);\r\n"); 291 | buffer.append(" }\r\n"); 292 | } 293 | return buffer.toString(); 294 | } 295 | 296 | } 297 | -------------------------------------------------------------------------------- /src/pers/resource/models/AssistMateri.txt: -------------------------------------------------------------------------------- 1 | 2 | import java.util.ArrayList; 3 | import java.util.List; 4 | 5 | /** 6 | * This is EUCM's helper class 7 | * 8 | * @author Mirren 9 | */ 10 | public class Assist { 11 | // 去重 12 | private String distinct; 13 | // 自定义排序 14 | private String order; 15 | // 数据分页开始行 16 | private Integer startRow; 17 | // 每次取多少行数据 18 | private Integer rowSize; 19 | // 设置自定义返回列 20 | private String resultColumn; 21 | // 条件集 22 | private List> require = null; 23 | 24 | /** 25 | * 条件类,require属性为列的条件,value为条件值,suffix为结尾 26 | * 27 | * @author Mirren 28 | */ 29 | public class WhereRequire { 30 | private String require;// 条件语句 31 | private T value;// 单个值 32 | private Object[] values;// 多个值 33 | private String suffix;// 结束语句 34 | 35 | public WhereRequire(String require, T value) { 36 | super(); 37 | this.require = require; 38 | this.value = value; 39 | } 40 | 41 | public WhereRequire(String require, T value, String suffix) { 42 | super(); 43 | this.require = require; 44 | this.value = value; 45 | this.suffix = suffix; 46 | } 47 | 48 | public WhereRequire(String require, String suffix, Object... values) { 49 | super(); 50 | this.require = require; 51 | this.values = values; 52 | this.suffix = suffix; 53 | } 54 | 55 | public String getRequire() { 56 | return require; 57 | } 58 | 59 | public void setRequire(String require) { 60 | this.require = require; 61 | } 62 | 63 | public T getValue() { 64 | return value; 65 | } 66 | 67 | public void setValue(T value) { 68 | this.value = value; 69 | } 70 | 71 | public Object[] getValues() { 72 | return values; 73 | } 74 | 75 | public void setValues(Object[] values) { 76 | this.values = values; 77 | } 78 | 79 | public String getSuffix() { 80 | return suffix; 81 | } 82 | 83 | public void setSuffix(String suffix) { 84 | this.suffix = suffix; 85 | } 86 | } 87 | 88 | /** 89 | * 排序类用于排序column为列名,mode为排序方式,true=asc,false=desc 90 | * 91 | * @author Mirren 92 | * 93 | */ 94 | public class WhereOrder { 95 | private String column; 96 | private boolean mode; 97 | 98 | public WhereOrder(String column, boolean mode) { 99 | super(); 100 | this.column = column; 101 | this.mode = mode; 102 | } 103 | 104 | public String getColumn() { 105 | return column; 106 | } 107 | 108 | public void setColumn(String column) { 109 | this.column = column; 110 | } 111 | 112 | public boolean isMode() { 113 | return mode; 114 | } 115 | 116 | public void setMode(boolean mode) { 117 | this.mode = mode; 118 | } 119 | 120 | } 121 | 122 | /** 123 | * 添加查询条件,参数为Assist的内部类whereRequire,推荐使用Assist的静态条件方法添加条件; 124 | * 125 | * @param require 126 | * 示例:Assist.and_lt("id",10),... 127 | */ 128 | public Assist setRequires(WhereRequire... require) { 129 | if (this.require == null) { 130 | this.require = new ArrayList>(); 131 | } 132 | for (int i = 0; i < require.length; i++) { 133 | this.require.add(require[i]); 134 | } 135 | return this; 136 | } 137 | 138 | /** 139 | * 参数(列名)1 = 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 140 | * 141 | * @param column 142 | * @param req 143 | * @return 144 | */ 145 | public static WhereRequire andEq(String column, T req) { 146 | return new Assist().new WhereRequire("and " + column + " = ", req); 147 | } 148 | 149 | /** 150 | * 参数(列名)1 = 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 151 | * 152 | * @param column 153 | * @param req 154 | * @return 155 | */ 156 | public static WhereRequire orEq(String column, T req) { 157 | return new Assist().new WhereRequire("or " + column + " = ", req); 158 | } 159 | 160 | /** 161 | * 参数(列名)1 <>(不等于) 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 162 | * 163 | * @param column 164 | * @param req 165 | * @return 166 | */ 167 | public static WhereRequire andNeq(String column, T req) { 168 | return new Assist().new WhereRequire("and " + column + " <> ", req); 169 | } 170 | 171 | /** 172 | * 参数(列名)1 <>(不等于) 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 173 | * 174 | * @param column 175 | * @param req 176 | * @return 177 | */ 178 | public static WhereRequire orNeq(String column, T req) { 179 | return new Assist().new WhereRequire("or " + column + " <> ", req); 180 | } 181 | 182 | /** 183 | * 参数(列名)1 < 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 184 | * 185 | * @param column 186 | * @param req 187 | * @return 188 | */ 189 | public static WhereRequire andLt(String column, T req) { 190 | return new Assist().new WhereRequire("and " + column + "< ", req); 191 | } 192 | 193 | /** 194 | * 参数(列名)1 < 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 195 | * 196 | * @param column 197 | * @param req 198 | * @return 199 | */ 200 | public static WhereRequire orLt(String column, T req) { 201 | return new Assist().new WhereRequire("or " + column + " < ", req); 202 | } 203 | 204 | /** 205 | * 参数(列名)1 <= 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 206 | * 207 | * @param column 208 | * @param req 209 | * @return 210 | */ 211 | public static WhereRequire andLte(String column, T req) { 212 | return new Assist().new WhereRequire("and " + column + " <= ", req); 213 | } 214 | 215 | /** 216 | * 参数(列名)1 <= 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 217 | * 218 | * @param column 219 | * @param req 220 | * @return 221 | */ 222 | public static WhereRequire orLte(String column, T req) { 223 | return new Assist().new WhereRequire("or " + column + " <= ", req); 224 | } 225 | 226 | /** 227 | * 参数(列名)1 > 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 228 | * 229 | * @param column 230 | * @param req 231 | * @return 232 | */ 233 | public static WhereRequire andGt(String column, T req) { 234 | return new Assist().new WhereRequire("and " + column + " > ", req); 235 | } 236 | 237 | /** 238 | * 参数(列名)1 > 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 239 | * 240 | * @param column 241 | * @param req 242 | * @return 243 | */ 244 | public static WhereRequire orGt(String column, T req) { 245 | return new Assist().new WhereRequire("or " + column + " > ", req); 246 | } 247 | 248 | /** 249 | * 参数(列名)1 >= 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 250 | * 251 | * @param column 252 | * @param req 253 | * @return 254 | */ 255 | public static WhereRequire andGte(String column, T req) { 256 | return new Assist().new WhereRequire("and " + column + " >= ", req); 257 | } 258 | 259 | /** 260 | * 参数(列名)1 >= 参数(条件)2 ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 261 | * 262 | * @param column 263 | * @param req 264 | * @return 265 | */ 266 | public static WhereRequire orGte(String column, T req) { 267 | return new Assist().new WhereRequire("or " + column + " >= ", req); 268 | } 269 | 270 | /** 271 | * 参数(列名)1 like '参数(条件)2' ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名 272 | * 273 | * @param column 274 | * @param req 275 | * @return 276 | */ 277 | public static WhereRequire andLike(String column, T req) { 278 | return new Assist().new WhereRequire("and " + column + " like ", req); 279 | } 280 | 281 | /** 282 | * 参数(列名)1 like '参数(条件)2' ;如果表中存在相同列名,使用表名.列名,如果不存在相同列名可以直接列名 283 | * 284 | * @param column 285 | * @param req 286 | * @return 287 | */ 288 | public static WhereRequire orLike(String column, T req) { 289 | return new Assist().new WhereRequire("or " + column + " like ", req); 290 | } 291 | 292 | /** 293 | * 自定义查询条件 :参数(自定义开头语句)1 参数(条件值)2 参数(自定义结尾语句)3 294 | * ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名
295 | * 示例子查询:
296 | * 参数1= 列名 in (select 返回列名 from 表名 where 列名 =
297 | * 参数2= 123456
298 | * 参数3= )
299 | * 假设有一张user表,里面有id列结果为:
300 | * select * from user where id in (select id from user where id=123456)
301 | * 需要特别注意的是,当where中不止一个条件的时候需要加上and或者or,根据自己的情况而定,多个值使用重载方法 302 | * 303 | * @param prefix 304 | * @param value 305 | * @param suffix 306 | * @return 307 | */ 308 | public static WhereRequire customRequire(String prefix, T value, String suffix) { 309 | return new Assist().new WhereRequire(prefix, value, suffix); 310 | } 311 | 312 | /** 313 | * * 自定义查询条件 :参数(自定义开头语句)1 参数(条件值)2 参数(自定义结尾语句)3 314 | * ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名
315 | * 示例: Assist.customRequire("select in (",")",1,2,3,4) 316 | * 317 | * @param prefix 318 | * @param suffix 319 | * @param value 320 | * @return 321 | */ 322 | public static WhereRequire customRequire(String prefix, String suffix, Object... value) { 323 | return new Assist().new WhereRequire(prefix, suffix, value); 324 | } 325 | 326 | /** 327 | * 获得一个排序对象,将(列名)参数1 按 参数2排序(true=ASC/false=DESC)
328 | * ;如果表中存在相同列名使用表名.列名,如果不存在相同列名可以直接列名
329 | * 330 | * @param column 331 | * 列名 332 | * @param mode 333 | * 排序类型,true=asc,false=desc 334 | * @return 335 | */ 336 | public static WhereOrder order(String column, boolean mode) { 337 | return new Assist().new WhereOrder(column, mode); 338 | } 339 | 340 | /** 341 | * 设置排序,通过Assist.order(列名,排序方式)
342 | * 示例:assist.setOrder(Assist.order("id",true))//将id正序排序 343 | * 344 | * @param column 345 | * @param mode 346 | */ 347 | public Assist setOrder(WhereOrder... order) { 348 | if (order == null || order.length == 0) { 349 | this.order = null; 350 | return this; 351 | } 352 | if (order.length == 1) { 353 | if (order[0].isMode()) { 354 | this.order = "order By " + order[0].getColumn() + " asc"; 355 | } else { 356 | this.order = "order By " + order[0].getColumn() + " desc"; 357 | } 358 | return this; 359 | } 360 | StringBuffer sql = new StringBuffer("order By "); 361 | for (int i = 0; i < order.length; i++) { 362 | if (i == 0) { 363 | if (order[i].isMode()) { 364 | sql.append(order[i].getColumn() + " asc"); 365 | } else { 366 | sql.append(order[i].getColumn() + " desc"); 367 | } 368 | } else { 369 | if (order[i].isMode()) { 370 | sql.append(", " + order[i].getColumn() + " asc"); 371 | } else { 372 | sql.append(", " + order[i].getColumn() + " desc"); 373 | } 374 | } 375 | } 376 | 377 | this.order = sql.toString(); 378 | return this; 379 | } 380 | 381 | /** 382 | * 获得是否去重 383 | * 384 | * @return 385 | */ 386 | public String getDistinct() { 387 | return distinct; 388 | } 389 | 390 | /** 391 | * 设置是否去重 392 | * 393 | * @param distinct 394 | */ 395 | public Assist setDistinct(boolean distinct) { 396 | if (distinct) { 397 | this.distinct = "distinct"; 398 | return this; 399 | } 400 | return this; 401 | } 402 | 403 | /** 404 | * 获得排序 405 | * 406 | * @return 407 | */ 408 | public String getOrder() { 409 | return order; 410 | } 411 | 412 | /** 413 | * 获得开始分页行 414 | * 415 | * @return 416 | */ 417 | public Integer getStartRow() { 418 | return startRow; 419 | } 420 | 421 | /** 422 | * 设置从第几行开始取数据 423 | * 424 | * @param startRow 425 | */ 426 | public Assist setStartRow(Integer startRow) { 427 | this.startRow = startRow; 428 | return this; 429 | } 430 | 431 | /** 432 | * 获得每次取多少行数据 433 | * 434 | * @return 435 | */ 436 | public Integer getRowSize() { 437 | return rowSize; 438 | } 439 | 440 | /** 441 | * 设置每次取多少很数据 442 | * 443 | * @param rowSize 444 | */ 445 | public Assist setRowSize(Integer rowSize) { 446 | this.rowSize = rowSize; 447 | return this; 448 | } 449 | 450 | /** 451 | * 获得返回指定列 452 | * 453 | * @return 454 | */ 455 | public String getResultColumn() { 456 | return resultColumn; 457 | } 458 | 459 | /** 460 | * 设置返回指定列多个列以,逗号隔开;需要特别注意的是返回列需要起别名,别名以mapper里面的resultMap的column为准; 461 | * 一般是类名加上属性的顺序号, 462 | * 463 | * @return 464 | */ 465 | public Assist setResultColumn(String resultColumn) { 466 | this.resultColumn = resultColumn; 467 | return this; 468 | } 469 | 470 | /** 471 | * 获得条件集 472 | * 473 | * @return 474 | */ 475 | public List> getRequire() { 476 | return require; 477 | } 478 | 479 | public Assist() { 480 | super(); 481 | } 482 | 483 | /** 484 | * 该构造方法用于使用Assist的静态条件方法,动态添加条件 485 | * 486 | * @param require 487 | * 示例:Assist.lt("A.ID",10)... 488 | */ 489 | public Assist(WhereRequire... require) { 490 | super(); 491 | if (this.require == null) { 492 | this.require = new ArrayList>(); 493 | } 494 | for (int i = 0; i < require.length; i++) { 495 | this.require.add(require[i]); 496 | } 497 | } 498 | } 499 | -------------------------------------------------------------------------------- /src/pers/resource/FXML/AddGrandAttribute.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 123 | 124 | 129 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 156 | 161 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 |
181 | 182 | 183 | 184 | 196 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 237 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 364 | 369 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 |
388 |
389 |
390 | -------------------------------------------------------------------------------- /src/pers/cmeu/controller/SetAttributeController.java: -------------------------------------------------------------------------------- 1 | package pers.cmeu.controller; 2 | 3 | import java.io.IOException; 4 | import java.net.URL; 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | import java.util.ResourceBundle; 8 | 9 | import org.apache.log4j.Logger; 10 | 11 | import javafx.collections.FXCollections; 12 | import javafx.collections.ObservableList; 13 | import javafx.event.ActionEvent; 14 | import javafx.fxml.FXML; 15 | import javafx.fxml.FXMLLoader; 16 | import javafx.fxml.Initializable; 17 | import javafx.scene.Parent; 18 | import javafx.scene.Scene; 19 | import javafx.scene.control.Button; 20 | import javafx.scene.control.CheckBox; 21 | import javafx.scene.control.Label; 22 | import javafx.scene.control.TableColumn; 23 | import javafx.scene.control.TableView; 24 | import javafx.scene.control.TextArea; 25 | import javafx.scene.control.TextField; 26 | import javafx.scene.control.cell.CheckBoxTableCell; 27 | import javafx.scene.control.cell.PropertyValueFactory; 28 | import javafx.scene.control.cell.TextFieldTableCell; 29 | import javafx.scene.image.Image; 30 | import javafx.stage.Modality; 31 | import javafx.stage.Stage; 32 | import pers.cmeu.common.ConfigUtil; 33 | import pers.cmeu.common.DBUtil; 34 | import pers.cmeu.common.StrUtil; 35 | import pers.cmeu.models.AttributeCVF; 36 | import pers.cmeu.models.ClassConfig; 37 | import pers.cmeu.models.ColumnItem; 38 | import pers.cmeu.models.DatabaseConfig; 39 | import pers.cmeu.models.SuperAttribute; 40 | import pers.cmeu.view.AlertUtil; 41 | 42 | public class SetAttributeController implements Initializable { 43 | private Logger log = Logger.getLogger(SetAttributeController.class.getName()); 44 | // 存储信息table里面的所有属性 45 | ObservableList attributeCVF; 46 | @FXML 47 | private CheckBox chkUnlineCamel; 48 | @FXML 49 | private CheckBox chkSerializable; 50 | @FXML 51 | private CheckBox chkCreateJDBCtype; 52 | @FXML 53 | private CheckBox chkGetAndSet; 54 | @FXML 55 | private CheckBox chkConstruct; 56 | @FXML 57 | private CheckBox chkConstructAll; 58 | 59 | @FXML 60 | private TextField txtPrimaryKey; 61 | @FXML 62 | private TextField txtCustomType; 63 | @FXML 64 | private TextField txtCustomName; 65 | @FXML 66 | private TextField txtTableAlias; 67 | 68 | @FXML 69 | private Button btnSuccess; 70 | @FXML 71 | private Button btnCancel; 72 | @FXML 73 | private Button btnAddToTableView; 74 | @FXML 75 | private Button btnAddProperty; 76 | @FXML 77 | private Button btnAddItem; 78 | 79 | // 主键策略 80 | @FXML 81 | private TextArea txtaSelectKey; 82 | @FXML 83 | private Label lblSelectKey; 84 | @FXML 85 | private CheckBox chkSelectKey; 86 | 87 | @FXML 88 | public TableView tblEntityProperty; 89 | 90 | @FXML 91 | private TableColumn tdCheck; 92 | @FXML 93 | private TableColumn tdColumn; 94 | @FXML 95 | private TableColumn tdJDBCType; 96 | @FXML 97 | private TableColumn tdJAVAType; 98 | @FXML 99 | private TableColumn tdPropertyName; 100 | 101 | @Override 102 | public void initialize(URL location, ResourceBundle resources) { 103 | tblEntityProperty.setEditable(true); 104 | tblEntityProperty.setStyle("-fx-font-size:14px"); 105 | tblEntityProperty.setPlaceholder(new Label("正在加载属性...")); 106 | init(); 107 | } 108 | 109 | /** 110 | * 初始化 111 | */ 112 | public void init() { 113 | log.debug("初始化修改属性页..."); 114 | IndexController indexContro = (IndexController) StageManager.CONTROLLER.get("index"); 115 | 116 | // 存储数据库指定数据库,修改属性时用 117 | DatabaseConfig selectedDatabaseConfig = indexContro.getSelectedDatabaseConfig(); 118 | // 记录存储的表名,修改属性时用 119 | String selectedTableName = indexContro.getSelectedTableName(); 120 | boolean falg = indexContro.isFalg(); 121 | initTablePrimaryKey(selectedDatabaseConfig, selectedTableName); 122 | 123 | try { 124 | log.debug("获得表的所有列并初始化成类的属性..."); 125 | if (falg == true) { 126 | // 获得工厂数据 127 | attributeCVF = getAttributeCVFs(selectedDatabaseConfig, selectedTableName); 128 | } else { 129 | // 需要创建所有类的集合; 130 | SuperAttribute attribute = indexContro.getThisSuperAttribute(); 131 | if (attribute != null) { 132 | attributeCVF = FXCollections.observableList(attribute.getAttributes()); 133 | } else { 134 | attributeCVF = getAttributeCVFs(selectedDatabaseConfig, selectedTableName); 135 | } 136 | } 137 | log.debug("获得表的所有列并初始化成类的属性成功!"); 138 | } catch (Exception e) { 139 | AlertUtil.showErrorAlert("加载属性列失败!失败原因:\r\n" + e.getMessage()); 140 | log.error("获得表的所有列并初始化成类的属性失败!!!" + e); 141 | } 142 | 143 | tdCheck.setCellFactory(CheckBoxTableCell.forTableColumn(tdCheck)); 144 | tdCheck.setCellValueFactory(new PropertyValueFactory<>("check")); 145 | tdColumn.setCellValueFactory(new PropertyValueFactory<>("conlumn")); 146 | tdJDBCType.setCellValueFactory(new PropertyValueFactory<>("jdbcType")); 147 | tdJDBCType.setCellFactory(TextFieldTableCell.forTableColumn()); 148 | tdJDBCType.setOnEditCommit(event -> { 149 | if ("".equals(event.getNewValue())) { 150 | event.getTableView().getItems().get(event.getTablePosition().getRow()).setJdbcType(null); 151 | } else { 152 | event.getTableView().getItems().get(event.getTablePosition().getRow()).setJdbcType(event.getNewValue()); 153 | } 154 | }); 155 | tdJAVAType.setCellValueFactory(new PropertyValueFactory<>("javaType")); 156 | tdPropertyName.setCellValueFactory(new PropertyValueFactory<>("propertyName")); 157 | tdPropertyName.setCellFactory(TextFieldTableCell.forTableColumn()); 158 | tdPropertyName.setOnEditCommit(event -> { 159 | event.getTableView().getItems().get(event.getTablePosition().getRow()).setPropertyName(event.getNewValue()); 160 | }); 161 | 162 | try { 163 | log.debug("初始化创建类配置信息..."); 164 | // 从配置文件中获取配置信息并应用 165 | ClassConfig classConfig = ConfigUtil.getClassConfig(); 166 | chkGetAndSet.setSelected(classConfig.isGetAndSet()); 167 | chkConstruct.setSelected(classConfig.isConstruct()); 168 | chkConstructAll.setSelected(classConfig.isConstructAll()); 169 | chkUnlineCamel.setSelected(classConfig.isUnlineCamel()); 170 | chkSerializable.setSelected(classConfig.isSeriz()); 171 | chkCreateJDBCtype.setSelected(classConfig.isCreateJDBCType()); 172 | log.debug("初始化创建类配置信息-->成功!"); 173 | } catch (Exception e) { 174 | log.error("初始化创建类配置信息-->失败:" + e); 175 | } 176 | 177 | // 是否将字符驼峰命名; 178 | if (chkUnlineCamel.isSelected()) { 179 | toCamel(); 180 | } else { 181 | notCamel(); 182 | } 183 | indexContro.setFalg(false); 184 | 185 | log.debug("初始化属性页成功!"); 186 | } 187 | 188 | /** 189 | * 获得数据库列并初始化 190 | * 191 | * @return 192 | * @throws Exception 193 | */ 194 | public ObservableList getAttributeCVFs(DatabaseConfig config, String tableName) throws Exception { 195 | List attributeCVFs = DBUtil.getTableColumns(config, tableName); 196 | return FXCollections.observableList(attributeCVFs); 197 | } 198 | 199 | /** 200 | * 初始化主键 201 | */ 202 | public void initTablePrimaryKey(DatabaseConfig selectedDatabaseConfig, String selectedTableName) { 203 | try { 204 | log.debug("执行获取表的主键列..."); 205 | String key = DBUtil.getTablePrimaryKey(selectedDatabaseConfig, selectedTableName); 206 | if (key != null) { 207 | txtPrimaryKey.setText(key); 208 | log.debug("获取表的主键列成功!"); 209 | } else { 210 | txtPrimaryKey.setPromptText("注意:你选择的表没有主键!"); 211 | log.debug("获取表的主键列失败,当前表不存在主键!"); 212 | } 213 | } catch (Exception e) { 214 | AlertUtil.showErrorAlert("获得主键失败!失败原因:\r\n" + e.getMessage()); 215 | log.error("获取表的主键列失败!!!" + e); 216 | } 217 | 218 | } 219 | 220 | /** 221 | * 是否将java属性设置为驼峰命名 222 | * 223 | * @param event 224 | */ 225 | public void unlineCamel(ActionEvent event) { 226 | if (chkUnlineCamel.isSelected()) { 227 | toCamel(); 228 | } else { 229 | notCamel(); 230 | } 231 | } 232 | 233 | /** 234 | * 设置属性为帕斯卡 235 | */ 236 | public void toCamel() { 237 | if (attributeCVF == null) { 238 | return; 239 | } 240 | tblEntityProperty.getItems().clear(); 241 | for (AttributeCVF attr : attributeCVF) { 242 | attr.setPropertyName(StrUtil.unlineToCamel(attr.getPropertyName())); 243 | tblEntityProperty.getItems().add(attr); 244 | } 245 | } 246 | 247 | /** 248 | * 设置属性名跟列名相同 249 | */ 250 | public void notCamel() { 251 | if (attributeCVF == null) { 252 | return; 253 | } 254 | ObservableList item = attributeCVF; 255 | tblEntityProperty.getItems().clear(); 256 | for (AttributeCVF attr : item) { 257 | if (attr.getConlumn() == null || "".equals(attr.getConlumn())) { 258 | attr.setPropertyName(StrUtil.fristToLoCase(attr.getPropertyName())); 259 | } else { 260 | attr.setPropertyName(StrUtil.fristToLoCase(attr.getConlumn())); 261 | } 262 | tblEntityProperty.getItems().add(attr); 263 | } 264 | 265 | } 266 | 267 | /** 268 | * 生成主键策略 269 | * 270 | * @param event 271 | */ 272 | public void selectKey(ActionEvent event) { 273 | if (txtPrimaryKey.getText() == null || "".equals(txtPrimaryKey.getText())) { 274 | AlertUtil.showWarnAlert("你尚未选择表或者你所选择的表没有主键"); 275 | chkSelectKey.selectedProperty().set(false); 276 | return; 277 | } 278 | if (chkSelectKey.isSelected()) { 279 | log.debug("执行添加主键策略..."); 280 | } else { 281 | log.debug("取消添加主键策略..."); 282 | } 283 | String keyType = ""; 284 | String keyProperty = ""; 285 | for (AttributeCVF attr : tblEntityProperty.getItems()) { 286 | if (attr.getConlumn().equals(txtPrimaryKey.getText())) { 287 | keyType = attr.getJavaTypeValue(); 288 | keyProperty = attr.getPropertyName(); 289 | break; 290 | } 291 | } 292 | String dbType = ((IndexController) StageManager.CONTROLLER.get("index")).getSelectedDatabaseConfig() 293 | .getDbType(); 294 | StringBuffer res = new StringBuffer(); 295 | res.append(" \r\n SELECT LAST_INSERT_ID() AS " + keyProperty); 298 | } else if ("SqlServer".equals(dbType)) { 299 | res.append("order=\"AFTER\">\r\n SELECT SCOPE_IDENTITY() AS " + keyProperty); 300 | } else if ("PostgreSQL".equals(dbType)) { 301 | res.append("order=\"BEFORE\">\r\n SELECT nextval() AS " + keyProperty); 302 | } else { 303 | res.append("order=\"BEFORE\">\r\n SELECT .Nextval FROM dual"); 304 | } 305 | res.append("\r\n "); 306 | txtaSelectKey.setText(res.toString()); 307 | lblSelectKey.setVisible(chkSelectKey.isSelected()); 308 | txtaSelectKey.setVisible(chkSelectKey.isSelected()); 309 | if (chkSelectKey.isSelected()) { 310 | log.debug("添加主键策略成功!"); 311 | } else { 312 | log.debug("取消添加主键策略成功!"); 313 | } 314 | } 315 | 316 | /** 317 | * 将属性添加到属性表 318 | * 319 | * @param event 320 | */ 321 | public void addToTable(ActionEvent event) { 322 | log.debug("执行添加自定义属性..."); 323 | AttributeCVF attribute = new AttributeCVF(); 324 | attribute.setJavaType(txtCustomType.getText()); 325 | attribute.setPropertyName(txtCustomName.getText()); 326 | this.attributeCVF.add(attribute); 327 | tblEntityProperty.getItems().add(attribute); 328 | log.debug("添加自定义属性成功!"); 329 | } 330 | 331 | private boolean anyOpenPro = true;// 用于作为判断打开添加属性(true)还是添加集合(false) 332 | private int needOrNotCreatePages = 0;// 用于判断是否需要创建分页 333 | 334 | /** 335 | * 添加新表作为属性 336 | */ 337 | public void addProperty() { 338 | anyOpenPro = true; 339 | StageManager.CONTROLLER.put("attribute", this); 340 | Stage stage = new Stage(); 341 | try { 342 | log.debug("打开添加第二级添加新表作为属性窗口..."); 343 | Parent root = FXMLLoader.load( 344 | Thread.currentThread().getContextClassLoader().getResource(FXMLPage.ADD_SON_ATTRIBUTE.getFxml())); 345 | stage.setTitle("添加新表"); 346 | stage.getIcons().add(new Image("pers/resource/image/CMEUicon.png")); 347 | stage.initModality(Modality.APPLICATION_MODAL); 348 | stage.setScene(new Scene(root)); 349 | stage.show(); 350 | StageManager.STAGE.put("addPropertyBySon", stage); 351 | } catch (IOException e) { 352 | AlertUtil.showErrorAlert("初始化添加属性失败:\r\n原因:" + e.getMessage()); 353 | log.error("打开添加第二级添加新表作为属性窗口失败!!!" + e); 354 | } 355 | 356 | } 357 | 358 | /** 359 | * 添加新表作为集合 360 | */ 361 | public void addPropertyItem() { 362 | anyOpenPro = false; 363 | StageManager.CONTROLLER.put("attribute", this); 364 | Stage stage = new Stage(); 365 | try { 366 | log.debug("打开添加第二级添加新表作为集合窗口..."); 367 | Parent root = FXMLLoader.load( 368 | Thread.currentThread().getContextClassLoader().getResource(FXMLPage.ADD_SON_ATTRIBUTE.getFxml())); 369 | stage.setTitle("添加新表"); 370 | stage.getIcons().add(new Image("pers/resource/image/CMEUicon.png")); 371 | stage.initModality(Modality.APPLICATION_MODAL); 372 | stage.setScene(new Scene(root)); 373 | stage.show(); 374 | StageManager.STAGE.put("addPropertyBySon", stage); 375 | } catch (IOException e) { 376 | AlertUtil.showErrorAlert("初始化添加属性失败:\r\n原因:" + e.getMessage()); 377 | log.error("打开添加第二级添加新表作为集合窗口失败!!!" + e); 378 | } 379 | } 380 | 381 | /** 382 | * 取消关闭该窗口 383 | * 384 | * @param event 385 | */ 386 | public void cancel(ActionEvent event) { 387 | boolean result = AlertUtil.showConfirmAlert("取消的话你全部的设置都不生效,确定取消吗?"); 388 | if (result) { 389 | log.debug("取消所有属性的修改..."); 390 | // 表示不修改任何属性并清除所有窗口 391 | IndexController index = ((IndexController) StageManager.CONTROLLER.get("index")); 392 | index.setChangeInfo(false); 393 | index.setThisSuperAttribute(null); 394 | if (index.getSuperAttributes() != null) { 395 | index.getSuperAttributes().clear(); 396 | } 397 | StageManager.STAGE.get("attribute").close(); 398 | StageManager.STAGE.remove("attribute"); 399 | StageManager.STAGE = null; 400 | StageManager.CONTROLLER = null; 401 | } 402 | } 403 | 404 | public void success() { 405 | IndexController index = (IndexController) StageManager.CONTROLLER.get("index"); 406 | // 设置当前页面所选择的信息 407 | if (index.getThisSuperAttribute() == null) { 408 | index.setThisSuperAttribute(new SuperAttribute()); 409 | } 410 | index.getThisSuperAttribute().setCamel(chkUnlineCamel.isSelected()); 411 | index.getThisSuperAttribute().setSerializable(chkSerializable.isSelected()); 412 | index.getThisSuperAttribute().setCreateJDBCType(chkCreateJDBCtype.isSelected()); 413 | index.getThisSuperAttribute().setConstruct(chkConstruct.isSelected()); 414 | index.getThisSuperAttribute().setConstructAll(chkConstructAll.isSelected()); 415 | index.getThisSuperAttribute().setCreateGetSet(chkGetAndSet.isSelected()); 416 | index.getThisSuperAttribute().setPrimaryKey(txtPrimaryKey.getText()); 417 | if (txtTableAlias != null && !(txtTableAlias.getText().isEmpty())) { 418 | index.getThisSuperAttribute().setTableAlias(txtTableAlias.getText()); 419 | } 420 | if (needOrNotCreatePages != 0) { 421 | index.getThisSuperAttribute().setAnyHasColl(true); 422 | } 423 | if (chkSelectKey.isSelected()) { 424 | index.getThisSuperAttribute().setSelectKey(txtaSelectKey.getText()); 425 | } 426 | index.getThisSuperAttribute().setAttributes(tblEntityProperty.getItems()); 427 | List items = new ArrayList(); 428 | for (AttributeCVF item : tblEntityProperty.getItems()) { 429 | if (item.getColumnItem() == null) { 430 | continue; 431 | } 432 | if (item.getCheck()) { 433 | items.add(item.getColumnItem()); 434 | } else { 435 | if (index.getThisSuperAttribute().getColumnItems() != null) { 436 | for (int i = 0; i < index.getThisSuperAttribute().getColumnItems().size(); i++) { 437 | if (index.getThisSuperAttribute().getColumnItems().get(i).getClassName() 438 | .equals(item.getColumnItem().getClassName())) { 439 | index.getThisSuperAttribute().getColumnItems().remove(i); 440 | } 441 | } 442 | } 443 | } 444 | } 445 | if (items.size() > 0) { 446 | index.getThisSuperAttribute().setColumnItems(items); 447 | } 448 | index.setChangeInfo(true); 449 | StageManager.STAGE.get("attribute").close(); 450 | StageManager.STAGE.remove("attribute"); 451 | log.debug("保存修改属性的所有信息..."); 452 | } 453 | 454 | // -----------------------get/set-------------------------------- 455 | public String getPrimaryKey() { 456 | return txtPrimaryKey.getText(); 457 | } 458 | 459 | public boolean isAnyOpenPro() { 460 | return anyOpenPro; 461 | } 462 | 463 | public void setAnyOpenPro(boolean anyOpenPro) { 464 | this.anyOpenPro = anyOpenPro; 465 | } 466 | 467 | public int getNeedOrNotCreatePages() { 468 | return needOrNotCreatePages; 469 | } 470 | 471 | public void setNeedOrNotCreatePages(int needOrNotCreatePages) { 472 | this.needOrNotCreatePages = needOrNotCreatePages; 473 | } 474 | 475 | } 476 | -------------------------------------------------------------------------------- /src/pers/resource/FXML/AddSonAttribute.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 122 | 123 | 128 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 155 | 160 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 |
180 | 181 | 182 | 183 | 195 | 207 | 208 | 209 | 224 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 266 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 394 | 399 | 400 | 401 | 402 | 403 | 404 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 |
418 |
419 |
420 | --------------------------------------------------------------------------------