1
13693261870
2022-10-20 1871d2b624e1c33d185fd5239799d3941f5e36f8
1
已修改5个文件
376 ■■■■■ 文件已修改
JavaCode/BsTemplate/Entity.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JavaCode/BsTemplate/Mapper.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JavaCode/FrmMyBatisPlus.Designer.cs 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JavaCode/FrmMyBatisPlus.cs 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JavaCode/JavaCode.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JavaCode/BsTemplate/Entity.java
@@ -15,7 +15,6 @@
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("{tabName}")
public class {entityName} implements Serializable {
    private static final long serialVersionUID = {uid}L;
JavaCode/BsTemplate/Mapper.java
@@ -14,12 +14,5 @@
@Mapper
@Repository
public interface {mapperName} extends BaseMapper<{entityName}> {
    /**
     * 查询一条
     *
     * @param {id}
     * @return
     */
    @Select("{selectSql}")
    {entityName} selectOne(@Param("{id}") Integer {id});
{wkt}
}
JavaCode/FrmMyBatisPlus.Designer.cs
@@ -37,10 +37,14 @@
            this.label3 = new System.Windows.Forms.Label();
            this.txtMapperNS = new System.Windows.Forms.TextBox();
            this.label2 = new System.Windows.Forms.Label();
            this.btnGenerate = new System.Windows.Forms.Button();
            this.btnGeneAll = new System.Windows.Forms.Button();
            this.btnAll = new System.Windows.Forms.Button();
            this.btnAnti = new System.Windows.Forms.Button();
            this.btnNone = new System.Windows.Forms.Button();
            this.btnGeneEntity = new System.Windows.Forms.Button();
            this.btnGeneMapper = new System.Windows.Forms.Button();
            this.txtTabNS = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            ((System.ComponentModel.ISupportInitialize)(this.dgvTab)).BeginInit();
            this.SuspendLayout();
            // 
@@ -105,17 +109,17 @@
            // txtEntityNS
            // 
            this.txtEntityNS.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.txtEntityNS.Location = new System.Drawing.Point(525, 61);
            this.txtEntityNS.Location = new System.Drawing.Point(525, 89);
            this.txtEntityNS.Name = "txtEntityNS";
            this.txtEntityNS.Size = new System.Drawing.Size(312, 26);
            this.txtEntityNS.TabIndex = 30;
            this.txtEntityNS.Text = "com.lf.server.entity.db";
            this.txtEntityNS.Text = "com.lf.server.entity.bd";
            // 
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.label3.Location = new System.Drawing.Point(385, 66);
            this.label3.Location = new System.Drawing.Point(385, 94);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(136, 16);
            this.label3.TabIndex = 29;
@@ -124,32 +128,32 @@
            // txtMapperNS
            // 
            this.txtMapperNS.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.txtMapperNS.Location = new System.Drawing.Point(525, 15);
            this.txtMapperNS.Location = new System.Drawing.Point(525, 53);
            this.txtMapperNS.Name = "txtMapperNS";
            this.txtMapperNS.Size = new System.Drawing.Size(312, 26);
            this.txtMapperNS.TabIndex = 32;
            this.txtMapperNS.Text = "com.lf.server.mapper.db";
            this.txtMapperNS.Text = "com.lf.server.mapper.bd";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.label2.Location = new System.Drawing.Point(385, 20);
            this.label2.Location = new System.Drawing.Point(385, 58);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(136, 16);
            this.label2.TabIndex = 31;
            this.label2.Text = "Mapper名称空间:";
            // 
            // btnGenerate
            // btnGeneAll
            // 
            this.btnGenerate.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnGenerate.Location = new System.Drawing.Point(525, 115);
            this.btnGenerate.Name = "btnGenerate";
            this.btnGenerate.Size = new System.Drawing.Size(312, 25);
            this.btnGenerate.TabIndex = 33;
            this.btnGenerate.Text = "生 成 文 件";
            this.btnGenerate.UseVisualStyleBackColor = true;
            this.btnGenerate.Click += new System.EventHandler(this.btnGenerate_Click);
            this.btnGeneAll.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnGeneAll.Location = new System.Drawing.Point(525, 208);
            this.btnGeneAll.Name = "btnGeneAll";
            this.btnGeneAll.Size = new System.Drawing.Size(312, 25);
            this.btnGeneAll.TabIndex = 33;
            this.btnGeneAll.Text = "生 成 所 有 文 件";
            this.btnGeneAll.UseVisualStyleBackColor = true;
            this.btnGeneAll.Click += new System.EventHandler(this.btnGeneAll_Click);
            // 
            // btnAll
            // 
@@ -184,15 +188,60 @@
            this.btnNone.UseVisualStyleBackColor = true;
            this.btnNone.Click += new System.EventHandler(this.btnNone_Click);
            // 
            // btnGeneEntity
            //
            this.btnGeneEntity.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnGeneEntity.Location = new System.Drawing.Point(525, 169);
            this.btnGeneEntity.Name = "btnGeneEntity";
            this.btnGeneEntity.Size = new System.Drawing.Size(312, 25);
            this.btnGeneEntity.TabIndex = 38;
            this.btnGeneEntity.Text = "生 成 Entity.java";
            this.btnGeneEntity.UseVisualStyleBackColor = true;
            this.btnGeneEntity.Click += new System.EventHandler(this.btnGeneEntity_Click);
            //
            // btnGeneMapper
            //
            this.btnGeneMapper.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnGeneMapper.Location = new System.Drawing.Point(525, 128);
            this.btnGeneMapper.Name = "btnGeneMapper";
            this.btnGeneMapper.Size = new System.Drawing.Size(312, 25);
            this.btnGeneMapper.TabIndex = 37;
            this.btnGeneMapper.Text = "生 成 Mapper.java";
            this.btnGeneMapper.UseVisualStyleBackColor = true;
            this.btnGeneMapper.Click += new System.EventHandler(this.btnGeneMapper_Click);
            //
            // txtTabNS
            //
            this.txtTabNS.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.txtTabNS.Location = new System.Drawing.Point(525, 15);
            this.txtTabNS.Name = "txtTabNS";
            this.txtTabNS.Size = new System.Drawing.Size(312, 26);
            this.txtTabNS.TabIndex = 40;
            this.txtTabNS.Text = "bd.";
            //
            // label1
            //
            this.label1.AutoSize = true;
            this.label1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.label1.Location = new System.Drawing.Point(433, 20);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(88, 16);
            this.label1.TabIndex = 39;
            this.label1.Text = "表名前缀:";
            //
            // FrmMyBatisPlus
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(852, 628);
            this.Controls.Add(this.txtTabNS);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.btnGeneEntity);
            this.Controls.Add(this.btnGeneMapper);
            this.Controls.Add(this.btnNone);
            this.Controls.Add(this.btnAnti);
            this.Controls.Add(this.btnAll);
            this.Controls.Add(this.btnGenerate);
            this.Controls.Add(this.btnGeneAll);
            this.Controls.Add(this.txtMapperNS);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.txtEntityNS);
