From 9b547817d3999f1d70e8f560f21d98b42d594b05 Mon Sep 17 00:00:00 2001 From: zhangmeng <1334717033@qq.com> Date: Wed, 22 Mar 2023 16:50:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20mybatis-plus=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=202023=E5=B9=B43=E6=9C=8822?= =?UTF-8?q?=E6=97=A516:50:09?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 + pom.xml | 13 + .../controller/CodecToolsController.java | 4 + .../tools/controller/HomeController.java | 4 + .../tools/controller/HttpToolsController.java | 4 + .../controller/MybatisPlusGenerator.java | 361 ++++++++++++++++++ .../tools/controller/PlayerController.java | 4 + .../controller/ServerToolsController.java | 5 + .../controller/SmallToolsController.java | 5 + .../tools/controller/SqlToolsController.java | 34 ++ .../zhangmeng/tools/utils/ResourcesUtils.java | 1 + src/main/resources/fxml/codec-tools.fxml | 1 + src/main/resources/fxml/home.fxml | 1 + src/main/resources/fxml/http-tools.fxml | 1 + .../fxml/mybatis-plus-generator.fxml | 49 +++ src/main/resources/fxml/player.fxml | 1 + src/main/resources/fxml/server-tools.fxml | 1 + src/main/resources/fxml/small-tools.fxml | 1 + src/main/resources/fxml/sql-tools.fxml | 1 + src/main/resources/static/redame/img_35.png | Bin 0 -> 65931 bytes src/main/resources/static/redame/img_36.png | Bin 0 -> 121112 bytes 21 files changed, 500 insertions(+) create mode 100644 src/main/java/com/zhangmeng/tools/controller/MybatisPlusGenerator.java create mode 100644 src/main/resources/fxml/mybatis-plus-generator.fxml create mode 100644 src/main/resources/static/redame/img_35.png create mode 100644 src/main/resources/static/redame/img_36.png diff --git a/README.md b/README.md index c7750a6..e449277 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,15 @@ > 部分代码借鉴 开源项目: boot-security gitee 地址: https://gitee.com/zhang.w/boot-security +#### 5.2 mybatis-plus 代码生成 + +> 使用 mybatis-plus 生成,配置可视化 + +![](./src/main/resources/static/redame/img_35.png) +![](./src/main/resources/static/redame/img_36.png) + + + ### 6. 网络工具 #### 6.1 websocket 工具 diff --git a/pom.xml b/pom.xml index d49bb9b..4a00d34 100644 --- a/pom.xml +++ b/pom.xml @@ -300,6 +300,19 @@ freemarker 2.3.31 + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + com.baomidou + mybatis-plus + 3.5.2 + + diff --git a/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java b/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java index f8fe3c5..b3646e0 100644 --- a/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java @@ -550,4 +550,8 @@ public class CodecToolsController { public void telephone_menu_item(ActionEvent event) { load_small_tools(8); } + + public void mybatis_plus_gen_menu_item(ActionEvent event) { + load_sql_tools(1); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/HomeController.java b/src/main/java/com/zhangmeng/tools/controller/HomeController.java index 2cc7d84..b0b192d 100644 --- a/src/main/java/com/zhangmeng/tools/controller/HomeController.java +++ b/src/main/java/com/zhangmeng/tools/controller/HomeController.java @@ -475,4 +475,8 @@ public class HomeController implements Serializable { public void telephone_menu_item(ActionEvent event) { load_small_tools(8); } + + public void mybatis_plus_gen_menu_item(ActionEvent event) { + load_sql_tools(1); + } } \ No newline at end of file diff --git a/src/main/java/com/zhangmeng/tools/controller/HttpToolsController.java b/src/main/java/com/zhangmeng/tools/controller/HttpToolsController.java index c05df92..8984763 100644 --- a/src/main/java/com/zhangmeng/tools/controller/HttpToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/HttpToolsController.java @@ -486,4 +486,8 @@ public class HttpToolsController { public void telephone_menu_item(ActionEvent event) { load_small_tools(8); } + + public void mybatis_plus_gen_menu_item(ActionEvent event) { + load_sql_tools(1); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/MybatisPlusGenerator.java b/src/main/java/com/zhangmeng/tools/controller/MybatisPlusGenerator.java new file mode 100644 index 0000000..4347b9d --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/controller/MybatisPlusGenerator.java @@ -0,0 +1,361 @@ +package com.zhangmeng.tools.controller; + +import cn.hutool.core.text.StrFormatter; +import com.alibaba.druid.pool.DruidDataSource; +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; +import com.zhangmeng.tools.dto.BeanField; +import com.zhangmeng.tools.dto.GenerateDetail; +import com.zhangmeng.tools.utils.AlertUtils; +import com.zhangmeng.tools.utils.TemplateUtil; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.geometry.Pos; +import javafx.scene.control.*; +import javafx.scene.layout.HBox; +import javafx.util.Callback; +import lombok.extern.slf4j.Slf4j; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.util.CollectionUtils; + +import javax.sound.sampled.Port; +import java.math.BigDecimal; +import java.util.*; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-03-22 14:03 + */ +@Slf4j +public class MybatisPlusGenerator { + + @FXML + public TextField url; + + @FXML + public TextField username; + + @FXML + public TextField password; + + @FXML + public TextField author; + + @FXML + public TextField out_dir; + + @FXML + public TextField prefix; + + @FXML + public TextField mapper_xml_path; + + @FXML + public TextField model_name; + + @FXML + public TextField parent_package; + + @FXML + public Button generator; + + @FXML + private TextField port; + + @FXML + private ComboBox comboBox_data_base; + + @FXML + private TextField data_base; + + @FXML + public ListView listView; + + private final ObservableList data_base_list = FXCollections.observableArrayList(); + private final ObservableList table_list = FXCollections.observableArrayList(); + + private JdbcTemplate jdbcTemplate; + + @FXML + public void initialize() { + + if (url.getText().length() == 0) { + url.setText("localhost"); + } + + if (username.getText().length() == 0) { + username.setText("root"); + } + + if (port.getText().length() == 0) { + port.setText("3306"); + } + + if (password.getText().length() == 0) { + password.setText("root"); + } + + if (author.getText().length() == 0) { + author.setText("zhangmeng"); + } + + if (out_dir.getText().length() == 0) { + out_dir.setText("D:\\mybatis_gen"); + } + + if (prefix.getText().length() == 0) { + prefix.setText("dashidao,t"); + } + + if (mapper_xml_path.getText().length() == 0) { + mapper_xml_path.setText("D:\\mybatis_gen\\mapper"); + } + + if (model_name.getText().length() == 0) { + model_name.setText("server"); + } + + if (parent_package.getText().length() == 0) { + parent_package.setText("com.zhangmeng"); + } + + comboBox_data_base.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue != null) { + log.info("选择的数据库名为:{}", newValue); + data_base.setText(newValue); + update_select_data_base(); + } + }); + + listView.setItems(table_list); + listView.setFixedCellSize(40); + listView.getSelectionModel().select(0); + listView.setCellFactory(new Callback<>() { + @Override + public ListCell call(ListView param) { + return new ListCell<>() { + @Override + protected void updateItem(String item, boolean empty) { + super.updateItem(item, empty); + if (!empty) { + HBox hBox = new HBox(); + hBox.setAlignment(Pos.CENTER); + hBox.getChildren().add(new Label(item)); + this.setGraphic(hBox); + } + } + }; + } + }); + + generator.setOnAction(event -> { + + String ur1 = getUrl(url.getText(), Integer.parseInt(port.getText()), data_base.getText()); + DataSourceInfo dataSourceInfo = new DataSourceInfo(); + dataSourceInfo.setUrl(ur1); + dataSourceInfo.setUsername(username.getText()); + dataSourceInfo.setPassword(password.getText()); + dataSourceInfo.setAuthor(author.getText()); + dataSourceInfo.setOut_dir(out_dir.getText()); + dataSourceInfo.setParent_package_name(parent_package.getText()); + dataSourceInfo.setParent_module_name(model_name.getText()); + dataSourceInfo.setMapper_xml_path(mapper_xml_path.getText()); + String text = prefix.getText(); + String[] prefixes = text.split(","); + dataSourceInfo.setTable_prefixes(prefixes); + List tables = new ArrayList<>(table_list); + dataSourceInfo.setTables(tables); + generator(dataSourceInfo); + AlertUtils.alert_msg("生成成功!"); + }); + } + + @FXML + public void get_all_data_base() { + log.info("获取所有数据表....."); + data_base_list.clear(); + getJdbcTemplate(); + List> maps = this.jdbcTemplate.queryForList("show databases"); + for (Map map : maps) { + log.info("map->{}", map.toString()); + data_base_list.add(map.get("Database").toString()); + } + comboBox_data_base.setItems(data_base_list); + comboBox_data_base.getSelectionModel().select(0); + data_base.setText(comboBox_data_base.getSelectionModel().getSelectedItem()); + } + + @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); + } + } + + private void update_select_data_base() { + String text = data_base.getText(); + getJdbcTemplate(); + log.info("update_select_data_base:{}", text); + this.jdbcTemplate.execute("use `" + text + "`"); + } + + public String getUrl(String ip, int port, String data_base) { + return StrFormatter.format("jdbc:mysql://{}:{}/{}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true", ip, port, data_base); + } + + public void generator(DataSourceInfo dataSourceInfo) { + FastAutoGenerator.create(dataSourceInfo.getUrl(), dataSourceInfo.getUsername(), dataSourceInfo.getPassword()).globalConfig(builder -> { + builder.author(dataSourceInfo.author) // 设置作者 +// .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(dataSourceInfo.getOut_dir()); // 指定输出目录 + }).packageConfig(builder -> { + builder.parent(dataSourceInfo.getParent_package_name()) // 设置父包名 + .moduleName(dataSourceInfo.getParent_module_name()) // 设置父包模块名 + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, dataSourceInfo.getMapper_xml_path())); // 设置mapperXml生成路径 + }).strategyConfig(builder -> { + builder.addInclude(dataSourceInfo.getTables()) // 设置需要生成的表名 + .addTablePrefix(dataSourceInfo.getTable_prefixes()); // 设置过滤表前缀 + }).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + + public JdbcTemplate getJdbcTemplate() { + + if (jdbcTemplate == null) { + jdbcTemplate = new JdbcTemplate(); + + DruidDataSource datasource = new DruidDataSource(); + String con = "jdbc:mysql://" + url.getText() + ":" + port.getText() + "/" + data_base.getText() + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true"; + String driverClassName = "com.mysql.jdbc.Driver"; + datasource.setUrl(con); + datasource.setUsername(username.getText()); + datasource.setPassword(password.getText()); + datasource.setDriverClassName(driverClassName); + + jdbcTemplate.setDataSource(datasource); + } + return jdbcTemplate; + } + + public static class DataSourceInfo { + + public DataSourceInfo() { + } + + public DataSourceInfo(String url, String username, String password, String author, String out_dir, String parent_package_name, String parent_module_name, String mapper_xml_path, List tables, String[] table_prefixes) { + this.url = url; + this.username = username; + this.password = password; + this.author = author; + this.out_dir = out_dir; + this.parent_package_name = parent_package_name; + this.parent_module_name = parent_module_name; + this.mapper_xml_path = mapper_xml_path; + this.tables = tables; + this.table_prefixes = table_prefixes; + } + + private String url; + private String username; + private String password; + private String author; + private String out_dir; + private String parent_package_name; + private String parent_module_name;//设置父包模块名 + private String mapper_xml_path;//设置mapperXml生成路径; + + private List tables;//表名 + + private String[] table_prefixes; + + public String[] getTable_prefixes() { + return table_prefixes; + } + + public void setTable_prefixes(String[] table_prefixes) { + this.table_prefixes = table_prefixes; + } + + public List getTables() { + return tables; + } + + public void setTables(List tables) { + this.tables = tables; + } + + public String getMapper_xml_path() { + return mapper_xml_path; + } + + public void setMapper_xml_path(String mapper_xml_path) { + this.mapper_xml_path = mapper_xml_path; + } + + public String getParent_module_name() { + return parent_module_name; + } + + public void setParent_module_name(String parent_module_name) { + this.parent_module_name = parent_module_name; + } + + public String getParent_package_name() { + return parent_package_name; + } + + public void setParent_package_name(String parent_package_name) { + this.parent_package_name = parent_package_name; + } + + public String getOut_dir() { + return out_dir; + } + + public void setOut_dir(String out_dir) { + this.out_dir = out_dir; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + } + +} diff --git a/src/main/java/com/zhangmeng/tools/controller/PlayerController.java b/src/main/java/com/zhangmeng/tools/controller/PlayerController.java index be7d094..ec432f5 100644 --- a/src/main/java/com/zhangmeng/tools/controller/PlayerController.java +++ b/src/main/java/com/zhangmeng/tools/controller/PlayerController.java @@ -508,4 +508,8 @@ public class PlayerController { public void telephone_menu_item(ActionEvent event) { load_small_tools(8); } + + public void mybatis_plus_gen_menu_item(ActionEvent event) { + load_sql_tools(1); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/ServerToolsController.java b/src/main/java/com/zhangmeng/tools/controller/ServerToolsController.java index 8287d4b..63cfe10 100644 --- a/src/main/java/com/zhangmeng/tools/controller/ServerToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/ServerToolsController.java @@ -511,4 +511,9 @@ public class ServerToolsController { public void telephone_menu_item(ActionEvent event) { load_small_tools(8); } + + public void mybatis_plus_gen_menu_item(ActionEvent event) { + + load_sql_tools(1); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java index 86021cc..faffd5f 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java @@ -697,4 +697,9 @@ public class SmallToolsController { } telephone(flag); } + + public void mybatis_plus_gen_menu_item(ActionEvent event) { + + load_mysql_tools(1); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java b/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java index ea4b15b..d9a4ce9 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java @@ -65,6 +65,7 @@ public class SqlToolsController { private AnchorPane root; private AnchorPane mysql_code_gen; private AnchorPane spring_security; + private AnchorPane mybatis_plus_gen; public static final String color_cell = "#f4f4f4"; @@ -214,6 +215,13 @@ public class SqlToolsController { } mysql_code_gen(flag); } + + if (newValue.getIndex() == 1) { + if (mybatis_plus_gen != null){ + flag = true; + } + mybatis_plus_gen(flag); + } } }); } @@ -221,6 +229,7 @@ public class SqlToolsController { public static Image getImage(ResourcesUtils.SqlTools player){ return switch (player){ case MySql_Code_Generate -> new Image(ImagePath.path(ImagePath.ImagePathType.MD5)); + case MyBatis_plus_Generate -> new Image(ImagePath.path(ImagePath.ImagePathType.MD5)); }; } @@ -295,6 +304,23 @@ public class SqlToolsController { common_method(); } + private void mybatis_plus_gen(boolean flag){ + //默认选择第一个 + listView.getSelectionModel().select(1); + + if (!flag){ + try { + root = FXMLLoader.load(ResourcesUtils.getResource("mybatis-plus-generator")); + } catch (IOException e) { + e.printStackTrace(); + } + mybatis_plus_gen = root; + }else { + root = mybatis_plus_gen; + } + common_method(); + } + private void common_method() { splitPane.getItems().remove(1); splitPane.getItems().add(1, root); @@ -431,4 +457,12 @@ public class SqlToolsController { public void telephone_menu_item(ActionEvent event) { load_small_tools(8); } + + public void mybatis_plus_gen_menu_item(ActionEvent event) { + boolean flag =false; + if (mybatis_plus_gen != null){ + flag = true; + } + mybatis_plus_gen(flag); + } } diff --git a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java index 2d1e908..c931e85 100644 --- a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java +++ b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java @@ -182,6 +182,7 @@ public class ResourcesUtils { public enum SqlTools{ MySql_Code_Generate("mysql 代码生成",0), + MyBatis_plus_Generate("mybatis-plus 代码生成",1), ; SqlTools(String title, int index) { diff --git a/src/main/resources/fxml/codec-tools.fxml b/src/main/resources/fxml/codec-tools.fxml index e6f55f7..3125da7 100644 --- a/src/main/resources/fxml/codec-tools.fxml +++ b/src/main/resources/fxml/codec-tools.fxml @@ -52,6 +52,7 @@ + diff --git a/src/main/resources/fxml/home.fxml b/src/main/resources/fxml/home.fxml index 191b7e5..c86b839 100644 --- a/src/main/resources/fxml/home.fxml +++ b/src/main/resources/fxml/home.fxml @@ -54,6 +54,7 @@ + diff --git a/src/main/resources/fxml/http-tools.fxml b/src/main/resources/fxml/http-tools.fxml index 57499ba..8776fb9 100644 --- a/src/main/resources/fxml/http-tools.fxml +++ b/src/main/resources/fxml/http-tools.fxml @@ -54,6 +54,7 @@ + diff --git a/src/main/resources/fxml/mybatis-plus-generator.fxml b/src/main/resources/fxml/mybatis-plus-generator.fxml new file mode 100644 index 0000000..2f51da3 --- /dev/null +++ b/src/main/resources/fxml/mybatis-plus-generator.fxml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + +