diff --git a/src/main/java/com/zhangmeng/tools/controller/MySQLCodeGenController.java b/src/main/java/com/zhangmeng/tools/controller/MySQLCodeGenController.java index e29d798..411e71a 100644 --- a/src/main/java/com/zhangmeng/tools/controller/MySQLCodeGenController.java +++ b/src/main/java/com/zhangmeng/tools/controller/MySQLCodeGenController.java @@ -1,17 +1,33 @@ package com.zhangmeng.tools.controller; +import com.alibaba.druid.pool.DruidDataSource; import com.google.common.collect.Maps; import com.zhangmeng.tools.dto.BeanField; import com.zhangmeng.tools.dto.GenerateDetail; +import com.zhangmeng.tools.dto.GenerateInput; +import com.zhangmeng.tools.utils.AlertUtils; import com.zhangmeng.tools.utils.TemplateUtil; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.*; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.control.cell.TextFieldListCell; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.util.Callback; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.util.CollectionUtils; +import javax.sql.DataSource; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -48,9 +64,231 @@ public class MySQLCodeGenController { } + @FXML + private TextField table_name; + + @FXML + public void preview_code() { + String text = data_base.getText(); + if (text.length() == 0) { + AlertUtils.alert_warning("请输入数据库名!"); + return; + } + + String table = table_name.getText(); + if (table.length() == 0) { + AlertUtils.alert_warning("请输入表名!"); + return; + } + GenerateDetail generateDetail = generateByTableName(table); + log.info("generateDetail:{}", generateDetail); + assignment_to_filed(generateDetail); + bean_info.set(generateDetail); + } + + @FXML + private TextField path_field; + + @FXML + private TextField bean_class_name_field; + + @FXML + private TextField bean_package_name_field; + + @FXML + private TextField dao_clas_name_field; + + @FXML + private TextField dao_package_name_field; + + @FXML + private TextField controller_class_name_field; + + @FXML + private TextField controller_package_name_field; + + @FXML + private TableColumn column_name; + + @FXML + private TableColumn column_type; + + @FXML + private TableColumn bean_field_name; + + @FXML + private TableColumn bean_field_type; + + @FXML + private TableColumn bean_field_value; + + @FXML + private TableView tableView; + + public ObservableList list = FXCollections.observableArrayList(); + + @FXML + private TextField username; + + @FXML + private TextField password; + + @FXML + private TextField data_base; + + @FXML + private TextField ip_address; + + @FXML + private TextField port; + + @FXML + private ComboBox comboBox_table; + + private SimpleObjectProperty bean_info = new SimpleObjectProperty<>(); + + private ObservableList table_list = FXCollections.observableArrayList(); + + public static final String path = "d:/generate"; + public static final String bean_package_name = "com.dashidao.server.model"; + public static final String dao_package_name = "com.dashidao.server.dao"; + public static final String controller_package_name = "com.dashidao.server.controller"; + + @FXML + public void initialize() { + username.setText("root"); + password.setText("root"); + ip_address.setText("localhost"); + port.setText("3306"); + tableView.setFixedCellSize(30); + tableView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + tableView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue != null) { + System.out.println(newValue.getName()); + } + }); + column_name.setCellFactory(TextFieldTableCell.forTableColumn()); + column_name.setCellValueFactory(new PropertyValueFactory<>("columnName")); + + column_type.setCellFactory(TextFieldTableCell.forTableColumn()); + column_type.setCellValueFactory(new PropertyValueFactory<>("columnType")); + + bean_field_name.setCellFactory(TextFieldTableCell.forTableColumn()); + bean_field_name.setCellValueFactory(new PropertyValueFactory<>("name")); + + bean_field_type.setCellFactory(TextFieldTableCell.forTableColumn()); + bean_field_type.setCellValueFactory(new PropertyValueFactory<>("type")); + + bean_field_value.setCellFactory(TextFieldTableCell.forTableColumn()); + bean_field_value.setCellValueFactory(new PropertyValueFactory<>("columnDefault")); + tableView.setItems(list); + + double width = tableView.getPrefWidth() / tableView.getColumns().size() + 100; + column_name.setPrefWidth(width); + column_type.setPrefWidth(width); + bean_field_name.setPrefWidth(width); + bean_field_type.setPrefWidth(width); + bean_field_value.setPrefWidth(width); + + comboBox_table.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if(newValue != null){ + log.info("选择的表名为:{}",newValue); + table_name.setText(newValue); + } + }); + } + + @FXML + public void save_code(){ + log.info("代码生成保存!"); + GenerateDetail generateDetail = bean_info.getValue(); + if (generateDetail == null){ + AlertUtils.alert_warning("请预览之后在进行操作!"); + return; + } + + GenerateInput generateInput = new GenerateInput(); + generateInput.setTableName(generateDetail.getTableName()); + generateInput.setPath(path_field.getText()); + + generateInput.setControllerName(controller_class_name_field.getText()); + generateInput.setDaoName(dao_clas_name_field.getText()); + generateInput.setBeanName(generateDetail.getBeanName()); + + generateInput.setDaoPackageName(dao_package_name_field.getText()); + generateInput.setControllerPkgName(controller_package_name_field.getText()); + generateInput.setBeanPackageName(bean_package_name_field.getText()); + + List fields = generateDetail.getFields(); + List beanFieldName = new ArrayList<>(); + List beanFieldType = new ArrayList<>(); + List beanFieldValue = new ArrayList<>(); + List columnNames = new ArrayList<>(); + for (BeanField field : fields) { + beanFieldName.add(field.getName()); + beanFieldType.add(field.getType()); + beanFieldValue.add(field.getColumnDefault()); + columnNames.add(field.getColumnName()); + } + + generateInput.setBeanFieldName(beanFieldName); + generateInput.setBeanFieldType(beanFieldType); + generateInput.setBeanFieldValue(beanFieldValue); + generateInput.setColumnNames(columnNames); + + TemplateUtil.saveJava(generateInput); + TemplateUtil.saveJavaDao(generateInput); + TemplateUtil.saveController(generateInput); + log.info("生成成功!"); + //清空 + bean_info.setValue(null); + } + + @FXML + public void fetch_table(){ + table_list.clear(); + getJdbcTemplate(); + List> maps = this.jdbcTemplate.queryForList + ("SELECT table_name, table_type, TABLE_COMMENT FROM information_schema.tables WHERE table_schema = (select database()) ORDER BY table_name DESC"); + for (Map map : maps) { + String table_name = (String) map.get("table_name"); + log.info("table_name:{}",table_name); + table_list.add(table_name); + } + comboBox_table.setItems(table_list); + comboBox_table.getSelectionModel().select(0); + } + + private void assignment_to_filed(GenerateDetail generateDetail) { + path_field.setText(path); + String bean_class_name = generateDetail.getBeanName(); + bean_class_name_field.setText(bean_class_name); + bean_package_name_field.setText(bean_package_name); + String dao_clas_name = bean_class_name + "Dao"; + dao_clas_name_field.setText(dao_clas_name); + dao_package_name_field.setText(dao_package_name); + String controller_class_name = bean_class_name + "Controller"; + controller_class_name_field.setText(controller_class_name); + controller_package_name_field.setText(controller_package_name); + + list.clear(); + List fields = generateDetail.getFields(); + list.addAll(fields); + } + public JdbcTemplate getJdbcTemplate() { if (jdbcTemplate == null) { jdbcTemplate = new JdbcTemplate(); + + DruidDataSource datasource = new DruidDataSource(); + String url = "jdbc:mysql://"+ ip_address.getText() +": " + port.getText() + "/" + data_base.getText() + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true"; + String driverClassName = "com.mysql.cj.jdbc.Driver"; + datasource.setUrl(url); + datasource.setUsername(username.getText()); + datasource.setPassword(password.getText()); + datasource.setDriverClassName(driverClassName); + + jdbcTemplate.setDataSource(datasource); } return jdbcTemplate; } @@ -69,16 +307,15 @@ public class MySQLCodeGenController { detail.setBeanName(upperFirstChar(tableName)); List fields = listBeanField(tableName); detail.setFields(fields); - + detail.setTableName(tableName); return detail; } public List listBeanField(String tableName) { getJdbcTemplate(); - List beanFields = jdbcTemplate.query( - "select column_name, data_type, column_comment, column_default FROM information_schema.columns WHERE table_name= ? and table_schema = (select database())", - new String[]{tableName}, beanFieldMapper); + List beanFields = jdbcTemplate.query("select column_name, data_type, column_comment, column_default FROM information_schema.columns WHERE table_name= ? and table_schema = (select database())", new String[]{tableName}, beanFieldMapper); if (CollectionUtils.isEmpty(beanFields)) { + AlertUtils.alert_warning("表" + tableName + "不存在"); throw new IllegalArgumentException("表" + tableName + "不存在"); } diff --git a/src/main/java/com/zhangmeng/tools/dto/GenerateDetail.java b/src/main/java/com/zhangmeng/tools/dto/GenerateDetail.java index b3b2115..e251797 100644 --- a/src/main/java/com/zhangmeng/tools/dto/GenerateDetail.java +++ b/src/main/java/com/zhangmeng/tools/dto/GenerateDetail.java @@ -7,6 +7,8 @@ public class GenerateDetail implements Serializable { private static final long serialVersionUID = -164567294469931676L; + private String tableName; + private String beanName; private List fields; @@ -26,4 +28,21 @@ public class GenerateDetail implements Serializable { public void setFields(List fields) { this.fields = fields; } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + @Override + public String toString() { + return "GenerateDetail{" + + "tableName='" + tableName + '\'' + + ", beanName='" + beanName + '\'' + + ", fields=" + fields + + '}'; + } } diff --git a/src/main/java/com/zhangmeng/tools/utils/FileUtil.java b/src/main/java/com/zhangmeng/tools/utils/FileUtil.java index 92b3d85..4330c0f 100644 --- a/src/main/java/com/zhangmeng/tools/utils/FileUtil.java +++ b/src/main/java/com/zhangmeng/tools/utils/FileUtil.java @@ -8,6 +8,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; +import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.Date; @@ -123,7 +124,7 @@ public class FileUtil { InputStreamReader isr = null; BufferedReader bufferedReader = null; try { - isr = new InputStreamReader(inputStream, "utf-8"); + isr = new InputStreamReader(inputStream, StandardCharsets.UTF_8); bufferedReader = new BufferedReader(isr); StringBuilder builder = new StringBuilder(); String string; @@ -155,136 +156,6 @@ public class FileUtil { return null; } - - /** - * 转存文件并且获取时长 - * - * @param file - * @param pathname - * @return - */ - public static Map saveFileAndgetDuration(MultipartFile file, String pathname, String type,String path_name) { - - Map map = new HashMap(); - try { - File targetFile = new File(pathname); - if (targetFile.exists()) { - map.put("pathname", pathname); - return map; - } - - if (!targetFile.getParentFile().exists()) { - targetFile.getParentFile().mkdirs(); - } - - map.put("pathname", pathname); - if (type != null && type.equals("1")) { - //获取图片的宽高 - BufferedImage bufferedImage = ImageIO.read(file.getInputStream()); - if (bufferedImage != null) { - int width = bufferedImage.getWidth(); - int height = bufferedImage.getHeight(); - map.put("imageWidth", width); - map.put("imageHeight", height); - } - } - //file.transferTo(targetFile); - FileServiceFactory.imagesUpload(pathname,path_name,file.getBytes()); - //如果是视频或者音频则进行获取时长 - if (type.equals("2") || type.equals("3")) { - Encoder encoder = new Encoder(); - MultimediaInfo m = encoder.getInfo(targetFile); - long ms = m.getDuration(); - - int ss = 1000; - int mi = ss * 60; - int hh = mi * 60; - int dd = hh * 24; - - long day = ms / dd; - long hour = (ms - day * dd) / hh; - long minute = (ms - day * dd - hour * hh) / mi; - long second = (ms - day * dd - hour * hh - minute * mi) / ss; - - String strHour = hour < 10 ? "0" + hour : "" + hour;//小时 - String strMinute = minute < 10 ? "0" + minute : "" + minute;//分钟 - String strSecond = second < 10 ? "0" + second : "" + second;//秒 - - if (type.equals("3")){ - VedioUtils.getTempPath(pathname,targetFile,map); - } - - if (strHour.equals("00")) { - map.put("duration", strMinute + ":" + strSecond); - return map; - } else { - map.put("duration", strHour + ":" + strMinute + ":" + strSecond); - return map; - } - - - } - return map; - } catch (Exception e) { - e.printStackTrace(); - map.put("msg", "保存错误"); - return map; - } - } - - /** - * 上传图像 - * @param file - * @param type - * @param accessory_path - * @param filesPath - * @return - */ - public static Map uploadphoto(MultipartFile file ,String type, String accessory_path, String filesPath) { - Map map = new HashMap(); - String pathname=null; - if (type.equals("6")) {//头像 - accessory_path = "upload/portrait"; - map.put("accessory_path",accessory_path); - }else if (type.equals("7")){ - accessory_path = "upload/platform"; - map.put("accessory_path",accessory_path); - } - String fileOrigName = file.getOriginalFilename(); - //fileOrigName = fileOrigName.substring(fileOrigName.lastIndexOf(".")); - SimpleDateFormat dateformat1 = new SimpleDateFormat("yyyyMMddHHmmss"); - String path = dateformat1.format(new Date()) + "-" + fileOrigName; - map.put("path",path); - pathname = filesPath + "/"+ accessory_path + "/"+path; - try { - File targetFile = new File(pathname); - if (targetFile.exists()) { - map.put("pathname", pathname); - return map; - } - if (!targetFile.getParentFile().exists()) { - targetFile.getParentFile().mkdirs(); - } - if (type != null && type.equals("6")||type.equals("7")) { - //获取图片的宽高 - BufferedImage bufferedImage = ImageIO.read(file.getInputStream()); - if (bufferedImage != null) { - int width = bufferedImage.getWidth(); - int height = bufferedImage.getHeight(); - map.put("imageWidth", width); - map.put("imageHeight", height); - } - } - //file.transferTo(targetFile); - FileServiceFactory.imagesUpload(pathname,accessory_path + "/"+path,file.getBytes()); - return map; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - /** * 判断文件大小 * @param len 文件长度 diff --git a/src/main/resources/fxml/mysql-code-gen.fxml b/src/main/resources/fxml/mysql-code-gen.fxml index c01bf55..4ba6e1f 100644 --- a/src/main/resources/fxml/mysql-code-gen.fxml +++ b/src/main/resources/fxml/mysql-code-gen.fxml @@ -1,14 +1,58 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + +