mystyle-java-fx-tools/src/main/java/com/zhangmeng/tools/controller/MybatisPlusGenerator.java

374 lines
12 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.zhangmeng.tools.controller;
import cn.hutool.core.text.StrFormatter;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
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<String> comboBox_data_base;
@FXML
private TextField data_base;
@FXML
public ListView<String> listView;
private final ObservableList<String> data_base_list = FXCollections.observableArrayList();
private final ObservableList<String> 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<String> call(ListView<String> 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<String> 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<Map<String, Object>> maps = this.jdbcTemplate.queryForList("show databases");
for (Map<String, Object> 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<Map<String, Object>> 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<String, Object> 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())
.entityBuilder()
.enableChainModel()
.enableLombok()
.enableRemoveIsPrefix()
.enableTableFieldAnnotation()
.enableActiveRecord()
.naming(NamingStrategy.no_change)
.columnNaming(NamingStrategy.underline_to_camel)
.idType(IdType.AUTO)
.build();
}).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<String> 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<String> 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<String> getTables() {
return tables;
}
public void setTables(List<String> 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;
}
}
}