• C#提高编程效率专辑--自动代码生成器


    系列文章

    【提升编程效率】单号生成器(定义编号规则、流水号、产生业务单号)
    本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

    【提升编程效率】日期范围生成器(构建开始日期、结束日期)
    本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

    【提升编程效率】Excel数据批量导入工具
    本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

    【提升编程效率】打印解决方案(支持打印模板、条形码、二维码、图片)
    本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723


    前言

    本专栏为【提升编程效率】,主要介绍开发过程中,遇到的一些重复性、机械性、简单性的问题,采用工具代替人工,提升生产力,解放程序员,让其有更多精力投入软件设计

    我的初心是:将软件开发中弯弯绕绕、易错代码逻辑自动生成,软件开发者可以直接复制到项目。总之就是给软件开发者减负,使得写代码变成一件开心的事情。

    本专栏会持续更新,不断优化【提高编程效率】专栏,大家有任何问题,可以私信我。如果您对本专栏其它生产力工具感兴趣,欢迎关注,我将带你用最简洁的代码,实现最复杂的功能。

    一、应用场景

    本文主要介绍自动代码模板生成器,其实就是通过我的工具,您可以自动完成一些代码的编写。它自动生成了 “类文件”,您可以直接拷贝到项目中运行。
    本文已经实现:数据模型的构建(Model层)、数据逻辑代码的构建(BLL层)、数据库交互代码的构建(DAL层)

    二、工具开发(源码)

    2.1 设计软件界面

    这我也没什么好讲的,你们自己看我设计的界面吧,当然你们也可以设计最佳界面,把源码直接展现在功能上。
    在这里插入图片描述

    2.2 创建数据库访问类MySQLHelper.cs

    这段代码,取自于我的《底层库》专栏,链接附上就不过多介绍了。

    C#底层库–MySQL数据库访问操作辅助类(推荐阅读)
    本文链接:https://blog.csdn.net/youcheng_ge/article/details/126886379

    2.3 创建数据库操作类DBOperation.cs

    创建数据库操作类 DBOperation.cs,复制以下代码:
    注意:这里用到 底层库专栏《C#底层库--MySQL数据库访问操作辅助类(推荐阅读)》、《C#底层库--MySQL数据库脚本构建类(推荐阅读)》、《C#底层库--XML配置参数读写辅助类(推荐阅读)》,是不是还有人没有关注啊?我不提醒你们知道吗?

    using System.Data;
    
    namespace CreateCode.DAL
    {
        public class DBOperation
        {
            /// 
            /// 查询所有库
            /// 
            /// 
            public static DataTable GetDataBases()
            {
                string l_strSql = "SHOW DATABASES";
                return MySQLHelper.ShowDataBases(l_strSql).Tables[0] ;
            }
    
            /// 
            /// 查询表
            /// 
            /// 
            public static DataTable GetDataTables()
            {
                string l_strSql = $@"select table_name from information_schema.tables 
                                    where table_schema='{MySQLHelper.dataBaseName}'
                                    order by table_name";
                return MySQLHelper.Query(l_strSql).Tables[0];
            }
    
            /// 
            /// 查询列
            /// 
            /// 
            public static DataSet GetDataColumns(string a_strTableName)
            {
                string l_strSql = $@"select column_name,data_type from information_schema.columns
                        WHERE TABLE_SCHEMA = '{MySQLHelper.dataBaseName}' AND TABLE_NAME = '{a_strTableName}'";
                return MySQLHelper.Query(l_strSql);
            }
        }
    }
    
    
    • 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

    2.5 创建数据库类型转换类ConvertDataType.cs

    创建类ConvertDataType.cs,这里面包含 数据库类型到C#数据类型的转换,以及文件的操作、类、命名空间重命名。我就没有进一步细分,建议你们可以把它拆分一下,分成不同的类文件。

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CreateCode.BLL
    {
        public static class ConvertDataType
        {
            public static string SqlTypeToCType(string sqlType)
            {
                string cType = string.Empty;
                switch (sqlType.Trim().ToLower())
                {
                    //字符型
                    case "char":
                    case "varchar":
                    case "nvarchar":
                    case "text":
                    case "longtext":
                    case "utext":
                    case "set":
                        cType = "string";
                        break;
    
                    //整型
                    case "int":
                    case "decimal":
                        cType = "decimal";
                        break;
                    case "smallint":
                    case "bigint":
                    case "mediumint":
                        cType = "int";
                        break;
    
                    case "tinyint":
                        cType = "sbyte";
                        break;
    
    
                    //长整型
                    case "longblob":
                        cType = "long";
                        break;
    
                    //浮点型
                    case "float":
                        cType = "float";
                        break;
    
                    case "money":
                        cType = "Decimal";
                        break;
    
                    //双精度浮点型
                    case "double":
                        cType = "double";
                        break;
    
                    //布尔型
                    case "binary":
                    case "bit":
                    case "bool":
                    case "boolean":
    
                        cType = "bool";
                        break;
    
    
                    //日期型
                    case "date":
                    case "datetime":
                    case "time":
                    case "timestamp":
                    case "year":
                        cType = "DateTime";
                        break;
    
                    //字节
                    case "varbinary":
                    case "image":
                    case "blob":
                    case "mediumblob":
                        cType = "byte[]";
                        break;
    
                    //枚举
                    case "enum":
                        cType = "enum";
                        break;
    
                    default:
                        cType = "string";
                        break;
                }
                return cType;
            }
    
            public static void FileWrite(string a_fileText, string a_FileFullPath)
            {
                string dir = Path.GetDirectoryName(a_FileFullPath);
    
                if (!Directory.Exists(dir)) //目录不存在创建目录
                {
                    Directory.CreateDirectory(dir);
                }
    
                //if (!File.Exists(a_path))   //文件不存在创建文件
                //{
                //    File.Create(a_path).Close();//防止文件创建被占用,创建成功即文件流关闭
                //}
        
                using (FileStream fs = new FileStream(a_FileFullPath, FileMode.Create))
                {
                    using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
                    {
                        sw.Write(a_fileText);
                    }
                }
            }
    
            /// 
            /// 首字母大写
            /// 
            /// 
            /// 
            public static string ToUpperFirstword(string a_strValue)
            {
                if (string.IsNullOrEmpty(a_strValue))
                {
                    return string.Empty;
                }
                else
                {
                    return a_strValue.Substring(0, 1).ToUpper() + a_strValue.Substring(1).ToLower();
                }
            }
    
            /// 
            /// 驼峰命名法
            /// 
            /// 
            /// 
            public static string ToCamelName(string a_strValue)
            {
                StringBuilder result = new StringBuilder();
                if (a_strValue == null || string.IsNullOrEmpty(a_strValue))
                {
                    return string.Empty;
                }
                else if (!a_strValue.Contains("_"))// 不含下划线,仅将首字母大写
                {
                    return ToUpperFirstword(a_strValue);
                }
                else
                {
                    // 用下划线将原始字符串分割
                    string[] camels = a_strValue.Split('_');
                    foreach (string camel in camels)
                    {
                        // 跳过原始字符串中开头、结尾的下换线或双重下划线
                        if (string.IsNullOrEmpty(camel))
                        {
                            continue;
                        }
    
                        if (result.Length == 0) // 第一个驼峰片段,全部字母都小写
                        {
                            result.Append(camel.ToLower());
                        }
                        else
                        {
                            // 其他的驼峰片段,首字母大写,其它小写
                            result.Append(camel.Substring(0, 1).ToUpper());
                            result.Append(camel.Substring(1).ToLower());
                        }
                    }
                }
                return result.ToString();
            }
        }
    }
    
    
    • 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
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186

    2.6 创建代码工厂类CodeFactory.cs

    创建类代码工厂类CodeFactory.cs,作用就是产生代码模板,复制以下代码:

    using CreateCode.DAL;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace CreateCode.BLL
    {
        public static class CodeFactory
        {
            #region 创建Model
            public static void CreateModel(string a_strNameSpace, string a_strTableName, string a_strDirPath)
            {
                StringBuilder l_sb = new StringBuilder();
                l_sb.AppendLine("using System;");
                l_sb.AppendLine();
                l_sb.AppendLine($"namespace {a_strNameSpace}.Model");
                l_sb.AppendLine("{");
                l_sb.AppendLine(@"    /// ");
                l_sb.AppendLine($@"    /// Model层 {a_strTableName}(以下代码由工具自动生成,有错误请反馈)");
                l_sb.AppendLine(@"    /// ");
                l_sb.AppendLine($"    public class {ConvertDataType.ToUpperFirstword(a_strTableName)}");
                l_sb.AppendLine("    {");
                l_sb.AppendLine("        public "+ ConvertDataType.ToUpperFirstword(a_strTableName)+ "() { }");
    
                var dt = DBOperation.GetDataColumns(a_strTableName).Tables["ds"];
                foreach (DataRow dr in dt.Rows)
                {
                    string l_strType = ConvertDataType.SqlTypeToCType(dr["data_type"].ToString());
                    l_sb.Append($"        public  {l_strType} {dr["column_name"].ToString()}").Append(" { get; set; }").AppendLine();
                }
    
                l_sb.AppendLine("    }");
                l_sb.AppendLine("}");//命名空间结束括号
    
                string l_strFilePath = Path.Combine(a_strDirPath, "Model", $"{a_strTableName}Model.cs");
                ConvertDataType.FileWrite(l_sb.ToString(), l_strFilePath);
            }
            #endregion
    
            #region 创建DAL数据访问层
            public static void CreateDAL(string a_strNameSpace, string a_strTableName, string a_strDirPath)
            {
                //去除自增列
                //string colsNotAutoKey = GetColumns(a_dtTable).Where(m => m != txt.AutoAdd.text.trim()).toarry(); 
                //l_sb.AppendLine("       DBHelperMySQL sh = new DBHelperMySQL();");
                //l_sb.AppendLine($"    {string.Join(",", l_strs)} values");
                //l_sb.AppendLine($"    ({string.Join(",", l_strs.Select(m => "@" + m))}\", values");
    
                StringBuilder l_sb = new StringBuilder();
                l_sb.AppendLine("using System;");
                l_sb.AppendLine("using System.Collections.Generic;");
                l_sb.AppendLine("using System.Data;");
                l_sb.AppendLine("using CreateCode.DAL;");
                l_sb.AppendLine();
                l_sb.AppendLine(@"/// ");
                l_sb.AppendLine($@"/// DAL层 {a_strTableName}(以下代码由工具自动生成,有错误请反馈)");
                l_sb.AppendLine(@"/// ");
                l_sb.AppendLine($"namespace {a_strNameSpace}.DAL"); //命名空间
                l_sb.AppendLine("{"); //命名空间
                l_sb.AppendLine($"    public class {ConvertDataType.ToUpperFirstword(a_strTableName)}");
                l_sb.AppendLine("    {");
                l_sb.AppendLine("        /// ");
                l_sb.AppendLine("        /// 执行语句(带事务回滚机制):插入、修改、删除");
                l_sb.AppendLine("        /// 使用条件:需引入封装类DBHelperMySQL.cs、MakeSQLHelper.cs");
                l_sb.AppendLine("        /// ");
                l_sb.AppendLine("        /// 返回执行行数");
                l_sb.AppendLine("        public int ExecuteSql()");
                l_sb.AppendLine("        {");
                l_sb.AppendLine("            List list = new List();");
                l_sb.AppendLine("            List SQLTextList = new List();");
                l_sb.AppendLine("            SQLTextList.Clear();");
                l_sb.AppendLine("");
                l_sb.AppendLine("            //1、插入语句");
                l_sb.AppendLine("            MakeSQLHelper MakeSQL = new MakeSQLHelper();");
                l_sb.AppendLine($"            string l_strInsertSql = MakeSQL.CreateInsertSQLBuilder({a_strTableName}, list);");
                l_sb.AppendLine("             SQLTextList.Add(l_strInsertSql);");
                l_sb.AppendLine("");
                l_sb.AppendLine("            //2、修改语句");
                l_sb.AppendLine("            string l_strModifySql = \"update \";");
                l_sb.AppendLine("            SQLTextList.Add(l_strModifySql);");
                l_sb.AppendLine("");
                l_sb.AppendLine("            //3、删除语句");
                l_sb.AppendLine("            string l_strDeleteSql = \"\";");
                l_sb.AppendLine("            SQLTextList.Add(l_strDeleteSql);");
                l_sb.AppendLine("");
                l_sb.AppendLine("        }");
                l_sb.AppendLine("");
                l_sb.AppendLine("        /// ");
                l_sb.AppendLine("        /// 查询语句");
                l_sb.AppendLine("        /// 使用条件:需引入封装类DBHelperMySQL.cs");
                l_sb.AppendLine("        /// ");
                l_sb.AppendLine("        /// DataTable");
                l_sb.AppendLine("        public DataTable GetData()");
                l_sb.AppendLine("        {");
                l_sb.AppendLine("            string l_strSql = \"select * from tb\";");
                l_sb.AppendLine("            return DBHelperMySQL.Query(l_strSql).Tables[0];");
                l_sb.AppendLine("        }");
                l_sb.AppendLine("    }");
                l_sb.AppendLine("}");
    
                string l_strFilePath = Path.Combine(a_strDirPath, "DAL", $"{a_strTableName}DAL.cs");
                ConvertDataType.FileWrite(l_sb.ToString(), l_strFilePath);
            }
            #endregion
    
            #region 创建BLL业务逻辑层
            public static void CreateBLL(string a_strNameSpace, string a_strTableName, string a_strDirPath)
            {
                StringBuilder l_sb = new StringBuilder();
                l_sb.AppendLine("using System;");
                l_sb.AppendLine("using System.Collections.Generic;");
                l_sb.AppendLine("using System.Data;");
                l_sb.AppendLine("using WBF.Utils;");
                l_sb.AppendLine();
                l_sb.AppendLine($"namespace {a_strNameSpace}.BLL");
                l_sb.AppendLine("{");
                l_sb.AppendLine("    /// ");
                l_sb.AppendLine("    /// BLL业务逻辑层 t_wutiao(以下代码由工具自动生成,有错误请反馈)");
                l_sb.AppendLine("    /// ");
                l_sb.AppendLine($"    public class {ConvertDataType.ToUpperFirstword(a_strTableName)}");
                l_sb.AppendLine("    {");
                l_sb.AppendLine("		//构造数据对象");
                l_sb.AppendLine($"        {ConvertDataType.ToUpperFirstword(a_strTableName)} {ConvertDataType.ToUpperFirstword(a_strTableName)}Model = new {ConvertDataType.ToUpperFirstword(a_strTableName)}()");
                l_sb.AppendLine("        {");
                var dt = DBOperation.GetDataColumns(a_strTableName).Tables["ds"];
                foreach (DataRow dr in dt.Rows)
                {
                    l_sb.Append($"            {dr["column_name"].ToString()} = baseDataInput_{dr["column_name"].ToString()}.StringValue,").AppendLine();
                }
                l_sb.AppendLine("        };");
                l_sb.AppendLine("");
                l_sb.AppendLine("        //数据对象转json格式");
                l_sb.AppendLine($"        string l_strSend = ConvertJson.SerializeObject({ConvertDataType.ToUpperFirstword(a_strTableName)}Model);");
                l_sb.AppendLine("");
                l_sb.AppendLine("        //实例化消息类,定义消息ID");
                l_sb.AppendLine("        BaseSuperMessage SuperMsg = new BaseSuperMessage(仓库消息_临时.钨条打标);");
                l_sb.AppendLine("		//构造传递参数");
                l_sb.AppendLine("        SuperMsg.Append(\"PrinterPCName\", System.Net.Dns.GetHostName());");
                l_sb.AppendLine("        SuperMsg.Append(\"t_wutiao\", l_strSend);");
                l_sb.AppendLine("        //向服务端发送消息");
                l_sb.AppendLine("        BaseNetClient.SendSuperMessage(SuperMsg);");
                l_sb.AppendLine("    }");
                l_sb.AppendLine("}");
                string l_strFilePath = Path.Combine(a_strDirPath, "BLL", $"{a_strTableName}BLL.cs");
                ConvertDataType.FileWrite(l_sb.ToString(), l_strFilePath);
            }
            #endregion
        }
    
    }
    
    
    • 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
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156

    三、调用方法

    3.1 下拉选择数据库,查询所有表

       private void cbo_DataBases_SelectedIndexChanged(object sender, EventArgs e)
       {
           this.lBC_Left.Items.Clear();
           this.lBC_Right.Items.Clear();
           if (this.cbo_DataBases.Text.Contains("请选择"))
           {
               return;
           }
           else
           {
               MySQLHelper.dataBaseName = this.cbo_DataBases.Text.Trim();//修改库
               DataTable l_dtTables = DBOperation.GetDataTables();
               foreach (DataRow dr in l_dtTables.Rows)
               {
                   this.lBC_Left.Items.Add(dr["table_name"].ToString());
               }
           }
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3.2 点击按钮,生成代码文件

      #region 按钮事件
      private void sbtn_Create_Click(object sender, EventArgs e)
       {
           string l_strNameSpace = text_nameSpace.Text.Trim();
           dxErrorProvider1.ClearErrors();
           if (this.lBC_Right.Items.Count <= 0)
           {
               XtraMessageBox.Show("请选择要生成表!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
               return;
           }
    
           if (string.IsNullOrWhiteSpace(l_strNameSpace))
           {
               dxErrorProvider1.SetError(text_nameSpace, "命名空间不能为空!"); //必须为dev控件
               text_nameSpace.Focus();
               return;
           }
    
           if (!(cb_Models.Checked || cb_DAL.Checked || cb_Bll.Checked))
           {
               XtraMessageBox.Show("生成策略至少勾选一个!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
               return;
           }
    
           FolderBrowserDialog fbd = new FolderBrowserDialog();
           fbd.Description = "选择代码保存目录";
           fbd.SelectedPath = AppDomain.CurrentDomain.BaseDirectory;
           DialogResult dialogResult = fbd.ShowDialog();
           if (dialogResult == DialogResult.OK)
           {
               string l_strDir = Path.Combine(fbd.SelectedPath, l_strNameSpace);
    
               foreach (string l_strTableName in lBC_Right.Items)
               {
                   if (cb_Models.Checked)
                   {
                       CodeFactory.CreateModel(l_strNameSpace, l_strTableName, l_strDir);
                   }
    
                   if (cb_DAL.Checked)
                   {
                       CodeFactory.CreateDAL(l_strNameSpace, l_strTableName, l_strDir);
                   }
    
                   if (cb_Bll.Checked)
                   {
                       CodeFactory.CreateBLL(l_strNameSpace, l_strTableName, l_strDir);
                   }
               }
               XtraMessageBox.Show("代码生成成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
               System.Diagnostics.Process.Start(l_strDir);
           }
       }
       #endregion
    
    • 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

    四、项目样例

    我是用于MES系统开发,C/S架构,目前代码生成的很简洁,出于项目保密,我仅开放部分图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    服务器调用代码,是不是很简洁:
    在这里插入图片描述

    五、资源链接

    代码模板生成器,链接如下:
    链接:https://pan.baidu.com/s/1epm6is-dJ-b1cdJwY1XvQw?pwd=30zq
    提取码:30zq

  • 相关阅读:
    Spring Boot JPA EntityManager实体管理器示例
    嵌入式实时操作系统的设计与开发(内存资源池存储管理)
    如何重置iPhone的网络设置?这里提供详细步骤
    spring+vue项目搭建
    腾讯事务处理技术验证系统3TS-Coo模板安装文档&&说明文档(小白向,简单轻松就能上手)
    JZ47 礼物的最大价值
    数据结构实验六 栈和队列的基本操作及应用
    美丽修行的“数字化修行”记
    数据结构之洗牌算法
    计算机网络期末复习——简明扼要介绍考点及相关知识
  • 原文地址:https://blog.csdn.net/youcheng_ge/article/details/126890673