@@ -223,9 +272,13 @@
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.TextBox txtMapperNS;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Button btnGenerate;
        private System.Windows.Forms.Button btnGeneAll;
        private System.Windows.Forms.Button btnAll;
        private System.Windows.Forms.Button btnAnti;
        private System.Windows.Forms.Button btnNone;
        private System.Windows.Forms.Button btnGeneEntity;
        private System.Windows.Forms.Button btnGeneMapper;
        private System.Windows.Forms.TextBox txtTabNS;
        private System.Windows.Forms.Label label1;
    }
}
JavaCode/FrmMyBatisPlus.cs
@@ -3,9 +3,12 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -31,7 +34,8 @@
        }
        #endregion
        // 135502,69701  29257,20582
        #region 查询表结构:135502,69701  29257,20582
        private void btnReadTab_Click(object sender, EventArgs e)
        {
            try
@@ -39,7 +43,7 @@
                string tabName = this.txtTabPre.Text.Trim();
                string tabFilter = string.IsNullOrEmpty(tabName) ? "" : string.Format("and c.relname like '{0}%'", tabName);
                string sql = string.Format("select c.relname as \"tab\", cast(obj_description(c.oid) as varchar) as \"desc\", a.attnum as \"num\", a.attname as \"col\",concat_ws('', t.typname, SUBSTRING(format_type(a.atttypid, a.atttypmod) from '(.*)')) as \"type\", d.description as \"bak\" from pg_attribute a left join pg_description d on d.objoid = a.attrelid and d.objsubid = a.attnum left join pg_class c on a.attrelid = c.oid left join pg_type t on a.atttypid = t.oid where a.attnum >= 0 and reltype>0 and relnamespace in ({0}) {1} order by c.relname desc, a.attnum asc", this.txtNS.Text.Trim(), tabFilter);
                string sql = string.Format("select c.relname \"tab\", cast(obj_description(c.oid) as varchar) \"desc\", a.attnum \"num\", a.attname \"col\", t.typname \"type\", d.description \"bak\" from pg_attribute a left join pg_description d on d.objoid = a.attrelid and d.objsubid = a.attnum left join pg_class c on a.attrelid = c.oid left join pg_type t on a.atttypid = t.oid where a.attnum >= 0 and reltype>0 and relnamespace in ({0}) {1} order by c.relname desc, a.attnum asc", this.txtNS.Text.Trim(), tabFilter);
                DataTable dt = _dbHelper.GetDataTable(sql, null);
                _list = ModelHandler.FillModel<TabInfo>(dt);
@@ -102,10 +106,273 @@
                this.dgvTab.CurrentCell = this.dgvTab.Rows[1].Cells[0];
            }
        }
        #endregion
        private void btnGenerate_Click(object sender, EventArgs e)
        #region 按钮事件
        private void btnGeneMapper_Click(object sender, EventArgs e)
        {
            //
            try
            {
                string path = Path.Combine(baseDir, "BsGenerate\\Mapper");
                List<string> names = GetTabList();
                foreach (string name in names)
                {
                    List<TabInfo> tabs = GetTabInfo(name);
                    GenerateMapper(path, name, tabs);
                }
                OpenFolder(path);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void btnGeneEntity_Click(object sender, EventArgs e)
        {
            try
            {
                string path = Path.Combine(baseDir, "BsGenerate\\Entity");
                List<string> names = GetTabList();
                foreach (string name in names)
                {
                    List<TabInfo> tabs = GetTabInfo(name);
                    GenerateEntity(path, name, tabs);
                }
                OpenFolder(path);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void btnGeneAll_Click(object sender, EventArgs e)
        {
            try
            {
                string mapperPath = Path.Combine(baseDir, "BsGenerate\\Mapper");
                string entityPath = Path.Combine(baseDir, "BsGenerate\\Entity");
                List<string> names = GetTabList();
                foreach (string name in names)
                {
                    List<TabInfo> tabs = GetTabInfo(name);
                    GenerateMapper(mapperPath, name, tabs);
                    GenerateEntity(entityPath, name, tabs);
                }
                string path = Path.Combine(baseDir, "BsGenerate");
                OpenFolder(path);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        #endregion
        #region 生成 Mapper
        private void GenerateMapper(string path, string name, List<TabInfo> tabs)
        {
            if (!Directory.Exists(path)) Directory.CreateDirectory(path);
            string tabName = this.txtTabNS.Text.Trim() + name;
            string shortName = NameConvert(name, true);
            string mapperNS = this.txtMapperNS.Text.Trim();
            string mapperName = shortName + "Mapper";
            string entityNS = this.txtEntityNS.Text.Trim();
            string entityName = shortName + "Entity";
            string bak = string.IsNullOrWhiteSpace(tabs[0].desc) ? shortName : tabs[0].desc.Replace("表", "");
            string wkt = this.HasGeom(tabs) ?
                    "    /**\r\n" +
                    "     * 根据ID查询WKT\r\n" +
                    "     *\r\n" +
                    "     * @param gid\r\n" +
                    "     * @return\r\n" +
                    "     */\r\n" +
                    "    @Select(\"select st_astext(geom) geom from " + tabName + " where gid = #{gid}\")\r\n" +
                    "    String selectWktById(@Param(\"gid\") Integer gid);" : "";
            string xml = File.ReadAllText(Path.Combine(baseDir, "BsTemplate\\Mapper.java"));
            xml = xml
                .Replace("{mapperNS}", mapperNS)
                .Replace("{mapperName}", mapperName)
                .Replace("{entityNS}", entityNS)
                .Replace("{entityName}", entityName)
                .Replace("{wkt}", wkt)
                .Replace("{bak}", bak);
            string fileName = shortName + "Mapper.java";
            File.WriteAllText(Path.Combine(path, fileName), xml);
        }
        #endregion
        #region 生成 Entity
        private void GenerateEntity(string path, string name, List<TabInfo> tabs)
        {
            if (!Directory.Exists(path)) Directory.CreateDirectory(path);
            string tabName = this.txtTabNS.Text.Trim() + name;
            string shortName = NameConvert(name, true);
            string entityNS = this.txtEntityNS.Text.Trim();
            string entityName = shortName + "Entity";
            string bak = string.IsNullOrWhiteSpace(tabs[0].desc) ? shortName : tabs[0].desc.Replace("表", "");
            long uid = (long)Math.Floor((new Random()).NextDouble() * 1000000000000000000D);
            string xml = File.ReadAllText(Path.Combine(baseDir, "BsTemplate\\Entity.java"));
            xml = xml
                .Replace("{entityNS}", entityNS)
                .Replace("{entityName}", entityName)
                .Replace("{bak}", bak)
                .Replace("{tabName}", tabName)
                .Replace("{uid}", uid.ToString());
            StringBuilder sb = new StringBuilder();
            foreach (TabInfo ti in tabs)
            {
                string type = GetJavaType(ti);
                if (ti.col == "gid") sb.Append("\r\n    @TableId(type = IdType.AUTO)");
                if (ti.col == "geom") sb.Append("\r\n    @TableField(select = false)");
                if (ti.col == "class")
                {
                    sb.Append("\r\n    @TableField(value = \"class\")");
                    ti.col = "clazz";
                }
                string colName = NameConvert(ti.col, false);
                sb.Append("\r\n    private " + type + " " + colName + ";\r\n");
            }
            sb.Append("\r\n    public " + entityName + "() {\r\n    }\r\n");
            foreach (TabInfo ti in tabs)
            {
                string type = GetJavaType(ti);
                string col1 = NameConvert(ti.col, true);
                string col2 = NameConvert(ti.col, false);
                sb.Append("\r\n    public " + type + " get" + col1 + "() {\r\n        return " + col2 + ";\r\n    }\r\n");
                sb.Append("\r\n    public void set" + col1 + "(" + type + " " + col2 + ") {\r\n        this." + col2 + " = " + col2 + ";\r\n    }\r\n");
            }
            sb.Append("}\r\n");
            sb.Insert(0, xml);
            string fileName = shortName + "Entity.java";
            File.WriteAllText(Path.Combine(path, fileName), sb.ToString());
        }
        #endregion
        #region 公共方法
        private List<string> GetTabList()
        {
            List<string> list = new List<string>();
            for (int i = 0, c = this.tabList.SelectedItems.Count; i < c; i++)
            {
                string item = this.tabList.SelectedItems[i] as String;
                if (!string.IsNullOrEmpty(item))
                {
                    list.Add(item);
                }
            }
            return list;
        }
        private List<TabInfo> GetTabInfo(string name)
        {
            List<TabInfo> tabs = (from p in _list where p.tab == name orderby p.num select p).ToList<TabInfo>();
            return tabs;
        }
        private static string NameConvert(string name, bool firstUpper)
        {
            string[] strs = name.Split(new char[] { '_' });
            string str = "";
            for (int i = 0, c = strs.Length; i < c; i++)
            {
                if (i == 0 && !firstUpper)
                {
                    str += strs[i];
                    continue;
                }
                str += ToUpperFirst(strs[i]);
            }
            return str;
        }
        public static string ToUpperFirst(string str)
        {
            return Regex.Replace(str, @"^\w", t => t.Value.ToUpper());
        }
        private string GetJavaType(TabInfo ti)
        {
            switch (ti.type)
            {
                case "timestamp":
                    return "Timestamp";
                case "float4": // float
                    return "Float";
                case "float8": // double
                    return "Double";
                case "bool": // boolean
                    return "Boolean";
                case "numeric":
                    return "BigDecimal";
                case "int8": // long
                    return "Long";
                case "int2":
                case "int4": // int
                    return "Integer";
                default:
                    return "String";
            }
        }
        private bool HasGeom(List<TabInfo> tabs)
        {
            foreach (TabInfo ti in tabs)
            {
                if (ti.col == "geom") return true;
            }
            return false;
        }
        private static void OpenFolder(string folderPath)
        {
            if (string.IsNullOrEmpty(folderPath)) return;
            Process process = new Process();
            ProcessStartInfo psi = new ProcessStartInfo("Explorer.exe");
            psi.Arguments = folderPath;
            process.StartInfo = psi;
            try
            {
                process.Start();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                process.Close();
            }
        }
        private String QueryPrimaryKey(string tab)
@@ -116,5 +383,6 @@
            return obj == null ? null : obj.ToString();
        }
        #endregion
    }
}
JavaCode/JavaCode.csproj
@@ -82,6 +82,7 @@
    </EmbeddedResource>
    <EmbeddedResource Include="FrmSys.resx">
      <DependentUpon>FrmSys.cs</DependentUpon>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <EmbeddedResource Include="FrmMyBatisPlus.resx">
      <DependentUpon>FrmMyBatisPlus.cs</DependentUpon>