2023年11月18日14:23:14

master
zhangmeng 2023-11-18 14:23:32 +08:00
parent 2226b85e38
commit 333be28e0e
8 changed files with 741 additions and 283 deletions

View File

@ -40,6 +40,7 @@ public class GoToolsController implements Serializable {
private SimpleDoubleProperty height = new SimpleDoubleProperty(0.0);
private AnchorPane root;
private AnchorPane json_to_struct;
private AnchorPane mysql_to_struct;
public static final String color_cell = "#f4f4f4";
@ -254,10 +255,34 @@ public class GoToolsController implements Serializable {
}
json_to_struct(flag);
}
if (newValue.getIndex() == 1) {
if (mysql_to_struct != null){
flag = true;
}
mysql_to_struct(flag);
}
}
});
}
private void mysql_to_struct(boolean flag) {
//默认选择第一个
listView.getSelectionModel().select(1);
if (!flag){
try {
root = FXMLLoader.load(ResourcesUtils.getResource("mysql-to-struct"));
} catch (IOException e) {
e.printStackTrace();
}
mysql_to_struct = root;
}else {
root = mysql_to_struct;
}
common_method();
}
private void json_to_struct(boolean flag){
//默认选择第一个
listView.getSelectionModel().select(0);
@ -278,6 +303,7 @@ public class GoToolsController implements Serializable {
public static Image getImage(ResourcesUtils.GoTools player){
return switch (player){
case Json_Struct -> new Image(ImagePath.path(ImagePath.ImagePathType.MD5));
case Mysql_Struct -> new Image(ImagePath.path(ImagePath.ImagePathType.MD5));
};
}

View File

@ -685,4 +685,8 @@ public class HomeController implements Serializable {
public void excel_read_menu_item(ActionEvent actionEvent) {
load_small_tools(21);
}
public void mysql_to_struct_menu_item(ActionEvent actionEvent) {
load_go_tools(1);
}
}

View File

@ -0,0 +1,332 @@
package com.zhangmeng.tools.controller;
import com.alibaba.druid.pool.DruidDataSource;
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.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.TextFieldTableCell;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
@Slf4j
public class MySQLToStructController {
@FXML
public TextArea struct_view;
private JdbcTemplate jdbcTemplate;
/**
* mysqljava
*/
private static Map<String, String> map = new HashMap<>();
static {
map.put("int", "int");
map.put("tinyint", "int8");
map.put("double", "float64");
map.put("float", "float32");
map.put("decimal", "big.Float");
map.put("date", "time.Time");
map.put("timestamp", "time.Time");
map.put("datetime", "time.Time");
map.put("varchar", "string");
map.put("text", "string");
map.put("longtext", "string");
map.put("bit", "bool");
map.put("bigint", "int64");
}
@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);
}
private TextField bean_class_name_field;
private TextField bean_package_name_field;
@FXML
private TableColumn<BeanField, String> column_name;
@FXML
private TableColumn<BeanField, String> column_type;
@FXML
private TableColumn<BeanField, String> bean_field_name;
@FXML
private TableColumn<BeanField, String> bean_field_type;
@FXML
private TableColumn<BeanField, String> bean_field_value;
@FXML
private TableView<BeanField> tableView;
public ObservableList<BeanField> 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<String> comboBox_table;
@FXML
private ComboBox<String> comboBox_data_base;
private SimpleObjectProperty<GenerateDetail> bean_info = new SimpleObjectProperty<>();
private ObservableList<String> table_list = FXCollections.observableArrayList();
private ObservableList<String> data_base_list = FXCollections.observableArrayList();
public static final String bean_package_name = "models";
@FXML
public void initialize() {
bean_class_name_field = new TextField();
bean_package_name_field = new TextField();
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);
}
});
comboBox_data_base.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != null) {
log.info("选择的数据库名为:{}", newValue);
data_base.setText(newValue);
update_select_data_base();
}
});
}
private void update_select_data_base() {
String text = data_base.getText();
getJdbcTemplate();
log.info("update_select_data_base:{}", text);
this.jdbcTemplate.execute("use `" + text + "`");
}
@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 save_code() {
log.info("代码生成保存!");
GenerateDetail generateDetail = bean_info.getValue();
if (generateDetail == null) {
AlertUtils.alert_warning("请预览之后在进行操作!");
return;
}
// assignment_to_filed(generateDetail);
GenerateInput generateInput = new GenerateInput();
generateInput.setTableName(generateDetail.getTableName());
generateInput.setBeanName(bean_class_name_field.getText());
generateInput.setBeanPackageName(bean_package_name_field.getText());
List<BeanField> fields = generateDetail.getFields();
List<String> beanFieldName = new ArrayList<>();
List<String> beanFieldType = new ArrayList<>();
List<String> beanFieldValue = new ArrayList<>();
List<String> 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);
String txt =TemplateUtil.saveStruct(generateInput);
struct_view.setText(txt);
log.info("生成成功!");
//清空
bean_info.setValue(null);
}
@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);
}
comboBox_table.setItems(table_list);
comboBox_table.getSelectionModel().select(0);
}
private void assignment_to_filed(GenerateDetail generateDetail) {
String bean_class_name = generateDetail.getBeanName();
bean_class_name_field.setText(bean_class_name);
bean_package_name_field.setText(bean_package_name);
list.clear();
List<BeanField> 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.jdbc.Driver";
datasource.setUrl(url);
datasource.setUsername(username.getText());
datasource.setPassword(password.getText());
datasource.setDriverClassName(driverClassName);
jdbcTemplate.setDataSource(datasource);
}
return jdbcTemplate;
}
private RowMapper<BeanField> beanFieldMapper = (rs, paramInt) -> {
BeanField beanField = new BeanField();
beanField.setColumnName(rs.getString("column_name"));
beanField.setColumnType(rs.getString("data_type"));
beanField.setColumnComment(rs.getString("column_comment"));
beanField.setColumnDefault(rs.getString("column_default"));
return beanField;
};
public GenerateDetail generateByTableName(String tableName) {
GenerateDetail detail = new GenerateDetail();
detail.setBeanName(upperFirstChar(tableName));
List<BeanField> fields = listBeanField(tableName);
detail.setFields(fields);
detail.setTableName(tableName);
return detail;
}
public List<BeanField> listBeanField(String tableName) {
getJdbcTemplate();
List<BeanField> 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 + "不存在");
}
beanFields.parallelStream().forEach(b -> {
b.setName(TemplateUtil.str2hump(b.getColumnName()));
String type = map.get(b.getColumnType());
if (type == null) {
type = "string";
}
b.setType(type);
if ("id".equals(b.getName())) {
b.setType("int64");
}
b.setColumnDefault(b.getColumnDefault() == null ? "" : b.getColumnDefault());
});
return beanFields;
}
public String upperFirstChar(String string) {
String name = TemplateUtil.str2hump(string);
String firstChar = name.substring(0, 1);
name = name.replaceFirst(firstChar, firstChar.toUpperCase());
return name;
}
}

View File

@ -333,6 +333,7 @@ public class ResourcesUtils {
public enum GoTools {
Json_Struct("json生成结构体", 0),
Mysql_Struct("mysql生成结构体", 1),
;
GoTools(String title, int index) {

View File

@ -38,52 +38,55 @@ import java.util.List;
public class TemplateUtil {
private static final Logger log = LoggerFactory.getLogger("adminLogger");
private static final Logger log = LoggerFactory.getLogger("adminLogger");
public static String getTemplete(String fileName) {
return FileUtil.getText(TemplateUtil.class.getClassLoader().getResourceAsStream("generate/" + fileName));
}
public static String getTemplete(String fileName) {
return FileUtil.getText(TemplateUtil.class.getClassLoader().getResourceAsStream("generate/" + fileName));
}
public static void saveJava(GenerateInput input) {
String path = input.getPath();
String beanPackageName = input.getBeanPackageName();
String beanName = input.getBeanName();
List<String> beanFieldName = input.getBeanFieldName();
List<String> beanFieldType = input.getBeanFieldType();
List<String> beanFieldValue = input.getBeanFieldValue();
public static String getTemplete(String fileName, String path) {
return FileUtil.getText(TemplateUtil.class.getClassLoader().getResourceAsStream(path + "/" + fileName));
}
String text = getTemplete("java.txt");
text = text.replace("{beanPackageName}", beanPackageName).replace("{beanName}", beanName);
public static void saveJava(GenerateInput input) {
String path = input.getPath();
String beanPackageName = input.getBeanPackageName();
String beanName = input.getBeanName();
List<String> beanFieldName = input.getBeanFieldName();
List<String> beanFieldType = input.getBeanFieldType();
List<String> beanFieldValue = input.getBeanFieldValue();
String imports = "";
if (beanFieldType.contains(BigDecimal.class.getSimpleName())) {
imports += "import " + BigDecimal.class.getName() + ";\n";
}
if (beanFieldType.contains(Date.class.getSimpleName())) {
imports += "import " + Date.class.getName() + ";";
}
String text = getTemplete("java.txt");
text = text.replace("{beanPackageName}", beanPackageName).replace("{beanName}", beanName);
text = text.replace("{import}", imports);
String filelds = getFields(beanFieldName, beanFieldType, beanFieldValue);
text = text.replace("{filelds}", filelds);
text = text.replace("{getset}", getset(beanFieldName, beanFieldType));
String imports = "";
if (beanFieldType.contains(BigDecimal.class.getSimpleName())) {
imports += "import " + BigDecimal.class.getName() + ";\n";
}
if (beanFieldType.contains(Date.class.getSimpleName())) {
imports += "import " + Date.class.getName() + ";";
}
FileUtil.saveTextFile(text, path + File.separator + getPackagePath(beanPackageName) + beanName + ".java");
log.debug("生成java model{}模板", beanName);
}
text = text.replace("{import}", imports);
String filelds = getFields(beanFieldName, beanFieldType, beanFieldValue);
text = text.replace("{filelds}", filelds);
text = text.replace("{getset}", getset(beanFieldName, beanFieldType));
private static String getFields(List<String> beanFieldName, List<String> beanFieldType,
List<String> beanFieldValue) {
StringBuffer buffer = new StringBuffer();
int size = beanFieldName.size();
for (int i = 0; i < size; i++) {
String name = beanFieldName.get(i);
if ("id".equals(name) || "createTime".equals(name) || "updateTime".equals(name)) {
continue;
}
String type = beanFieldType.get(i);
buffer.append("\tprivate ").append(type).append(" ").append(name);
// 默认值
FileUtil.saveTextFile(text, path + File.separator + getPackagePath(beanPackageName) + beanName + ".java");
log.debug("生成java model{}模板", beanName);
}
private static String getFields(List<String> beanFieldName, List<String> beanFieldType, List<String> beanFieldValue) {
StringBuffer buffer = new StringBuffer();
int size = beanFieldName.size();
for (int i = 0; i < size; i++) {
String name = beanFieldName.get(i);
if ("id".equals(name) || "createTime".equals(name) || "updateTime".equals(name)) {
continue;
}
String type = beanFieldType.get(i);
buffer.append("\tprivate ").append(type).append(" ").append(name);
// 默认值
// String value = beanFieldValue.get(i);
// if (!StringUtils.isEmpty(value)) {
// buffer.append(" = ");
@ -99,287 +102,323 @@ public class TemplateUtil {
//
// buffer.append(value);
// }
buffer.append(";\n");
}
buffer.append(";\n");
}
return buffer.toString();
}
return buffer.toString();
}
private static String getset(List<String> beanFieldName, List<String> beanFieldType) {
StringBuffer buffer = new StringBuffer();
int size = beanFieldName.size();
for (int i = 0; i < size; i++) {
String name = beanFieldName.get(i);
if ("id".equals(name) || "createTime".equals(name) || "updateTime".equals(name)) {
continue;
}
private static String getFields_go(List<String> beanFieldName, List<String> beanFieldType,List<String> columnNames) {
StringBuffer buffer = new StringBuffer();
int size = beanFieldName.size();
for (int i = 0; i < size; i++) {
String name = beanFieldName.get(i);
if ("createTime".equals(name) || "updateTime".equals(name)) {
continue;
}
String type = beanFieldType.get(i);
String co_name = columnNames.get(i);
buffer.append("\n").append("\t").append(upperFirstChar(name)).append(" ").append(type).append(" ").append("`json:\"" + co_name +"\"`");
buffer.append("\n");
}
String type = beanFieldType.get(i);
buffer.append("\tpublic ").append(type).append(" get")
.append(StringUtils.substring(name, 0, 1).toUpperCase() + name.substring(1, name.length()))
.append("() {\n");
buffer.append("\t\treturn ").append(name).append(";\n");
buffer.append("\t}\n");
buffer.append("\tpublic void set")
.append(StringUtils.substring(name, 0, 1).toUpperCase() + name.substring(1, name.length()))
.append("(").append(type).append(" ").append(name).append(") {\n");
buffer.append("\t\tthis.").append(name).append(" = ").append(name).append(";\n");
buffer.append("\t}\n");
}
return buffer.toString();
}
return buffer.toString();
}
private static String getset(List<String> beanFieldName, List<String> beanFieldType) {
StringBuffer buffer = new StringBuffer();
int size = beanFieldName.size();
for (int i = 0; i < size; i++) {
String name = beanFieldName.get(i);
if ("id".equals(name) || "createTime".equals(name) || "updateTime".equals(name)) {
continue;
}
public static void saveJavaDao(GenerateInput input) {
String path = input.getPath();
String tableName = input.getTableName();
String beanPackageName = input.getBeanPackageName();
String beanName = input.getBeanName();
String daoPackageName = input.getDaoPackageName();
String daoName = input.getDaoName();
String type = beanFieldType.get(i);
buffer.append("\tpublic ").append(type).append(" get").append(StringUtils.substring(name, 0, 1).toUpperCase() + name.substring(1, name.length())).append("() {\n");
buffer.append("\t\treturn ").append(name).append(";\n");
buffer.append("\t}\n");
buffer.append("\tpublic void set").append(StringUtils.substring(name, 0, 1).toUpperCase() + name.substring(1, name.length())).append("(").append(type).append(" ").append(name).append(") {\n");
buffer.append("\t\tthis.").append(name).append(" = ").append(name).append(";\n");
buffer.append("\t}\n");
}
String text = getTemplete("dao.txt");
text = text.replace("{daoPackageName}", daoPackageName);
text = text.replace("{beanPackageName}", beanPackageName);
text = text.replace("{daoName}", daoName);
text = text.replace("{table_name}", tableName);
text = text.replace("{beanName}", beanName);
text = text.replace("{beanParamName}", lowerFirstChar(beanName));
return buffer.toString();
}
String insertColumns = getInsertColumns(input.getColumnNames());
text = text.replace("{insert_columns}", insertColumns);
String insertValues = getInsertValues(input.getColumnNames(), input.getBeanFieldName());
text = text.replace("{insert_values}", insertValues);
FileUtil.saveTextFile(text, path + File.separator + getPackagePath(daoPackageName) + daoName + ".java");
log.debug("生成java dao{}模板", beanName);
public static void saveJavaDao(GenerateInput input) {
String path = input.getPath();
String tableName = input.getTableName();
String beanPackageName = input.getBeanPackageName();
String beanName = input.getBeanName();
String daoPackageName = input.getDaoPackageName();
String daoName = input.getDaoName();
text = getTemplete("mapper.xml");
text = text.replace("{daoPackageName}", daoPackageName);
text = text.replace("{daoName}", daoName);
text = text.replace("{table_name}", tableName);
text = text.replace("{beanName}", beanName);
String sets = getUpdateSets(input.getColumnNames(), input.getBeanFieldName());
text = text.replace("{update_sets}", sets);
String where = getWhere(input.getColumnNames(), input.getBeanFieldName());
text = text.replace("{where}", where);
FileUtil.saveTextFile(text, path + File.separator + beanName + "Mapper.xml");
}
String text = getTemplete("dao.txt");
text = text.replace("{daoPackageName}", daoPackageName);
text = text.replace("{beanPackageName}", beanPackageName);
text = text.replace("{daoName}", daoName);
text = text.replace("{table_name}", tableName);
text = text.replace("{beanName}", beanName);
text = text.replace("{beanParamName}", lowerFirstChar(beanName));
private static String getInsertValues(List<String> columnNames, List<String> beanFieldName) {
StringBuffer buffer = new StringBuffer();
int size = columnNames.size();
for (int i = 0; i < size; i++) {
String column = columnNames.get(i);
if (!"id".equals(column)) {
buffer.append("#{").append(beanFieldName.get(i)).append("}, ");
}
}
String insertColumns = getInsertColumns(input.getColumnNames());
text = text.replace("{insert_columns}", insertColumns);
String insertValues = getInsertValues(input.getColumnNames(), input.getBeanFieldName());
text = text.replace("{insert_values}", insertValues);
FileUtil.saveTextFile(text, path + File.separator + getPackagePath(daoPackageName) + daoName + ".java");
log.debug("生成java dao{}模板", beanName);
String sets = StringUtils.substringBeforeLast(buffer.toString(), ",");
return sets;
}
text = getTemplete("mapper.xml");
text = text.replace("{daoPackageName}", daoPackageName);
text = text.replace("{daoName}", daoName);
text = text.replace("{table_name}", tableName);
text = text.replace("{beanName}", beanName);
String sets = getUpdateSets(input.getColumnNames(), input.getBeanFieldName());
text = text.replace("{update_sets}", sets);
String where = getWhere(input.getColumnNames(), input.getBeanFieldName());
text = text.replace("{where}", where);
FileUtil.saveTextFile(text, path + File.separator + beanName + "Mapper.xml");
}
private static String getInsertColumns(List<String> columnNames) {
StringBuffer buffer = new StringBuffer();
int size = columnNames.size();
for (int i = 0; i < size; i++) {
String column = columnNames.get(i);
if (!"id".equals(column)) {
buffer.append(column).append(", ");
}
}
private static String getInsertValues(List<String> columnNames, List<String> beanFieldName) {
StringBuffer buffer = new StringBuffer();
int size = columnNames.size();
for (int i = 0; i < size; i++) {
String column = columnNames.get(i);
if (!"id".equals(column)) {
buffer.append("#{").append(beanFieldName.get(i)).append("}, ");
}
}
String insertColumns = StringUtils.substringBeforeLast(buffer.toString(), ",");
return insertColumns;
}
String sets = StringUtils.substringBeforeLast(buffer.toString(), ",");
return sets;
}
private static String getUpdateSets(List<String> columnNames, List<String> beanFieldName) {
StringBuffer buffer = new StringBuffer();
int size = columnNames.size();
for (int i = 0; i < size; i++) {
String column = columnNames.get(i);
if (!"id".equals(column)) {
buffer.append("\t\t\t<if test=\"" + beanFieldName.get(i) + " != null\">\n");
buffer.append("\t\t\t\t" + column).append(" = ").append("#{").append(beanFieldName.get(i))
.append("}, \n");
buffer.append("\t\t\t</if>\n");
}
}
private static String getInsertColumns(List<String> columnNames) {
StringBuffer buffer = new StringBuffer();
int size = columnNames.size();
for (int i = 0; i < size; i++) {
String column = columnNames.get(i);
if (!"id".equals(column)) {
buffer.append(column).append(", ");
}
}
return buffer.toString();
}
String insertColumns = StringUtils.substringBeforeLast(buffer.toString(), ",");
return insertColumns;
}
private static String getWhere(List<String> columnNames, List<String> beanFieldName) {
StringBuffer buffer = new StringBuffer();
int size = columnNames.size();
for (int i = 0; i < size; i++) {
String column = columnNames.get(i);
buffer.append("\t\t\t<if test=\"params." + beanFieldName.get(i) + " != null and params." + beanFieldName.get(i) + " != ''\">\n");
buffer.append("\t\t\t\tand " + column).append(" = ").append("#{params.").append(beanFieldName.get(i))
.append("} \n");
buffer.append("\t\t\t</if>\n");
}
private static String getUpdateSets(List<String> columnNames, List<String> beanFieldName) {
StringBuffer buffer = new StringBuffer();
int size = columnNames.size();
for (int i = 0; i < size; i++) {
String column = columnNames.get(i);
if (!"id".equals(column)) {
buffer.append("\t\t\t<if test=\"" + beanFieldName.get(i) + " != null\">\n");
buffer.append("\t\t\t\t" + column).append(" = ").append("#{").append(beanFieldName.get(i)).append("}, \n");
buffer.append("\t\t\t</if>\n");
}
}
return buffer.toString();
}
return buffer.toString();
}
/**
*
*
* @param beanName
* @return
*/
public static String lowerFirstChar(String beanName) {
String name = str2hump(beanName);
String firstChar = name.substring(0, 1);
name = name.replaceFirst(firstChar, firstChar.toLowerCase());
private static String getWhere(List<String> columnNames, List<String> beanFieldName) {
StringBuffer buffer = new StringBuffer();
int size = columnNames.size();
for (int i = 0; i < size; i++) {
String column = columnNames.get(i);
buffer.append("\t\t\t<if test=\"params." + beanFieldName.get(i) + " != null and params." + beanFieldName.get(i) + " != ''\">\n");
buffer.append("\t\t\t\tand " + column).append(" = ").append("#{params.").append(beanFieldName.get(i)).append("} \n");
buffer.append("\t\t\t</if>\n");
}
return name;
}
return buffer.toString();
}
/**
*
*
* @param str
* @return
*/
public static String str2hump(String str) {
StringBuffer buffer = new StringBuffer();
if (str != null && str.length() > 0) {
if (str.contains("_")) {
String[] chars = str.split("_");
int size = chars.length;
if (size > 0) {
List<String> list = new ArrayList<>();
for (String s : chars) {
if (s != null && s.trim().length() > 0) {
list.add(s);
}
}
/**
*
*
* @param beanName
* @return
*/
public static String lowerFirstChar(String beanName) {
String name = str2hump(beanName);
String firstChar = name.substring(0, 1);
name = name.replaceFirst(firstChar, firstChar.toLowerCase());
size = list.size();
if (size > 0) {
buffer.append(list.get(0));
for (int i = 1; i < size; i++) {
String s = list.get(i);
buffer.append(s.substring(0, 1).toUpperCase());
if (s.length() > 1) {
buffer.append(s.substring(1));
}
}
}
}
} else {
buffer.append(str);
}
}
return name;
}
return buffer.toString();
}
/**
*
*
* @param str
* @return
*/
public static String str2hump(String str) {
StringBuffer buffer = new StringBuffer();
if (str != null && str.length() > 0) {
if (str.contains("_")) {
String[] chars = str.split("_");
int size = chars.length;
if (size > 0) {
List<String> list = new ArrayList<>();
for (String s : chars) {
if (s != null && s.trim().length() > 0) {
list.add(s);
}
}
size = list.size();
if (size > 0) {
buffer.append(list.get(0));
for (int i = 1; i < size; i++) {
String s = list.get(i);
buffer.append(s.substring(0, 1).toUpperCase());
if (s.length() > 1) {
buffer.append(s.substring(1));
}
}
}
}
} else {
buffer.append(str);
}
}
return buffer.toString();
}
private static String getPackagePath(String packageName) {
String packagePath = packageName.replace(".", "/");
if (!packagePath.endsWith("/")) {
packagePath = packagePath + "/";
}
private static String getPackagePath(String packageName) {
String packagePath = packageName.replace(".", "/");
if (!packagePath.endsWith("/")) {
packagePath = packagePath + "/";
}
return packagePath;
}
return packagePath;
}
public static void saveController(GenerateInput input) {
String path = input.getPath();
String beanPackageName = input.getBeanPackageName();
String beanName = input.getBeanName();
String daoPackageName = input.getDaoPackageName();
String daoName = input.getDaoName();
public static void saveController(GenerateInput input) {
String path = input.getPath();
String beanPackageName = input.getBeanPackageName();
String beanName = input.getBeanName();
String daoPackageName = input.getDaoPackageName();
String daoName = input.getDaoName();
String text = getTemplete("controller.txt");
text = text.replace("{daoPackageName}", daoPackageName);
text = text.replace("{beanPackageName}", beanPackageName);
text = text.replace("{daoName}", daoName);
text = text.replace("{daoParamName}", lowerFirstChar(daoName));
text = text.replace("{beanName}", beanName);
text = text.replace("{beanParamName}", lowerFirstChar(beanName));
text = text.replace("{controllerPkgName}", input.getControllerPkgName());
text = text.replace("{controllerName}", input.getControllerName());
String text = getTemplete("controller.txt");
text = text.replace("{daoPackageName}", daoPackageName);
text = text.replace("{beanPackageName}", beanPackageName);
text = text.replace("{daoName}", daoName);
text = text.replace("{daoParamName}", lowerFirstChar(daoName));
text = text.replace("{beanName}", beanName);
text = text.replace("{beanParamName}", lowerFirstChar(beanName));
text = text.replace("{controllerPkgName}", input.getControllerPkgName());
text = text.replace("{controllerName}", input.getControllerName());
FileUtil.saveTextFile(text, path + File.separator + getPackagePath(input.getControllerPkgName())
+ input.getControllerName() + ".java");
log.debug("生成controller{}模板", beanName);
}
FileUtil.saveTextFile(text, path + File.separator + getPackagePath(input.getControllerPkgName()) + input.getControllerName() + ".java");
log.debug("生成controller{}模板", beanName);
}
public static void saveHtmlList(GenerateInput input) {
String path = input.getPath();
String beanName = input.getBeanName();
String beanParamName = lowerFirstChar(beanName);
public static void saveHtmlList(GenerateInput input) {
String path = input.getPath();
String beanName = input.getBeanName();
String beanParamName = lowerFirstChar(beanName);
String text = getTemplete("htmlList.txt");
text = text.replace("{beanParamName}", beanParamName);
text = text.replace("{beanName}", beanName);
List<String> beanFieldNames = input.getBeanFieldName();
text = text.replace("{columnsDatas}", getHtmlColumnsDatas(beanFieldNames));
text = text.replace("{ths}", getHtmlThs(beanFieldNames));
String text = getTemplete("htmlList.txt");
text = text.replace("{beanParamName}", beanParamName);
text = text.replace("{beanName}", beanName);
List<String> beanFieldNames = input.getBeanFieldName();
text = text.replace("{columnsDatas}", getHtmlColumnsDatas(beanFieldNames));
text = text.replace("{ths}", getHtmlThs(beanFieldNames));
FileUtil.saveTextFile(text, path + File.separator + beanParamName + "List.html");
log.debug("生成查询页面:{}模板", beanName);
FileUtil.saveTextFile(text, path + File.separator + beanParamName + "List.html");
log.debug("生成查询页面:{}模板", beanName);
text = getTemplete("htmlAdd.txt");
text = text.replace("{beanParamName}", beanParamName);
text = text.replace("{addDivs}", getAddDivs(beanFieldNames));
FileUtil.saveTextFile(text, path + File.separator + "add" + beanName + ".html");
log.debug("生成添加页面:{}模板", beanName);
text = getTemplete("htmlAdd.txt");
text = text.replace("{beanParamName}", beanParamName);
text = text.replace("{addDivs}", getAddDivs(beanFieldNames));
FileUtil.saveTextFile(text, path + File.separator + "add" + beanName + ".html");
log.debug("生成添加页面:{}模板", beanName);
text = getTemplete("htmlUpdate.txt");
text = text.replace("{beanParamName}", beanParamName);
text = text.replace("{addDivs}", getAddDivs(beanFieldNames));
text = text.replace("{initData}", getInitData(beanFieldNames));
FileUtil.saveTextFile(text, path + File.separator + "update" + beanName + ".html");
log.debug("生成修改页面:{}模板", beanName);
}
text = getTemplete("htmlUpdate.txt");
text = text.replace("{beanParamName}", beanParamName);
text = text.replace("{addDivs}", getAddDivs(beanFieldNames));
text = text.replace("{initData}", getInitData(beanFieldNames));
FileUtil.saveTextFile(text, path + File.separator + "update" + beanName + ".html");
log.debug("生成修改页面:{}模板", beanName);
}
private static CharSequence getInitData(List<String> beanFieldNames) {
StringBuilder builder = new StringBuilder();
beanFieldNames.forEach(b -> {
builder.append("\t\t\t\t\t\t$('#" + b + "').val(data." + b + ");\n");
});
private static CharSequence getInitData(List<String> beanFieldNames) {
StringBuilder builder = new StringBuilder();
beanFieldNames.forEach(b -> {
builder.append("\t\t\t\t\t\t$('#" + b + "').val(data." + b + ");\n");
});
return builder.toString();
}
return builder.toString();
}
private static String getAddDivs(List<String> beanFieldNames) {
StringBuilder builder = new StringBuilder();
beanFieldNames.forEach(b -> {
if (!"id".equals(b) && !"createTime".equals(b) && !"updateTime".equals(b)) {
builder.append("\t\t\t<div class='form-group'>\n");
builder.append("\t\t\t\t<label class='col-md-2 control-label'>" + b + "</label>\n");
builder.append("\t\t\t\t<div class='col-md-10'>\n");
builder.append("\t\t\t\t\t<input class='form-control' placeholder='" + b + "' type='text' name='" + b
+ "' id='" + b + "' data-bv-notempty='true' data-bv-notempty-message='" + b + " 不能为空'>\n");
builder.append("\t\t\t\t</div>\n");
builder.append("\t\t\t</div>\n");
}
});
return builder.toString();
}
private static String getAddDivs(List<String> beanFieldNames) {
StringBuilder builder = new StringBuilder();
beanFieldNames.forEach(b -> {
if (!"id".equals(b) && !"createTime".equals(b) && !"updateTime".equals(b)) {
builder.append("\t\t\t<div class='form-group'>\n");
builder.append("\t\t\t\t<label class='col-md-2 control-label'>" + b + "</label>\n");
builder.append("\t\t\t\t<div class='col-md-10'>\n");
builder.append("\t\t\t\t\t<input class='form-control' placeholder='" + b + "' type='text' name='" + b + "' id='" + b + "' data-bv-notempty='true' data-bv-notempty-message='" + b + " 不能为空'>\n");
builder.append("\t\t\t\t</div>\n");
builder.append("\t\t\t</div>\n");
}
});
return builder.toString();
}
private static String getHtmlThs(List<String> beanFieldNames) {
StringBuilder builder = new StringBuilder();
beanFieldNames.forEach(b -> {
builder.append("\t\t\t\t\t\t\t\t\t<th>{beanFieldName}</th>\n".replace("{beanFieldName}", b));
});
return builder.toString();
}
private static String getHtmlThs(List<String> beanFieldNames) {
StringBuilder builder = new StringBuilder();
beanFieldNames.forEach(b -> {
builder.append("\t\t\t\t\t\t\t\t\t<th>{beanFieldName}</th>\n".replace("{beanFieldName}", b));
});
return builder.toString();
}
private static String getHtmlColumnsDatas(List<String> beanFieldNames) {
StringBuilder builder = new StringBuilder();
beanFieldNames.forEach(b -> {
builder.append("\t\t\t\t{\"data\" : \"{beanFieldName}\", \"defaultContent\" : \"\"},\n"
.replace("{beanFieldName}", b));
});
private static String getHtmlColumnsDatas(List<String> beanFieldNames) {
StringBuilder builder = new StringBuilder();
beanFieldNames.forEach(b -> {
builder.append("\t\t\t\t{\"data\" : \"{beanFieldName}\", \"defaultContent\" : \"\"},\n".replace("{beanFieldName}", b));
});
builder.append("");
return builder.toString();
}
builder.append("");
return builder.toString();
}
public static String saveStruct(GenerateInput input) {
String beanPackageName = input.getBeanPackageName();
String beanName = input.getBeanName();
List<String> beanFieldName = input.getBeanFieldName();
List<String> beanFieldType = input.getBeanFieldType();
List<String> columnNames = input.getColumnNames();
String text = """
package {beanPackageName};
type {beanName} struct {
{filelds}
}
""";
text = text.replace("{beanPackageName}", beanPackageName).replace("{beanName}", beanName);
String filelds = getFields_go(beanFieldName, beanFieldType,columnNames);
text = text.replace("{filelds}", filelds);
log.debug("生成java model{}模板", beanName);
return text;
}
public static String upperFirstChar(String string) {
String name = TemplateUtil.str2hump(string);
String firstChar = name.substring(0, 1);
name = name.replaceFirst(firstChar, firstChar.toUpperCase());
return name;
}
}

View File

@ -101,6 +101,7 @@
<Menu mnemonicParsing="false" text="go语言工具">
<items>
<MenuItem mnemonicParsing="false" text="json生成结构体" onAction="#json_to_struct_menu_item"/>
<MenuItem mnemonicParsing="false" text="mysql生成结构体" onAction="#mysql_to_struct_menu_item"/>
</items>
</Menu>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="649.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.zhangmeng.tools.controller.MySQLToStructController">
<children>
<TableView fx:id="tableView" layoutY="461.0" prefHeight="187.0" prefWidth="1200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="461.0">
<columns>
<TableColumn fx:id="column_name" prefWidth="200.0" text="表字段名" />
<TableColumn fx:id="column_type" prefWidth="200.0" text="表类型" />
<TableColumn prefWidth="202.0" text="字段描述" />
<TableColumn fx:id="bean_field_name" prefWidth="198.0" text="java字段名" />
<TableColumn fx:id="bean_field_type" prefWidth="200.0" text="java字段类型" />
<TableColumn fx:id="bean_field_value" prefWidth="200.0" text="默认值" />
</columns>
</TableView>
<Label layoutX="4.0" layoutY="433.0" text="字段详情" AnchorPane.leftAnchor="4.0" />
<Label layoutX="10.0" layoutY="217.0" text="结构体" AnchorPane.leftAnchor="10.0" />
<Label layoutX="438.0" layoutY="174.0" text="表名" />
<TextField fx:id="table_name" layoutX="491.0" layoutY="170.0" />
<Button layoutX="670.0" layoutY="170.0" mnemonicParsing="false" onAction="#preview_code" text="预览代码" />
<Button layoutX="754.0" layoutY="170.0" mnemonicParsing="false" onAction="#save_code" text="保存代码" />
<Label layoutX="10.0" layoutY="48.0" text="数据源配置" />
<TextField fx:id="username" layoutX="164.0" layoutY="85.0" />
<Label layoutX="93.0" layoutY="89.0" text="用户名" />
<Label layoutX="370.0" layoutY="89.0" text="密码" />
<TextField fx:id="password" layoutX="416.0" layoutY="85.0" />
<Label layoutX="866.0" layoutY="89.0" text="数据名" />
<TextField fx:id="ip_address" layoutX="164.0" layoutY="119.0" />
<TextField fx:id="data_base" layoutX="921.0" layoutY="85.0" />
<Label layoutX="94.0" layoutY="123.0" text="IP地址" />
<Label layoutX="370.0" layoutY="123.0" text="端口" />
<TextField fx:id="port" layoutX="416.0" layoutY="119.0" />
<ComboBox fx:id="comboBox_table" layoutX="921.0" layoutY="119.0" prefHeight="25.0" prefWidth="161.0" />
<Label layoutX="866.0" layoutY="123.0" text="列表" />
<Button layoutX="1100.0" layoutY="119.0" mnemonicParsing="false" onAction="#fetch_table" text="获取" />
<Label layoutX="603.0" layoutY="89.0" text="数据库列表" />
<ComboBox fx:id="comboBox_data_base" layoutX="679.0" layoutY="85.0" prefWidth="150.0" />
<Button layoutX="652.0" layoutY="119.0" mnemonicParsing="false" onAction="#get_all_data_base" text="获取数据库列表" />
<TextArea fx:id="struct_view" layoutX="82.0" layoutY="213.0" prefHeight="218.0" prefWidth="1114.0" AnchorPane.leftAnchor="86.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="213.0" />
</children>
</AnchorPane>

View File

@ -0,0 +1,6 @@
package {beanPackageName};
type {beanName} struct {
{filelds}
}